- 深入理解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相關知識。
推薦閱讀
- Unity 2020 By Example
- Google Apps Script for Beginners
- 匯編語言程序設計(第2版)
- Python數據分析從0到1
- Python深度學習原理、算法與案例
- Azure Serverless Computing Cookbook
- JBoss:Developer's Guide
- Distributed Computing in Java 9
- Python Machine Learning Blueprints:Intuitive data projects you can relate to
- 遠方:兩位持續創業者的點滴思考
- 奔跑吧 Linux內核
- Android編程權威指南(第4版)
- After Effects CC技術大全
- 深入理解Kafka:核心設計與實踐原理
- Google Maps JavaScript API Cookbook