LLVM Cookbook中文版

LLVM Cookbook中文版

《LLVM Cookbook中文版》是2016年電子工業出版社出版的圖書,作者是[印] Mayur,Pandey(馬尤爾・潘迪),[印] Suyog,Sarda(蘇尤葛・撒達)。

基本介紹

  • 中文名:LLVM Cookbook中文版
  • 作者:[印] Mayur,Pandey(馬尤爾・潘迪),[印] Suyog,Sarda(蘇尤葛・撒達)
  • 出版社:電子工業出版社
  • 出版時間:2016年6月1日
  • 開本:16 開
  • 裝幀:平裝
  • ISBN:9787121288470
內容簡介,圖書目錄,作者簡介,

內容簡介

《LLVM Cookbook中文版》以任務驅動的方式,帶領讀者編寫基於LLVM 的編譯器前端、最佳化器、後端。通過豐富的實例,讀者能夠從中理解LLVM 的架構,以及如何使用LLVM 來編寫自己的編譯器。
相比於傳統的介紹編譯技術的書籍,此書更偏向於實戰,因此適合熟悉編譯但對LLVM 比較陌生的人員,也適合正在學習編譯技術並且在尋找實戰機會的人員。

圖書目錄

前言 XI
第1 章 LLVM設計與使用 1
概述 1
模組化設計 2
交叉編譯Clang/LLVM 6
將C 源碼轉換為LLVM 彙編碼 8
將LLVM IR 轉換為bitcode 9
將LLVM bitcode 轉換為目標平台彙編碼 12
將LLVM bitcode 轉回為LLVM 彙編碼 14
轉換LLVM IR 15
連結LLVM bitcode 18
執行LLVM bitcode 19
使用C 語言前端——Clang 20
使用GO 語言前端 24
使用DragonEgg 25
第2 章 實現編譯器前端 29
概述 29
定義TOY 語言 30
實現詞法分析器 32
定義抽象語法樹 35
實現語法分析器 38
解析簡單的表達式 39
解析二元表達式 42
為解析編寫驅動 45
對TOY 語言進行詞法分析和語法分析 47
為每個AST 類定義IR 代碼生成方法 48
為表達式生成IR 代碼 49
為函式生成IR 代碼 51
增加IR 最佳化支持 55
第3 章 擴展前端並增加JIT 支持 57
概述 57
處理條件控制結構——if/then/else 結構 58
生成循環結構 64
處理自定義二元運算符 71
處理自定義一元運算符. 77
增加JIT 支持 83
第4 章 準備最佳化 87
概述 87
多級最佳化 88
自定義LLVM Pass 89
使用opt 工具運行自定義Pass 92
在新的Pass 中調用其他Pass 93
使用Pass 管理器註冊Pass 96
實現一個分析Pass 99
實現一個別名分析Pass 102
使用其他分析Pass 105
第5 章 實現最佳化 109
概述 109
編寫無用代碼消除Pass 110
編寫內聯轉換Pass 115
編寫記憶體最佳化Pass 119
合併LLVM IR 121
循環的轉換與最佳化 123
表達式重組 126
IR 向量化 127
其他最佳化Pass 134
第6 章 平台無關代碼生成器 139
概述 139
LLVM IR 指令的生命周期 140
使用GraphViz 可視化LLVM IR 控制流圖 143
使用TableGen 描述目標平台 150
定義指令集 151
添加機器碼描述 152
實現MachineInstrBuilder 類 156
實現MachineBasicBlock 類 157
實現MachineFunction 類 159
編寫指令選擇器 160
合法化SelectionDAG 166
最佳化SelectionDAG 173
基於DAG 的指令選擇 179
基於SelectionDAG 的指令調度 186
第7 章 機器碼最佳化 191
概述 191
消除機器碼公共子表達式 192
活動周期分析 203
暫存器分配 209
插入頭尾代碼 215
代碼發射 219
尾調用最佳化 221
兄弟調用最佳化 225
第8 章 實現LLVM 後端 227
概述 227
定義暫存器和暫存器集合 228
定義調用約定 230
定義指令集 231
實現棧幀lowering 232
列印指令 236
選擇指令 240
增加指令編碼 244
子平台支持 246
多指令lowering 249
平台註冊 251
第9 章 LLVM項目最佳實踐 265
概述265
LLVM 中的異常處理 265
使用sanitizer 271
使用LLVM 編寫垃圾回收器 273
將LLVM IR 轉換為JavaScript 279
使用Clang 靜態分析器 281
使用bugpoint 282
使用LLDB 286
使用LLVM 通用Pass 291

作者簡介

Mayur Pandey 是一名專業的軟體工程師,同時也是一位開源軟體的愛好者。他專注於編譯器以及編譯器工具的開發,是LLVM 開源社區的活躍貢獻者,也是Tizen 編譯器項目的一員,他對其他編譯器也有著親身實踐經驗。
Mayur 在印度阿拉哈巴德的Motilal Nehru 國家技術研究所獲得學士學位。目前居住在印度班加羅爾。
Suyog Sarda 是一名專業的軟體工程師,同時也是一位開源軟體的愛好者。他專注於編譯器以及編譯器工具的開發,是LLVM 開源社區的活躍貢獻者,也是Tizen 編譯器項目的一員。除此之外,Suyog 也參與了ARM 和x86 架構的代碼改進工作。他對其他的編譯器也有著親身實踐經驗。他對編譯器的主要研究在於代碼最佳化和向量化。除了編譯器之外,Suyog 也對Linux 核心的開發很感興趣。他曾在2012 年於杜拜由Birla技術協會舉辦的IEEE 國際雲計算技術套用大會的議程上發表技術論文,題為“SecureCo-resident Virtualization in Multicore Systems by VM Pinning and Page Coloring”。他在印度普納工程大學獲得計算機學士學位。目前居住於印度班加羅爾。

熱門詞條

聯絡我們