窥孔优化模式

gfo*_*tis 5 compiler-construction design-patterns control-flow-graph vm-implementation peephole-optimization

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

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

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

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

use*_*421 3

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

BRANCH FALSE $1
BRANCH $2
$1:
Run Code Online (Sandbox Code Playgroud)

可以简化为

BRANCH TRUE $2
Run Code Online (Sandbox Code Playgroud)

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