窥孔优化模式

时间:2012-08-05 16:24:40

标签: design-patterns compiler-construction vm-implementation control-flow-graph peephole-optimization

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

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

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

例如,您在分析器中提供要优化的代码,并且它会喷出所述模式。如果是这样,怎么能开始写一个?

2 个答案:

答案 0 :(得分:3)

经典的窥视孔优化不是关于强度降低和其他你所说的。它们是2-3个指令序列,例如

BRANCH FALSE $1
BRANCH $2
$1:

可以缩减为

BRANCH TRUE $2

像这样的序列可能出现在天真的代码生成器中,例如带有不生成AST的单通道编译器,例如我曾经使用过的一些COBOL编译器。

答案 1 :(得分:1)

取决于您是编写自己的分析仪还是使用现有分析仪。在任何一种情况下,您的分析仪都会检查代码,直到它不再进行优化。如果您举一个 GCC 的示例,它会有特定的优化传递。程序的中间代码被赋予这些传递,这些传递一个接一个地执行并优化您的代码。任何传球都可以多次执行 如果您真的想要了解如何编写这些优化,只需浏览 GCC 中的 passes.h 文件。