Assembly LLVM汇编语言的稳定性如何?

Assembly LLVM汇编语言的稳定性如何?,assembly,llvm,intermediate-language,Assembly,Llvm,Intermediate Language,声明它可以被使用 作为磁盘上的位代码表示(适用于即时编译器的快速加载) 这种代表性有多稳定?例如,我现在是否可以使用LLVM 3.1生成它,并且仍然可以使用未来的LLVM(比如假设的LLVM 4.5)在三年内使用它 假设我没有外部依赖项,我可以使用它为不同的体系结构生成二进制文件吗?回答第一个问题:不,它不稳定。不,您不能期望3.1生成的IR/位代码在4.5中是可读的-LLVM项目明确没有做出这一保证,牺牲了向后兼容性,以便能够更快地向前推进,创建更好的优化和工具,并根据需要重构框架的部分。LL

声明它可以被使用

作为磁盘上的位代码表示(适用于即时编译器的快速加载)

这种代表性有多稳定?例如,我现在是否可以使用LLVM 3.1生成它,并且仍然可以使用未来的LLVM(比如假设的LLVM 4.5)在三年内使用它


假设我没有外部依赖项,我可以使用它为不同的体系结构生成二进制文件吗?

回答第一个问题:不,它不稳定。不,您不能期望3.1生成的IR/位代码在4.5中是可读的-LLVM项目明确没有做出这一保证,牺牲了向后兼容性,以便能够更快地向前推进,创建更好的优化和工具,并根据需要重构框架的部分。LLVM主要针对静态、提前(AOT)编译器,因此这种方法对于大型玩家来说是有意义的

第二个问题我不太明白。LLVM对许多体系结构都有目标(后端),并且对大多数流行的体系结构都很有效。但是,他们的输入是IR,在不同版本之间可能会发生变化。还要确保阅读以下内容:,以及此处的“目标相关性”部分:


问题是,当问及LLVM平台独立性时,许多人会问“从我的C代码编译的LLVM IR是否独立于目标?”。答案是否定的,因为C本身依赖于目标。

回答您的第一个问题:这里引用了LLVM开发者政策

当需要更改IR格式时,请记住,我们会尝试保持一些向后兼容性。这些规则旨在平衡llvm用户的便利性和不会给llvm开发人员带来很大负担:

  • 文本格式不向后兼容。我们不会经常改变,但没有具体的承诺
  • X.Y版本生成的位码格式将可被所有后续X.Z版本和(X+1).0版本读取
  • 较新版本可以忽略较旧版本中的功能,但不能将其错配。例如,如果新南威尔士州曾经被其他地方取代,放弃它将是升级IR的有效方法
  • 调试元数据的特殊之处在于,它当前在升级过程中被删除
  • 非调试元数据定义为可以安全删除,因此升级它的有效方法是删除它。这对用户来说不是很友好,需要付出更多的努力,但没有做出任何承诺

我最好的猜测是“完全向后兼容”,实际上这里有两个问题:版本之间是否稳定,以及是否独立于平台@谢谢你的指点。你的第二个链接现在断了。