在 GCC 中,什么是“树优化”与“RTL 优化”?

ein*_*ica 6 gcc compiler-optimization

当我针对 GCC 提交关于遗漏优化的错误时,我总是不知道是否应该在“rtl-optimizations”或“tree-optimizations”下提交它。我查看了 GCC bugzilla 上的组件页面,那里并没有真正解释。

那么,这两种优化是什么,或者说它们之间有什么区别?

ein*_*ica 6

部分答案:

区别与 GCC 编译器内(半编译)程序的不同内部表示有关。这实际上是一个相当复杂的问题,但就这个问题而言:

  • 有一个基于抽象语法树的表示,称为 GIMPLE。对此表示进行了一些优化传递;看到这个列表。这些被称为树优化树-SSA 优化
  • 较晚的“低级”表示采用寄存器传输语言(或 RTL)。在此表示上进行其他优化传递,在树优化之后的过程中进行;这是这些列表。这些是调用RTL 优化

话虽如此,我还没有给出一个简单的经验法则来区分哪些优化属于哪里。


有关更多信息,您可能需要阅读GCC 内部指南,我在其中找到了优化通道列表。