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

LLVM:我必须设置目标布局还是设置目标布局更好?,llvm,llvm-ir,Llvm,Llvm Ir,我正在学习LLVM框架的基础知识。我了解了描述数据类型的目标布局,以及描述机器和操作系统的目标三元组。 然而,我无法找到关于什么是真正必须设置的以及为什么设置的信息。 我发现了一些例子,其中没有设置任何一个,或者设置了一个或另一个。显然,没有必要为一个工作的IR文件设置任何一个,但我的印象是,开发人员希望我在那里设置一些东西,否则为什么会公开这个接口 我的理解是,基于目标三元组,LLVM应该能够自己导出正确的数据布局,但是如果是这样,为什么可以手动设置数据布局呢 那么,正确的做法是什么呢?我应该

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

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


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

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


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

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

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

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

您说:

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

我也这么想。但实际上,优化器需要明确的数据布局集。否则,它将采用默认布局,这可能会损坏代码。例如,见:

是否还有获取主机数据布局的功能?