IR LLVM表单与汇编

时间:2016-10-04 20:42:52

标签: c++ x86 clang llvm llvm-ir

https://idea.popcount.org/2013-07-24-ir-is-better-than-assembly/

您好,

我掌握了IR的想法,但有一个问题不明确。

为什么IR比集会更好?我已经阅读了作者所说的内容,我发现它通常在抽象意义上更高。它允许类型控制。但是,我想问一些其他事情:

特别是,LLVM IR是一种中间形式。但是,为什么要在该表格上进行优化?是否无法优化装配输出?确实,有可能吗?那么,为什么LLVM IR在这种情况下如此强大呢?我认为对IR形式的分析只是更简单,而且更可能"。

1 个答案:

答案 0 :(得分:2)

这就是我如何阅读您的问题:为什么编译器不会快速转换为非优化的程序集,然后对其进行优化。

优化装配会产生一些严重的限制。正如Chris Stathis所提到的,程序集优化器将仅限于一个平台。 IR优化器独立于平台。

此外,在程序集中编码的硬件特定细节太多。编译器优化已经很困难,因此没有理由通过向它们添加不相关的硬件细节来使问题更复杂。例如,在汇编代码中,您具有特定大小的有限数量的寄存器。在IR中,您可以根据需要使用尽可能多的寄存器。没有理由通过强制跟踪硬件寄存器来使您的优化算法更加复杂。

LLVM IR对我所知道的其他编译器IR有一些优势。一个重要的优点是LLVM IR处于SSA形式。这意味着变量只能定义一次,其值永远不会改变。这极大地简化了编译器优化。

通过查看LLVM IR手册,可能不太明显它是SSA形式。但是,一旦您查看用于表示LLVM库中的IR的数据结构,您将看到无法在LLVM IR中编写非SSA代码。