我正在为编译器创建一个LLVM后端。我想知道让我的后端在文件中编写IR代码而不是使用API是否有任何缺点。 API很复杂(特别是如果一个人使用C ++以外的语言,在我的案例中是Haskell)并且很难使用。 IR更容易理解。我不需要JIT编译,输出代码将通过标准命令行工具编译为机器代码。
答案 0 :(得分:3)
IR格式从版本变为版本。 API变化的频率要低得多。过去有一些例子,当IR格式发生巨大变化时,你需要投入大量时间来容忍这些变化。
使用API是更好的方法。如果有时候您不清楚需要哪些API调用 - 您可以使用cpp后端作为灵感来源:)
答案 1 :(得分:2)
正如Anton所说,使用API有一定的优势,而不是吐出文本IR。我只想谈谈你提出的关于API的复杂性及其在Haskell中的使用的观点。
请注意,LLVM有一个C API,它(除了更稳定)适用于外语接口。使用此API的LLVM以及Haskell绑定(Google的this is easily found)以及其他语言都存在Python绑定。