简介
窥孔优化(peephole optimizer),它的操作是这样的,使用一个滑动窗口,对窗口内的指令序列进行分析,如果窗口内的指令序列可以被替换成一个更好的等价序列,那么就会对指令进行替换。
窥孔优化的一些常见示例包括:
- 消除冗余的加载和保存指令。
LD R0, a
ST a, R0
替换为
LD R0, a
- 消除不可到达代码。
if debug == 1 goto L1
goto L2
L1:print debugging information
L2:
如果debug被设置为0
替换为
L2:
- 控制流优化。
goto L1
...
L1: goto L2
替换为
goto L2
...
L1: goto L2
- 代数化简和强度消减。
add r1, r0, 0
替换为
mov r1, r0
- 使用机器特有的指令。
目标机可能会有一些能够高效实现某些特定运算的硬件指令。检测允许使用这些指令的情况可以显著的减低运行时间。
原理
多个add转MAD
id: 0 add r0, r1, r2
id: 1 add r3, r1, r0
id: 2 add r4, r1, r3
id: 3 mov r5, r4
转
id2: mad r4, r1, 3, r2
在一个基本块中遍历指令,
id: