注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網(wǎng)絡操作系統(tǒng)深入理解LLVM:代碼生成

深入理解LLVM:代碼生成

深入理解LLVM:代碼生成

定 價:¥109.00

作 者: 彭成寒 李靈 戴賢澤 王志磊 俞佳嘉
出版社: 機械工業(yè)出版社
叢編項:
標 簽: 暫缺

購買這本書可以去


ISBN: 9787111764151 出版時間: 2024-10-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字數(shù):  

內容簡介

  全書分為3篇。第1篇介紹編譯器基礎知識,包括中間表示,重點介紹SSA、數(shù)據(jù)流分析、支配、循環(huán)等知識,此外還介紹了LLVM的后端描述語言TableGen。第二篇剖析分LLVM代碼生成,其中對代碼生成的每一步驟都有提及,著重介紹指令選擇、指令調度、寄存器分配和編譯優(yōu)化。同時還以BPF后端為例總結了如何基于LLVM開發(fā)一款新后端的編譯器。第三篇附錄主要總結了LLVM代碼生成過程中使用的IR、BPF指令集以及如何在Linux運行BPF應用,Pass和PassManager的運行機制等知識。通過閱讀本書,讀者理解和掌握LLVM代碼生成過程,可以根據(jù)本書指導為基于LLVM開發(fā)一款新后端的編譯器。同時本書還介紹了各種編譯過程中使用到的算法,讀者可以根據(jù)場景對算法進行增強從而達到性能優(yōu)化目的。

作者簡介

  彭成寒:AI編譯器與虛擬機技術專家,目前主要專注于LLVM、MLIR相關的AI編譯器研究,并在JVM、V8和WebAssembly等虛擬機技術方面有著豐富的研發(fā)經(jīng)驗。他深耕IT領域近20年,曾涉足應用軟件和大數(shù)據(jù)開發(fā)等多個領域,并著有《JVM G1源碼分析和調優(yōu)》《新一代垃圾回收器ZGC設計與實現(xiàn)》《深入探索JVM垃圾回收:ARM服務器垃圾回收的挑戰(zhàn)和優(yōu)化》等重要領域專著。李靈:畢業(yè)于上海交通大學,擁有6年編譯器和虛擬機相關的研發(fā)工作經(jīng)驗,深度參與了多項LLVM編譯器及V8、WebAssembly虛擬機等開源項目的研發(fā)工作,目前正在從事AI編譯器研發(fā)工作。戴賢澤:畢業(yè)于南京理工大學,擁有7年編譯器和虛擬機相關工作經(jīng)驗,深入?yún)⑴c了方舟編譯器及V8、WebAssembly虛擬機等開源項目的研發(fā)工作,目前正在從事編譯器和虛擬機的設計與研發(fā)工作。王志磊:畢業(yè)于浙江大學,擁有6年編譯器和虛擬機相關的研發(fā)工作經(jīng)驗,參與了多項編譯器及虛擬機的開發(fā)項目,并為llvm-bolt、V8、WebAssembly等開源項目貢獻代碼,目前專注于虛擬機相關的研發(fā),精通AOT和JIT技術。俞佳嘉:南京大學碩士研究生,現(xiàn)任華為編譯器與編程語言實驗室鴻蒙開發(fā)者生態(tài)構建技術首席專家。他擁有10余年的豐富工作經(jīng)驗,在Intel、Microsoft、華為等世界知名公司從事過編譯器、虛擬機、指令翻譯等技術的相關研發(fā)工作,并深入?yún)⑴c了Intel Houdini、華為方舟編譯器等產(chǎn)品的核心研發(fā)工作。

圖書目錄

目  錄  Contents
前言
第一部分 基礎知識
第1章 緒論2
1.1 LLVM設計思路分析3
1.2 LLVM主要子項目4
1.3 LLVM構建與調試5
1.4 LLVM在線工具7
1.5 本章小結9
第2章 IR基礎知識10
2.1 IR分類11
2.1.1 樹IR11
2.1.2 線性IR11
2.1.3 圖IR12
2.2 CFG的基本塊與構建14
2.2.1 基本塊14
2.2.2 構建CFG15
2.3 靜態(tài)單賦值15
2.3.1 基本概念16
2.3.2 SSA構造19
2.3.3 SSA析構19
2.3.4 SSA分類28
2.3.5 基本塊參數(shù)和Phi節(jié)點29
2.4 本章小結30
第3章 數(shù)據(jù)流分析基礎知識31
3.1 半格、格與不動點31
3.1.1 半格和偏序集31
3.1.2 格33
3.1.3 不動點34
3.2 數(shù)據(jù)流分析原理及描述35
3.2.1 數(shù)據(jù)流方程形式化描述36
3.2.2 數(shù)據(jù)流分析的理論描述40
3.3 數(shù)據(jù)流方程示例43
3.3.1 活躍變量43
3.3.2 到達定值45
3.3.3 常量傳播46
3.4 擴展閱讀:數(shù)據(jù)流的遍歷性能分析49
3.5 本章小結50
第4章 支配分析51
4.1 支配和逆支配51
4.1.1 支配和逆支配相關定義51
4.1.2 支配和逆支配含義解析53
4.2 支配樹和支配邊界的實現(xiàn)55
4.2.1 半支配節(jié)點及相關概念56
4.2.2 LT算法和Semi-NCA的差異57
4.2.3 支配邊界的實現(xiàn)58
4.3 擴展閱讀:支配樹相關小課堂58
4.3.1 支配樹構造算法及比較59
4.3.2 如何快速判斷任意兩個節(jié)點的支配關系60
4.4 本章小結62
第5章 循環(huán)基本知識63
5.1 自然循環(huán)64
5.2 LLVM的循環(huán)實現(xiàn)65
5.2.1 循環(huán)識別66
5.2.2 循環(huán)規(guī)范化67
5.3 本章小結71
第6章 TableGen介紹72
6.1 目標描述語言72
6.1.1 詞法72
6.1.2 語法74
6.2 TableGen工具鏈77
6.2.1 從TD定義到記錄78
6.2.2 從記錄到C 代碼81
6.3 擴展閱讀:如何在TD文件中定義匹配83
6.3.1 隱式定義匹配模板83
6.3.2 復雜匹配模板84
6.3.3 匹配規(guī)則支撐類86
6.4 本章小結86
第二部分 代碼生成
第7章 指令選擇91
7.1 指令選擇的處理流程92
7.2 SelectionDAGISel算法分析94
7.2.1 SDNode分類96
7.2.2 LLVM IR到SDNode的轉換98
7.2.3 SDNode合法化108
7.2.4 機器指令選擇117
7.2.5 從DAG輸出MIR123
7.3 快速指令選擇算法分析126
7.4 全局指令選擇算法原理與實現(xiàn)128
7.4.1 全局指令選擇的階段128
7.4.2 GMIR生成129
7.4.3 指令合法化133
7.4.4 寄存器類型選擇137
7.4.5 機器指令選擇141
7.4.6 合并優(yōu)化143
7.5 本章小結146
第8章 指令調度147
8.1 LLVM指令調度149
8.1.1 指令調度算法150
8.1.2 拓撲排序算法151
8.2 Linearize調度器152
8.2.1 構造依賴圖153
8.2.2 對依賴圖進行調度153
8.3 Fast調度器156
8.3.1 Fast調度器實現(xiàn)157
8.3.2 物理寄存器依賴場景的處理158
8.3.3 示例分析162
8.4 BURR List調度器166
8.4.1 影響指令調度的關鍵因素166
8.4.2 指令優(yōu)先級計算方法168
8.4.3 示例分析170
8.5 Source List調度器173
8.6 Hybrid List調度器174
8.7 Pre-RA-MISched調度器174
8.7.1 Pre-RA-MISched調度器實現(xiàn)174
8.7.2 調度區(qū)域的劃分175
8.7.3 影響Pre-RA-MISched調度器的關鍵因素175
8.7.4 MIR指令時延的計算175
8.7.5 寄存器壓力的計算177
8.7.6 示例分析181
8.8 Post-RA-TDList調度器186
8.8.1 Post-RA-TDList調度器實現(xiàn)186
8.8.2 示例分析186
8.9 Post-RA-MISched調度器189
8.10 循環(huán)調度190
8.10.1 循環(huán)調度算法實現(xiàn)190
8.10.2 示例分析194
8.11 擴展閱讀:調度算法的影響因素200
8.12 本章小結203
第9章 基于SSA形式的編譯優(yōu)化204
9.1 前期尾代碼重復205
9.1.1 尾代碼重復原理205
9.1.2 尾代碼收益判斷207
9.1.3 執(zhí)行尾代碼重復優(yōu)化209
9.2 Phi優(yōu)化212
9.3 棧著色213
9.4 棧槽分配217
9.5 死指令消除218
9.6 IPL優(yōu)化之If-Conversion219
9.7 循環(huán)不變量外提224
9.8 公共子表達式消除224
9.9 代碼下沉227
9.10 窺孔優(yōu)化228
9.11 本章小結231
第10章 寄存器分配232
10.1 寄存器分配流程解析233
10.1.1 Fast算法執(zhí)行流程233
10.1.2 Basic算法執(zhí)行流程233
10.2 寄存器分配涉及的Pass241
10.2.1 死亡和未定義子寄存器檢測241
10.2.2 隱式定義指令處理243
10.2.3 不可達MBB消除243
10.2.4 活躍變量分析244
10.2.5 Phi消除246
10.2.6 二地址指令變換249
10.2.7 指令編號255
10.2.8 變量活躍區(qū)間分析256
10.2.9 寄存器合并256
10.2.10 MBB的頻率分析259
10.2.11 寄存器分配:直接分配與間接分配265
10.2.12 將虛擬寄存器映射到物理寄存器266
10.2.13 棧槽著色266
10.2.14 復制傳播267
10.2.15 循環(huán)不變量外提269
10.3 Fast算法實現(xiàn)269
10.3.1 Fast算法實現(xiàn)思路269
10.3.2 示例分析270
10.4 Basic算法實現(xiàn)276
10.4.1 算法實現(xiàn)思路276
10.4.2 示例分析277
10.5 Greedy算法實現(xiàn)289
10.5.1 Greedy算法實現(xiàn)思路290
10.5.2 算法實現(xiàn)的核心:拆分291
10.5.3 區(qū)域拆分之Hopfield網(wǎng)絡詳解293
10.5.4 使用Hopfield網(wǎng)絡求解拆分296
10.5.5 示例分析300
10.6 PBQP算法實現(xiàn)313
10.6.1 PBQP介紹313
10.6.2 寄存器分配和PBQP的關系314
10.6.3 PBQP問題求解314
10.6.4 寄存器分配問題建模示例317
10.6.5 PBQP實現(xiàn)原理以及示例分析318
10.7 擴展閱讀:圖著色分配324
10.8 4種算法對比326
10.9 本章小結329
第11章 函數(shù)棧幀生成和非SSA形式的編譯優(yōu)化330
11.1 函數(shù)棧幀生成以及相關優(yōu)化331
11.1.1 棧幀生成331
11.1.2 代碼下沉332
11.1.3 棧幀范圍收縮335
11.2 MIR優(yōu)化337
11.2.1 分支折疊337
11.2.2 尾代碼重復347
11.2.3 復制傳播347
11.3 MIR指令變換和調度347
11.4 MIR信息收集及布局優(yōu)化348
11.4.1 基本塊布局優(yōu)化349
11.4.2 公共代碼提取355
11.4.3 函數(shù)冷熱代碼分離359
11.4.4 代碼布局優(yōu)化比較363
11.5 擴展閱讀:后綴樹構造和應用365
11.5.1 后綴樹的構造365
11.5.2 后綴樹的應用372
11.6 本章小結372
第12章 生成機器碼373
12.1 MC374
12.2 機器碼生成過程375
12.2.1 匯編代碼生成376
12.2.2 二進制代碼生成378
12.3 本章小結381
第13章 添加一個新后端382
13.1 適配新后端的各個階段382
13.1.1 指令選擇階段的適配383
13.1.2 寄存器分配相關的適配383
13.1.3 插入前言/后序384
13.1.4 機器碼生成相關的適配384
13.2 添加新后端所需要的適配385
13.2.1 定義TD文件386
13.2.2 指令選擇處理386
13.2.3 棧幀處理387
13.2.4 機器碼生成處理388
13.2.5 添加新后端到LLVM框架中388
13.3 本章小結389
附錄
附錄A LLVM的中間表示392
附錄B BPF介紹407
附錄C Pass的分類與管理413

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.stefanvlieger.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號