LLVM汇编语言有多稳定?

7
LLVM语言参考指出,它可以用作磁盘上的位码表示(适用于即时编译器的快速加载)。
这种表现形式有多稳定呢?例如,我今天是否可以使用LLVM 3.1生成它,并在将来的LLVM中(假设三年后的LLVM 4.5)仍然能够使用?
假设我没有外部依赖关系,我可以使用它来为不同的架构生成二进制文件吗?

我最好的猜测是“完全向后兼容”。 - John Dvorak
2
您实际上有两个问题:一个是它在版本之间是否稳定,另一个是它是否与平台无关。第二个问题已经在这里提出(并回答) - Oak
2个回答

8
回答你的第一个问题:不行。它不稳定。不能指望3.1生成的IR / bitcode在4.5中可读 - LLVM项目明确表示不提供此保证,为了能更快地向前发展、创建更好的优化工具以及根据需要重构框架的部分而牺牲了向后兼容性。LLVM主要针对静态、预编译(AOT)编译器,所以这种方法对大型参与者有意义。
我真的不明白第二个问题。LLVM有许多体系结构的目标(后端),对于大多数流行的体系结构都可以很好地工作。但是,他们的输入是IR,在发布之间可能会发生变化。还要确保阅读:http://llvm.org/docs/FAQ.html#can-i-compile-c-or-c-code-to-platform-independent-llvm-bitcode,以及这里的“目标依赖”部分:https://llvm.org/docs/tutorial/LangImpl10.html 问题在于,当询问LLVM平台独立性时,许多人会问“从我的C代码编译的LLVM IR是否与目标无关?”答案是否定的,因为C本身是与目标相关的。

你的第二个链接现在已经失效了。 - Culex

4

回答您的第一个问题:以下是LLVM开发者政策中的一句话。

当必须更改IR格式时,请记住我们尝试保持一些向后兼容性。这些规则旨在平衡llvm用户的便利和不给llvm开发者带来过大负担之间的关系:

  • 文本格式不向后兼容。我们不经常更改它,但没有具体承诺。
  • X.Y版本发布的位码格式将可被所有随后的X.Z版本和(X+1)。0版本读取。
  • 较新版本可以忽略较旧版本的功能,但不能错误地编译它们。例如,如果nsw曾被替换为其他内容,则删除该功能将是升级IR的有效方法。
  • 调试元数据是特殊的,因为在升级期间当前已删除。
  • 非调试元数据定义为安全丢弃,因此升级它的有效方法是将其删除。虽然这并不太用户友好,需要付出更多努力,但没有做出任何承诺。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接