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