官术网_书友最值得收藏!

第2章 IR基礎知識

目前流行的編譯器通常采用三段式設計,分為前端、中端和后端,編譯器的典型架構如圖2-1所示。

圖2-1 編譯器架構示意圖

前端:對程序進行解析,確保程序符合語言規定的詞法、語法、語義規則。前端完成后通常將程序變換成另一種表示,這種新的表示一般更便于進行編譯優化或者目標代碼生成。

中端:目的是對程序進行優化。為了便于進行優化,通常使用IR來描述程序,不同的語言可以翻譯成統一的IR,這樣針對IR進行的優化可以做到語言無關。中端常見的優化有常量傳播(Constant Propagation,CP)、死代碼消除(Dead Code Elimination,DCE)、循環不變代碼外提(Loop Invariant Code Motion,LICM)、循環展開(Loop Unrolling,LU)等。

后端:目的是將程序翻譯成目標機器可以識別的機器碼。后端的工作通常包括指令選擇、指令調度、寄存器分配和機器碼生成。

注意

通常我們提到的優化都是指語言無關、架構無關的編譯優化,但現實中也存在一些語言相關、架構相關的優化技術,這些優化技術都是對特定問題的分析和解決,不在本書的討論范圍內。

IR是編譯優化的基礎,本章將主要討論IR相關知識。

主站蜘蛛池模板: 马公市| 英山县| 扬州市| 铁岭县| 启东市| 舞钢市| 桦南县| 五原县| 大兴区| 墨玉县| 金沙县| 周口市| 新巴尔虎右旗| 天长市| 吉林市| 阿克苏市| 三台县| 怀远县| 星座| 浦北县| 定州市| 三门峡市| 六盘水市| 阿荣旗| 芜湖县| 沅江市| 鲜城| 察隅县| 翼城县| 砀山县| 鹿邑县| 周口市| 修水县| 原阳县| 广宁县| 家居| 澳门| 罗山县| 宣威市| 克拉玛依市| 漯河市|