1. 輸入:前者是二進(jìn)制可執(zhí)行程序,后者是高級語言源程序
2. 優(yōu)化對象:前者主要是直線型代碼區(qū)域比如蹤跡或超塊(熱點路徑代碼),超塊類似后者中的擴(kuò)展塊;后者是控制流圖,即所有代碼塊,不限于熱點路徑代碼。超塊構(gòu)造類似后者中的基本塊放置和過程放置
3. 優(yōu)化方法:前者要運(yùn)行時采集剖析數(shù)據(jù)比如結(jié)點剖析和邊剖析,再基于剖析數(shù)據(jù)形成有利于指令cache局部性的超塊,然后在超塊上作常量傳播、常量折疊、強(qiáng)度削弱、復(fù)寫傳播、死代碼消除、公共表達(dá)式消除等基本優(yōu)化,也會作指令重排,但考慮到陷阱處理要恢復(fù)精確的客戶進(jìn)程狀態(tài),因此比較受限,沒有后者中的指令重排自由。后者如果基于剖析作優(yōu)化,那么效果和前者差不多
4. 寄存器分配:都是基于活躍范圍的沖突圖著色算法,但前者考慮到陷阱處理會延長相關(guān)寄存器的活躍范圍,而后者不用
————————————————————————
總結(jié):二進(jìn)制優(yōu)化所用的技術(shù)和編譯優(yōu)化其實相同,不同的是為陷阱處理所作的改變調(diào)整,以及運(yùn)用在熱點代碼塊而非所有塊
posted on 2023-09-06 23:44
春秋十二月 閱讀(90)
評論(0) 編輯 收藏 引用 所屬分類:
Compiler