1. 不可達代碼是指無論輸入什么都不會執(zhí)行的代碼,對過程而言,即是從入口基本塊到不了(沒有路徑可達)的那些基本塊;死代碼是指可達但計算了后面任何可執(zhí)行路徑都不會使用其計算結(jié)果的代碼,比如死變量和死指令
2. 不可達代碼的識別本質(zhì)是有向圖的可達性判定與傳遞閉包計算問題,一般用DFS法處理。先找到從入口基本塊不可達的基本塊,再刪除(同時改變其前驅(qū)和后繼基本塊的指向),直到找不到為止。死代碼的識別可用活躍分析或必要指令標記法,對于活躍分析,刪除基本塊出口不活躍的變量定值,以及它所使用不活躍操作數(shù)的定值;對于標記法,從必要指令出發(fā),根據(jù)def-use鏈和use-def鏈,不斷標記對其操作數(shù)有貢獻的指令,最后刪除沒被標記的那些指令
3. 不可達代碼和死代碼可能來源于程序員,更可能源于編譯器的其它一些優(yōu)化產(chǎn)生,刪除優(yōu)化它們能顯著減小代碼體積,對執(zhí)行速度有間接的影響,因為可能改善指令高速緩層的利用率
posted on 2023-09-06 23:33
春秋十二月 閱讀(131)
評論(0) 編輯 收藏 引用 所屬分類:
Compiler