IR LLVM形式与程序集

IR LLVM form vs assembly

本文关键字:程序集 LLVM IR      更新时间:2023-10-16

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

你好,

我掌握了IR的概念,但有一个问题不清楚。

为什么IR比程序集更好?我读过作者对它的评价,我发现它在抽象意义上通常更高。它允许类型控制。但是,我想问一下其他问题:

特别是LLVM IR是一种中间形式,为什么要对它进行优化呢?是否无法优化装配输出?确实,这是可能的吗?那么,为什么LLVM IR在这种情况下使用如此之好呢?我认为对IR形式的分析只是更简单和"更有可能"。

我就是这样理解你的问题的:为什么编译器不快速转换到未优化的程序集,然后再进行优化。

优化装配会带来一些严重的限制。正如Chris Stathis所提到的,汇编优化器将被限制在一个平台上。IR优化器独立于平台。

此外,汇编中编码了太多硬件特定的细节。编译器优化已经很困难了,所以没有理由通过添加不相关的硬件细节来使问题变得更复杂。例如,在汇编代码中,特定大小的寄存器数量有限。在IR中,您可以使用任意数量的寄存器。没有理由强迫优化算法跟踪硬件寄存器,从而使优化算法更加复杂。

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

通过查看LLVM IR手册,可能不清楚它是SSA形式的。但一旦您查看了LLVM库中用于表示IR的数据结构,您就会发现您无法在LLVM IR中编写非SSA代码。