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

  • 深入理解LLVM:代碼生成
  • 彭成寒 李靈 戴賢澤 王志磊 俞佳嘉
  • 431字
  • 2024-12-18 16:44:28

第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相關知識。

主站蜘蛛池模板: 曲水县| 得荣县| 星座| 肥城市| 图片| 图片| 安多县| 盐津县| 东方市| 吉首市| 南宁市| 兴化市| 烟台市| 敦化市| 安新县| 论坛| 白水县| 阿勒泰市| 浑源县| 林西县| 西乌珠穆沁旗| 福州市| 阳泉市| 宣汉县| 图们市| 大新县| 资阳市| 静安区| 琼中| 涟源市| 固原市| 灵川县| 云林县| 宁波市| 马龙县| 特克斯县| 十堰市| 青海省| 丽水市| 鱼台县| 高雄县|