LLVM:我必须设置目标布局,还是设置目标三元组更好?

问题描述 投票:2回答:3

我正在学习LLVM框架的基础。我阅读了有关描述数据类型的目标布局以及有关描述机器和操作系统的目标三元组的信息。但是,我无法找到有关真正必须设置的内容以及原因的信息。我发现了没有设置任何一个或设置了一个或另一个的示例。显然,没有必要为有效的IR文件设置任何一个,但是我给开发人员以印象是,开发人员希望我在此处设置一些内容,为什么还要公开此接口?

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

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

llvm llvm-ir
3个回答
2
投票

DataLayout将成为强制性的,所以我强烈建议您使用它。可以不使用Triple放置DataLayout的原因是,这样您就可以进行需要DataLayout才能工作的目标独立转换。当达到这一点时,三元组将影响代码生成。

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


0
投票

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

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

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

[LLVMGetDefaultTargetTriple函数可以获取本地计算机的目标规格。


0
投票

您说:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.