我正在学习LLVM框架的基础知识。我读到了描述数据类型的目标布局以及描述机器和操作系统的目标三元组。 但是,我无法找到有关什么是真正强制设置的信息以及原因。 我找到了这些例子,其中没有设置这些或者设置了一个或另一个。显然,没有必要为工作的IR文件设置,但我的印象是开发人员希望我在那里设置一些东西,为什么还会暴露这个界面呢?
我的理解是,基于目标三元组,LLVM应该能够自己导出正确的数据布局,但如果是这样,为什么可以手动设置数据布局。
那么这样做的正确方法是什么?我应该选择哪种方式?设置目标三元组还是手动定义完整的布局?
答案 0 :(得分:2)
DataLayout将成为强制性的,因此我强烈建议您使用它。能够在没有Triple的情况下放入DataLayout的原因是您可以进行需要DataLayout工作的目标独立转换。当你到达那一点时,三元组将影响代码生成。
将来我们希望有一个前端编写者可以使用/修改的API,使他们能够从后端获得默认的三元组。
答案 1 :(得分:0)
LLVM人员建议设置目标三元组和数据布局规范。
确保您的模块包含数据布局规范和目标三元组。如果没有这些部分,将启用非目标特定优化。这会对生成的代码质量产生重大影响。
来自http://llvm.org/docs/Frontend/PerformanceTips.html#the-basics
有LLVMGetDefaultTargetTriple函数可以获取本地计算机的目标规范。
答案 2 :(得分:0)
您说:
我的理解是,基于目标三元组,LLVM应该是 能够自己得出正确的数据布局,但是如果是这样, 为什么可以手动设置数据布局。
我也这么认为。但是实际上,优化器希望显式设置数据布局。否则,它将采用默认布局,这可能会破坏您的代码。参见例如: https://bugs.llvm.org/show_bug.cgi?id=45188