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

Lee*_*hai 6 llvm compiler-optimization

请注意:这个问题不是关于LLVM IR,而是LLVM的MIR,一个低于前者的内部中间表示.

关于LLVM 机器代码描述类的文档说明(突出我的):

在高级别,LLVM代码被转换为由MachineFunction,MachineBasicBlock和MachineInstr实例构成的机器特定表示...

然而,同一段落继续说:

这种表示完全是目标不可知的,以最抽象的形式表示指令......

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

我很难协调这个中间表示是机器特定的并且同时与目标无关的声明.在LLVM的上下文中,我认为"机器"和"目标"意味着相同的东西 - 编译的可执行文件使用的指令集架构(例如x86_64,MIPS).

欢迎举例.

arn*_*rnt 1

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

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

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