【问题标题】:LLVM: Do I have to set a target layout or is it better to set a target triple?LLVM:我必须设置目标布局还是设置目标三元组更好?
【发布时间】:2015-03-22 07:15:00
【问题描述】:

我正在学习 LLVM 框架的基础知识。我阅读了描述数据类型的目标布局以及描述机器和操作系统的目标三元组。 但是,我无法找到有关真正必须设置的内容以及原因的信息。 我找到了没有设置这些设置或设置了其中一个或另一个的示例。显然,对于一个工作的 IR 文件都不需要设置,但我的印象是开发人员希望我在那里设置一些东西,否则为什么会暴露这个接口?

我的理解是,基于目标三元组,LLVM应该能够自己推导出正确的数据布局,但如果是这样,为什么可以手动设置数据布局。

那么正确的做法是什么?我应该选择哪种方式?设置目标三元组还是手动定义完整布局?

【问题讨论】:

    标签: llvm llvm-ir


    【解决方案1】:

    DataLayout 将成为强制性的,因此我强烈建议您使用它。能够在没有 Triple 的情况下放入 DataLayout 的原因是,您可以拥有需要 DataLayout 才能工作的目标独立转换。当您达到这一点时,三元组将影响代码生成。

    未来我们希望有一个前端编写者可以使用/修改的 API,使他们能够从后端获取默认的三元组。

    【讨论】:

      【解决方案2】:

      LLVM 人员建议同时设置目标三元组和数据布局规范。

      确保您的模块同时包含数据布局规范和目标三元组。如果没有这些部分,将启用非特定于目标的优化。这会对生成的代码质量产生重大影响。

      来自http://llvm.org/docs/Frontend/PerformanceTips.html#the-basics

      有一个LLVMGetDefaultTargetTriple函数可以获取本地机器的目标规格。

      【讨论】:

      • 还有获取主机数据布局的功能吗?
      【解决方案3】:

      你说:

      我的理解是,基于目标三元组,LLVM 应该是 能够自己推导出正确的数据布局,但如果是这样, 为什么可以手动设置数据布局。

      我也是这么想的。但实际上,优化器需要明确设置数据布局。否则,它会采用默认布局,这可能会破坏您的代码。参见例如: https://bugs.llvm.org/show_bug.cgi?id=45188

      【讨论】:

        猜你喜欢
        • 2011-03-21
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        • 2016-05-11
        • 2013-06-19
        • 2011-01-02
        • 2019-01-08
        • 1970-01-01
        相关资源
        最近更新 更多