C/C++語(yǔ)言的編譯器操作概述
1.集成的預(yù)處理器(Integrated Preprocessor)
C/C++的預(yù)處理器集成在分析器工具中,可以提高代碼的編譯速度。用戶可以只進(jìn)行預(yù)處理也可以將預(yù)處理列表 保存在文件中。TMS320X28xx的C/C++編譯器包含杯準(zhǔn)的預(yù)處理功能,這些功能主要完成下列預(yù)處理任務(wù):
●宏定義和擴(kuò)展;
● #include 文件處理
●條件編譯處理;
●其他碩處理標(biāo)識(shí)(在原代碼文件中以#字符開(kāi)始的特定的代碼段)。
2.代碼優(yōu)化
編譯器采用先進(jìn)的優(yōu)化技術(shù)對(duì)C/C++源代碼進(jìn)行優(yōu)化,如圖1所示,從而減小代碼的尺寸,提高代碼的效率和運(yùn)行 速度。C28x優(yōu)化器充分利用C28x的結(jié)構(gòu)特點(diǎn)對(duì)其代碼進(jìn)行優(yōu)化,生成更高效率的代碼。優(yōu)化器是位于分析器和代碼 產(chǎn)生器中間的優(yōu)化工具,最簡(jiǎn)單的方法就是使用clZOOO—v2S shell程序,并通過(guò)-o選項(xiàng)確定優(yōu)化級(jí)別。
圖1 帶有優(yōu)化的編譯操作
優(yōu)化器總計(jì)有4個(gè)優(yōu)化級(jí)別,分別對(duì)應(yīng)不同的優(yōu)化程序。
(1) -o0
●簡(jiǎn)化控制流圖(Control flow graph);
●將變量分配到寄存器;
●完成循環(huán)旋轉(zhuǎn)(Loop Rotation);
●刪除未使用的代碼;
●簡(jiǎn)化表達(dá)式和語(yǔ)句;
●內(nèi)聯(lián)聲明未inline的函數(shù)。
(2) -o1
●完成所有00的優(yōu)化操作;
●運(yùn)行局部復(fù)制/常數(shù)傳遞;
●刪除未使用的賦值語(yǔ)句;
●刪除局部公共表達(dá)式(Local Common Expression)。
(3) -o2
●完成所有-ol的優(yōu)化操作;
●完成循環(huán)優(yōu)化;
●刪除全局公共子表達(dá)式(Global Common Expression);
●刪除全局未使用的賦值語(yǔ)句;
●如果使用o優(yōu)化但不標(biāo)注優(yōu)化的級(jí)別,則系統(tǒng)默認(rèn)為-O2優(yōu)化。
(4)-o3
●完成所有-o2的優(yōu)化操作;
●刪除未使用的函數(shù);
●當(dāng)函數(shù)的返回值沒(méi)有用到時(shí),簡(jiǎn)化函數(shù)的返回形式;
●內(nèi)聯(lián)小的函數(shù);
●記錄函數(shù)聲明以便當(dāng)優(yōu)化調(diào)用時(shí)知道調(diào)用函數(shù)的屬性;
●當(dāng)所有調(diào)用都傳遞一個(gè)相同的參數(shù)時(shí),把這個(gè)參數(shù)直接放在函數(shù)體中,不通過(guò)寄存器/存儲(chǔ)器的方式傳遞這個(gè)參數(shù);
●識(shí)別文件級(jí)變量特性。
上述各級(jí)別的優(yōu)化都是通過(guò)優(yōu)化器來(lái)實(shí)現(xiàn)的,此外代碼生成器也要運(yùn)行其他優(yōu)化,尤其是和處理器相關(guān)的優(yōu)化。而代碼生成器的優(yōu)化操作總會(huì)被運(yùn)行,與是否運(yùn)行優(yōu)化器沒(méi)有關(guān)系。
歡迎轉(zhuǎn)載,信息來(lái)源維庫(kù)電子市場(chǎng)網(wǎng)(www.dzsc.com)
來(lái)源:ks990次