在優化編譯器中,冗餘代碼可以被不同的算法多次檢測和消除,如值編號,稀疏條件常量傳播等。在這種情況下,我有興趣檢測多餘的分支。假設目標代碼是將條件分支轉換爲跳轉的優化過程
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