
彭成寒 李灵 戴贤泽 王志磊 俞佳嘉
全书分为3篇。第1篇介绍编译器基础知识,包括中间表示,重点介绍SSA、数据流分析、支配、循环等知识,此外还介绍了LLVM的后端描述语言TableGen。第二篇剖析分LLVM代码生成,其中对代码生成的每一步骤都有提及,着重介绍指令选择、指令调度、寄存器分配和编译优化。同时还以BPF后端为例总结了如何基于LLVM开发一款新后端的编译器。第三篇附录主要总结了LLVM代码生成过程中使用的IR、BPF指令集以及如何在Linux运行BPF应用,Pass和PassManager的运行机制等知识。 通过阅读本书,读者理解和掌握LLVM代码生成过程,可以根据本书指导为基于LLVM开发一款新后端的编译器。同时本书还介绍了各种编译过程中使用到的算法,读者可以根据场景对算法进行增强从而达到性能优化目的。
一本不错的 LLVM 领域的指导书籍
充斥低級錯誤,常常前一句定義就和下一句衝突,太多了,隨便舉幾個例子 4.1.2 如果基本塊A支配基本塊B,那麼基本塊A執行一定會導致基本塊B也執行(根據支配定義.... 這邊兩個「支配」都應該改成「逆支配」才符合定義 4.2.1 後向邊:在 dfs 中有一條從根節點出發的路徑,且路徑能從 v 到達 w,如果 df(v) > df(w).... 前後矛盾,如果 dfs 中有這條路徑根本不可能讓後者的值大於前者,推論他說的意思是圖中有這條路徑而不是 dfs 中 4.2.2 對 LT 算法來說... 這邊上下兩個條件甚至都不是互斥的,而且 sdom(w) 不就是 u?為什麼一個式子裡要參雜兩種寫法?大概他根本就搞混了 前面也有很多,數不完了,難以直視的校對品質,只能負評了
我觉得这本书还不错👍