« 上一篇下一篇 »

消除不可达代码

一个窥孔优化的机会是消除不可达的指令。一个紧跟在无条件跳转之后的不带标号的指令可以被删除通过重复这个运算,就可以删除一个指令序列。比如,为了调试的目的,一个大型程序中可能含有一些只有当变量debug等于1时才运行的代码片断。在中间表示形式中,这个代码看起来可能就像

if debug == 1 goto L1
goto L2

L1: print debugging information
L2:

一个显而易见的窥孔优化方法是消除级联跳转指令。因此,不管debug的值是什么,上面的代码序列可以被替换为:

if debug != 1 goto L2
print debugging information

L2:

如果debug在程序开始的时候被设置为0,常量传播优化将把这个序列转换为

if 0 != 1 goto L2
print debugging information

L2:

现在,第一个语句的条件值总是true,因此这个语句可以被替换为goto L2。替换之后, 打印调试信息的所有语句都变成了不可达语句,因此可以被逐一消除。

« 上一篇下一篇 »