級別說(shuō)明0常數合并:編譯器預先計算結果,盡可能用常數代替表達式。包括運行地址計算。
優(yōu)化簡(jiǎn)單訪(fǎng)問(wèn):編譯器優(yōu)化訪(fǎng)問(wèn)8051系統的內部數據和位地址。
跳轉優(yōu)化:編譯器總是擴展跳轉到最終目標,多級跳轉指令被刪除。
本文引用地址:http://dyxdggzs.com/article/201611/321745.htm
1死代碼刪除:沒(méi)用的代碼段被刪除。
拒絕跳轉:嚴密的檢查條件跳轉,以確定是否可以倒置測試邏輯來(lái)改進(jìn)或刪除。
2數據覆蓋:適合靜態(tài)覆蓋的數據和位段被確定,并內部標識。BL51連接/定位器可以通
過(guò)全局數據流分,選擇可被覆蓋的段。
3窺孔優(yōu)化:清除多余的MOV指令。這包括不必要的從存儲區加載和常數加載操作。當存
儲空間或執行時(shí)間可節省時(shí),用簡(jiǎn)單操作代替復雜操作。
4寄存器變量:如有可能,自動(dòng)變量和函數參數分配到寄存器上。為這些變量保留的存儲區就省略了。
優(yōu)化擴展訪(fǎng)問(wèn):IDATA、XDATA、PDATA和CODE的變量直接包含在操作中。在多數時(shí)間沒(méi)
必要使用中間寄存器。
局部公共子表達式刪除:如果用一個(gè)表達式重復進(jìn)行相同的計算,則保存第一次計算
結果,后面有可能就用這結果。多余的計算就被刪除。
Case/Switch優(yōu)化:包含SWITCH和CASE的代碼優(yōu)化為跳轉表或跳轉隊列。
5全局公共子表達式刪除:一個(gè)函數內相同的子表達式有可能就只計算一次。中間結果
保存在寄存器中,在一個(gè)新的計算中使用。
簡(jiǎn)單循環(huán)優(yōu)化:用一個(gè)常數填充存儲區的循環(huán)程序被修改和優(yōu)化。
6循環(huán)優(yōu)化:如果結果程序代碼更快和有效則程序對循環(huán)進(jìn)行優(yōu)化。
7擴展索引訪(fǎng)問(wèn)優(yōu)化:適當時(shí)對寄存器變量用DPTR。對指針和數組訪(fǎng)問(wèn)進(jìn)行執行速度和代碼大小優(yōu)化。
8公共尾部合并:當一個(gè)函數有多個(gè)調用,一些設置代碼可以復用,因此減少程序大小。
9公共塊子程序:檢測循環(huán)指令序列,并轉換成子程序。Cx51甚至重排代碼以得到更大的循環(huán)序列。
評論