编写LLVM源文件与使用API

编写LLVM源文件与使用API,llvm,Llvm,我正在为编译器创建LLVM后端。我想知道让我的后端在文件中编写IR代码而不是使用API是否有任何不利之处。API是复杂的(特别是如果使用的是C++以外的语言,在我的例子中是Haskell),并且很难使用。IR更容易理解。我不需要JIT编译,输出代码将通过标准命令行工具编译为机器代码。IR格式会随着版本的不同而变化。API更改的频率要低得多。在过去的例子中,IR格式发生了巨大的变化,因此您需要投入大量的时间来容忍这些变化 使用API是更好的方法。如果有时您不清楚需要哪些API调用,您可以使用cpp

我正在为编译器创建LLVM后端。我想知道让我的后端在文件中编写IR代码而不是使用API是否有任何不利之处。API是复杂的(特别是如果使用的是C++以外的语言,在我的例子中是Haskell),并且很难使用。IR更容易理解。我不需要JIT编译,输出代码将通过标准命令行工具编译为机器代码。

IR格式会随着版本的不同而变化。API更改的频率要低得多。在过去的例子中,IR格式发生了巨大的变化,因此您需要投入大量的时间来容忍这些变化


使用API是更好的方法。如果有时您不清楚需要哪些API调用,您可以使用cpp后端作为灵感来源:)

IR格式会随着版本的不同而变化。API更改的频率要低得多。在过去的例子中,IR格式发生了巨大的变化,因此您需要投入大量的时间来容忍这些变化


使用API是更好的方法。如果有时您不清楚需要哪种API调用,您可以使用cpp后端作为灵感来源:)

正如Anton所说,使用API与抛出文本IR相比有着明显的优势。我只想谈谈您提出的关于API的复杂性及其在Haskell中的使用的问题


请注意,LLVM有一个C API,它(除了更稳定之外)适用于外语接口。Python绑定适用于使用此API的LLVM,以及Haskell绑定(由Google提供)和其他语言。

正如Anton所说,使用此API与吐出文本IR相比有着明显的优势。我只想谈谈您提出的关于API的复杂性及其在Haskell中的使用的问题


请注意,LLVM有一个C API,它(除了更稳定之外)适用于外语接口。使用此API的LLVM存在Python绑定,Haskell绑定(由Google提供)和其他语言也存在Python绑定。

我肯定知道Haskell绑定。。但它们是有限制的(它们不允许动态数量的函数参数,在Haskell程序的编译时是未知的)。老实说,我也觉得API很难看,而且不直观。@aelguindy:好吧,你的里程数可能会有所不同:-)请记住,编写IR也是不文明的,因为它是一种复杂的语言。也就是说,你必须自己跟踪所有的注册名称-API为你做这件事。我肯定知道Haskell绑定。。但它们是有限制的(它们不允许动态数量的函数参数,在Haskell程序的编译时是未知的)。老实说,我也觉得API很难看,而且不直观。@aelguindy:好吧,你的里程数可能会有所不同:-)请记住,编写IR也是不文明的,因为它是一种复杂的语言。也就是说,你必须自己跟踪所有的注册名称——API为你做这件事。