LLVM代码生成器:机器代码表示是否与机器无关?

时间:2018-09-30 17:17:38

标签: llvm compiler-optimization

请注意:这个问题不是关于LLVM IR的问题,而是LLVM的MIR,这是一个比前一个更低的内部中间表示形式。

关于LLVM Machine code description classes的此文档说(突出我的观点):

  

在高层次上,LLVM代码转换为由MachineFunction,MachineBasicBlock和MachineInstr实例组成的特定于机器的表示形式...

但是,同一段继续说:

  

此表示完全是与目标无关的,以最抽象的形式表示说明...

我的问题是,如何理解本段?

我很难调和这种中间表示是同时针对机器特定不可知目标的说法。我认为在LLVM的上下文中,“机器”和“目标”是同一件事-编译的可执行文件使用的指令集体系结构(例如x86_64,MIPS)。

欢迎示例。

1 个答案:

答案 0 :(得分:1)

有不同的方法可以针对特定平台。例如,您可以为add使用不同名称的操作码,或者具有不同的溢出语义,或者对于所有对象都使用相同的add,并且为相同的参数指定操作数/标志所有目标平台,具有相同的默认值。

还有许多特定于目标的细节,例如指针的大小或对齐方式会影响您的代码,即使它们不影响任何一条指令。

机器IR代表其最抽象的形式的指令。它不会尝试隐藏该目标上的指针具有32位。