gcc各種優化所在位置及循環展開分析

 

 

 

GENERIC 是一種樹(tree)的高級表示形式,目的是提供一個語言無關的中間表示。

 

當前 GCC 的主要優化都是基於 GIMPLE 表示形式實現的,包括過程間優化、傳統標量優化、循環優化、向量化等。

 

GCC 的 all_passes 遍表中的 expand 過程將 GCC 的 GIMPLE 表示形式轉化爲另外一種表示形式 RTL。

RTL 相當於一種面向帶有無限數量寄存器的抽象機器的彙編語言,能夠表示很多低級特徵,例如寄存器、存儲尋址模式、字大小類型、比較-分支指令、調用約定、位域操作、類型轉換等。在 RTL 表示形式上實現的優化包括寄存器分配、指令調度、軟流水、循環優化等。

 

GCC 對編譯遍進行了分類,按處理級別可分爲 IPA 遍、GIMPLE 遍和 RTL 遍。IPA 遍主要包括過程間優化,可以使用程序全局信息;GIMPLE 遍與 RTL 遍屬於過程內優化,只能使用函數內的局部信息,GIMPLE 遍處理的對象處於 GIMPLE中間表示形式,而 RTL 遍處理的對象處於 RTL 中間表示形式。

 

 

循環展開

 

一種優化也可能在多個編譯遍中實現。循環展開優化技術在三 個 編 譯 遍 中 實 現 : pass_complete_unrolli 、 pass_complete_unroll 和pass_rtl_unroll_and_peel_loops,前兩個優化遍是 GIMPLE 遍,處理 GIMPLE 中間表示代碼,最後一個優化遍是 RTL 遍,處理 RTL 中間表示代。兩個 GIMPLE循環展開遍的功能相同,都是對循環進行完全展開,即展開次數等於循環迭代次數;

RTL 循環展開遍則是包含了循環展開優化和循環剝皮優化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章