【问题标题】:LLVM code generator: is Machine code representation machine-agnostic?LLVM 代码生成器:机器代码表示是否与机器无关?
【发布时间】:2019-03-05 22:10:56
【问题描述】:

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

关于 LLVM Machine code description classes 的这份文档说(突出显示我的):

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

但是,同一段继续说:

这种表示完全与目标无关,以最抽象的形式表示指令...

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

我很难调和这种中间表示是机器特定目标不可知的说法。我认为在 LLVM 的上下文中,“机器”和“目标”的含义相同——编译后的可执行文件使用的指令集架构(例如 x86_64、MIPS)。

欢迎提供示例。

【问题讨论】:

    标签: llvm compiler-optimization


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。如果给出指令集,例如x86,您上面提到的歧义是否有余地?
    • 如果我正确理解了评论,那么我不确定,但 MIR 是 SSA 并且 x86 不是为 SSA 设计的,因此至少存在模棱两可的风险。如果我不这样做,那我就不明白了。对不起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2012-11-07
    • 1970-01-01
    • 2010-11-10
    相关资源
    最近更新 更多