-
>
決戰(zhàn)行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優(yōu)實踐之路
-
>
第一行代碼Android
-
>
深度學習
-
>
Unreal Engine 4藍圖完全學習教程
-
>
深入理解計算機系統(tǒng)-原書第3版
-
>
Word/Excel PPT 2013辦公應用從入門到精通-(附贈1DVD.含語音視頻教學+辦公模板+PDF電子書)
深入理解LLVM 代碼生成 版權信息
- ISBN:9787111764151
- 條形碼:9787111764151 ; 978-7-111-76415-1
- 裝幀:平裝-膠訂
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
深入理解LLVM 代碼生成 本書特色
1)主流新版LLVM詳解:本書以LLVM 15版本為核心,深入剖析其內部機制,幫助讀者掌握前沿的編譯器技術。2)提供配套代碼倉庫:提供專門的代碼倉庫鏡像,確保讀者能夠輕松獲取并編譯書中使用的LLVM版本,實現理論與實踐相結合。3)LLVM IR從入門到精通:詳盡介紹LLVM IR的基礎知識及其設計原理,引導初學者快速上手,進階至專業(yè)水平。4)提供BPF后端實戰(zhàn)案例:選用BPF作為示例后端,通過精簡的代碼示例講解代碼生成的關鍵步驟,易于理解和跟蹤。5)豐富的示例與資源:配套大量示例代碼,涵蓋C/C 、LLVM IR等多種語言和中間表示形式,并遵循統(tǒng)一命名規(guī)則,方便驗證學習成果。
深入理解LLVM 代碼生成 內容簡介
全書分為3篇。第1篇介紹編譯器基礎知識,包括中間表示,重點介紹SSA、數據流分析、支配、循環(huán)等知識,此外還介紹了LLVM的后端描述語言TableGen。第二篇剖析分LLVM代碼生成,其中對代碼生成的每一步驟都有提及,著重介紹指令選擇、指令調度、寄存器分配和編譯優(yōu)化。同時還以BPF后端為例總結了如何基于LLVM開發(fā)一款新后端的編譯器。第三篇附錄主要總結了LLVM代碼生成過程中使用的IR、BPF指令集以及如何在Linux運行BPF應用,Pass和PassManager的運行機制等知識。
通過閱讀本書,讀者理解和掌握LLVM代碼生成過程,可以根據本書指導為基于LLVM開發(fā)一款新后端的編譯器。同時本書還介紹了各種編譯過程中使用到的算法,讀者可以根據場景對算法進行增強從而達到性能優(yōu)化目的。
深入理解LLVM 代碼生成 目錄
前言
**部分 基礎知識
第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 基本塊參數和Phi節(jié)點29
2.4 本章小結30
第3章 數據流分析基礎知識31
3.1 半格、格與不動點31
3.1.1 半格和偏序集31
3.1.2 格33
3.1.3 不動點34
3.2 數據流分析原理及描述35
3.2.1 數據流方程形式化描述36
3.2.2 數據流分析的理論描述40
3.3 數據流方程示例43
3.3.1 活躍變量43
3.3.2 到達定值45
3.3.3 常量傳播46
3.4 擴展閱讀:數據流的遍歷性能
分析49
3.5 本章小結50
第4章 支配分析51
4.1 支配和逆支配51
4.1.1 支配和逆支配相關定義51
4.1.2 支配和逆支配含義解析53
4.2 支配樹和支配邊界的實現55
4.2.1 半支配節(jié)點及相關概念56
4.2.2 LT算法和Semi-NCA的
差異57
4.2.3 支配邊界的實現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)實現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 全局指令選擇算法原理與實現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調度器實現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調度器實現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調度器實現186
8.8.2 示例分析186
8.9 Post-RA-MISched調度器189
8.10 循環(huán)調度190
8.10.1 循環(huá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<
深入理解LLVM 代碼生成 作者簡介
彭成寒:AI編譯器與虛擬機技術專家,目前主要專注于LLVM、MLIR相關的AI編譯器研究,并在JVM、V8和WebAssembly等虛擬機技術方面有著豐富的研發(fā)經驗。他深耕IT領域近20年,曾涉足應用軟件和大數據開發(fā)等多個領域,并著有《JVM G1源碼分析和調優(yōu)》《新一代垃圾回收器ZGC設計與實現》《深入探索JVM垃圾回收:ARM服務器垃圾回收的挑戰(zhàn)和優(yōu)化》等重要領域專著。
- >
上帝之肋:男人的真實旅程
- >
月亮虎
- >
羅庸西南聯大授課錄
- >
有舍有得是人生
- >
伊索寓言-世界文學名著典藏-全譯本
- >
詩經-先民的歌唱
- >
巴金-再思錄
- >
二體千字文