【发布时间】:2014-09-26 19:58:27
【问题描述】:
在优化编译器中,冗余代码可以通过不同的算法多次检测和消除,例如值编号、稀疏条件常量传播等。在这种情况下,我对检测冗余分支很感兴趣。假设目标代码是
block1:
cmp r1, r2
jne block3
block2:
cmp r1, r2
je block4
block3:
...
block4:
...
...
在这种情况下,如果控制达到block2,则意味着r1 和r2 相等,因此je block4 可以替换为jmp block4。此外,如果在 block2 中改为 jne block4,那么我们可以完全删除 je。
那么我的问题是,什么样的优化通道能捕捉到这种代码?我想可以扩展值编号来解决这个问题,但从未在参考书目中看到它,所以也许有更好的方法。
编辑:更正了第一次跳转,它说je block3应该说jne block3
【问题讨论】:
标签: compiler-construction compiler-optimization