请注意:这个问题不是关于LLVM IR的问题,而是LLVM的MIR,这是一个比前一个更低的内部中间表示形式。
关于LLVM Machine code description classes的此文档说(突出我的观点):
在高层次上,LLVM代码转换为由MachineFunction,MachineBasicBlock和MachineInstr实例组成的特定于机器的表示形式...
但是,同一段继续说:
此表示完全是与目标无关的,以最抽象的形式表示说明...
我的问题是,如何理解本段?
我很难调和这种中间表示是同时针对机器特定和不可知目标的说法。我认为在LLVM的上下文中,“机器”和“目标”是同一件事-编译的可执行文件使用的指令集体系结构(例如x86_64,MIPS)。
欢迎示例。
答案 0 :(得分:1)
有不同的方法可以针对特定平台。例如,您可以为add
使用不同名称的操作码,或者具有不同的溢出语义,或者对于所有对象都使用相同的add
,并且为相同的参数指定操作数/标志所有目标平台,具有相同的默认值。
还有许多特定于目标的细节,例如指针的大小或对齐方式会影响您的代码,即使它们不影响任何一条指令。
机器IR代表其最抽象的形式的指令。它不会尝试隐藏该目标上的指针具有32位。