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