5

我一直在阅读本地优化编译器技术,但一直不知道它们是如何实现的。这个想法是优化器每次都会查看代码的“窗口”,并以某种方式检测模式并用更优化的版本替换它们。

我的问题是,如何发现这些模式?(假设您的平台是一个为组装计算机输出汇编代码的 VM,例如 Schocken's Hack)。

人们是否真的手动检查代码(使用控制流图或 DAG 或其他),然后收集所有识别的模式并将它们编码到优化器中?或者有没有自动的方法。

例如,您在分析器中输入要优化的代码,它会喷出所说的模式。如果是这样,一个人如何开始写一个?

4

2 回答 2

3

经典的窥视孔优化与强度降低和您提到的其他事情无关。它们是 2-3 个指令序列,例如

BRANCH FALSE $1
BRANCH $2
$1:

可以简化为

BRANCH TRUE $2

像这样的序列可能出现在简单的代码生成器中,例如带有不生成 AST 的单通道编译器,例如我研究过的一些 COBOL 编译器。

于 2012-08-05T21:44:35.723 回答
1

这取决于您是编写自己的分析器还是使用现有的分析器。在任何一种情况下,您的分析器都会不断检查代码,直到它不再优化为止。如果您以GCC为例,它具有特定的优化通道。您的程序的中间代码将提供给这些通道,这些通道一个接一个地执行并优化您的代码。此外,任何传球都可以执行多次。
如果你真的想了解如何编写这些优化,只需通过GCC中的pass.h文件。

于 2012-08-06T01:22:26.350 回答