幫助中心 | 我的帳號 | 關於我們

LLVM編譯器原理與實踐/芯科技前沿技術叢書

  • 作者:編者:吳建明//吳一昊|責編:李曉波//馬超
  • 出版社:機械工業
  • ISBN:9787111763543
  • 出版日期:2024/10/01
  • 裝幀:平裝
  • 頁數:456
人民幣:RMB 139 元      售價:
放入購物車
加入收藏夾

內容大鋼
    LLVM是伊利諾伊大學的一個研究項目,提供一個現代化的,基於SSA的編譯策略,並能夠同時支持靜態和動態的任意編程語言的編譯目標。LLVM由不同的子項目組成,其中許多是正在生產中使用的商業和開源的項目。它也被廣泛用於學術研究。
    本書力求將LLVM基礎知識理論與案例實踐融合在一起進行詳細的介紹,幫助讀者理解LLVM工作原理,同時按照應用與設備需要,使用LLVM進行相應的優化與部署。本書包含大量示例和代碼片段,幫助讀者掌握LLVM的編譯器開發環境。
    本書共11章,包括編譯和安裝LLVM、LLVM外部項目、LLVM編譯器、Clang前端基礎、Clang架構與實踐示例、LLVM IR實踐、LLVM晶元編譯器實踐示例、LLVM編譯器示例代碼分析、LLVM優化示例、LLVM後端實踐,以及MLIR編譯器。
    本書適合演算法、軟體、編譯器、人工智慧、硬體等專業方向的企業工程技術人員、高校師生、科研工作人員和技術管理人員閱讀。

作者介紹
編者:吳建明//吳一昊|責編:李曉波//馬超
    吳建明,上海交通大學模式識別與智能系統專業博士畢業。長期從事人工智慧晶元設計,尤其擅長TVM/LLVM編譯器、AI框架、自動駕駛、晶元製造,嵌入式系統等領域的理論研究與技術創新。長期在一線工作,包括產品設計與代碼實現等,主持和參與過30多項產品的研發。還參與過國家自然科學基金、上海市科委項目,並在核心期刊公開發表過8篇論文,其中6篇是第一作者。

目錄
前言
第1章  編譯和安裝LLVM
  1.1  LLVM系統入門
    1.1.1  查看LLVM(包括Clang等子項目)
    1.1.2  配置和構建LLVM與Clang
  1.2  獨立構建
  1.3  軟硬體環境要求
    1.3.1  硬體環境
    1.3.2  軟體環境
    1.3.3  主機C++編譯器和標準庫
    1.3.4  獲取流行主機C++工具鏈
  1.4  LLVM入門
    1.4.1  術語和符號
    1.4.2  打開LLVM存檔文件
    1.4.3  從Git中簽出LLVM源代碼
    1.4.4  本地LLVM配置
    1.4.5  編譯LLVM套件源代碼
    1.4.6  交叉編譯LLVM
    1.4.7  LLVM目標文件的位置
    1.4.8  可選配置項目
  1.5  目錄布局
  1.6  使用LLVM工具鏈的示例
  1.7  LLVM常見問題
  1.8  LLVM相關鏈接
第2章  LLVM外部項目
  2.1  LLDB調試器
    2.1.1  LLDB基礎知識
    2.1.2  LLDB控制台
  2.2  C++標準庫libc
    2.2.1  libc++庫概述
    2.2.2  Ubuntu下安裝Clang和libc
  2.3  compiler-rt運行時庫
    2.3.1  compiler-rt項目組成
    2.3.2  compiler-rt的作用
    2.3.3  平台支持
    2.3.4  compiler-rt源代碼結構
    2.3.5  構建compiler-rt
  2.4  DragonEgg
    2.4.1  DragonEgg將LLVM作為GCC後端
    2.4.2  DragonEgg實踐
  2.5  構建RISC-VLLVM並編譯和運行test-suite
    2.5.1  構建RISC-V的前期準備
    2.5.2  開始構建
    2.5.3  編譯test-suite
    2.5.4  運行LLVMtest-suite
  2.6  Clang附加工具
第3章  LLVM編譯器
  3.1  LLVM與Clang源代碼的下載及編譯
    3.1.1  下載並編譯LLVM
    3.1.2  Clang源代碼的下載與編譯

  3.2  LLVM編譯器基礎結構
    3.2.1  LLVM工作原理
    3.2.2  LLVM的主要子項目
    3.2.3  LLVM與Clang語法
  3.3  LLVM三段式編譯
    3.3.1  傳統編譯器三段式設計及其實現
    3.3.2  LLVM的三段式設計的實現
  3.4  LLVM與Clang架構
    3.4.1  LLVM與Clang架構簡介
    3.4.2  編譯架構特點分析
  3.5  LLVM與GCC的區別
  3.6  LLVMIR
    3.6.1  什麼是LLVMIR
    3.6.2  LLVMIR編譯流程
    3.6.3  如何得到IR
    3.6.4  IR文件鏈接
    3.6.5  IR文件編譯流程
    3.6.6  IR語法中的關鍵字
  3.7  詞法分析與語法分析
    3.7.1  詞法分析
    3.7.2  AST結構分析
  3.8  交叉編譯器
    3.8.1  主機與目標機
    3.8.2  為什麼要交叉編譯
    3.8.3  交叉編譯難點
  3.9  後端開發
    3.9.1  XLA後端分析
    3.9.2  SSA問題分析
    3.9.3  目標信息代碼分析
  3.10  LLVM示例實踐
    3.10.1  如何在ARM上編譯LLVM/Clang
    3.10.2  如何編寫LLVMPass
    3.10.3  基於LLVM的依賴分析方案
  3.11  LLVM數據並行、時間並行和多核並行
第4章  Clang前端基礎
  4.1  編譯器Clang會代替GCC嗎
    4.1.1  GCC概述
    4.1.2  Clang概述
    4.1.3  GCC基本設計與示例
    4.1.4  GCC與Clang的區別
  4.2  使用Clang靜態分析器進行分析調試
    4.2.1  靜態分析器概述
    4.2.2  靜態分析器庫的結構
    4.2.3  靜態分析器工作原理
    4.2.4  內部檢查器
    4.2.5  關於Clang靜態分析器
  4.3  如何進行編譯時間混編優化
  4.4  Clang模塊實現原理探究
    4.4.1  ModuleMap與Umbrella
    4.4.2  模塊的構建

    4.4.3  Clang模塊復用機制
    4.4.4  PCH與PCM文件
  4.5  使用Clang校驗AST
    4.5.1  製作Clang命令行工具的初衷
    4.5.2  製作Clang命令行工具主要步驟
    4.5.3  環境搭建
    4.5.4  開發框架選擇
    4.5.5  代碼開發
  4.6  LLVM與Clang的底層原理
    4.6.1  傳統編譯器設計
    4.6.2  Clang前端
    4.6.3  IR的優化
    4.6.4  bitcode
    4.6.5  編譯流程總結示例
  4.7  自定義Clang命令,利用LLVMPass實現對Objective-C函數的靜態插樁
    4.7.1  Objective-C中的常見的函數hook實現思路
    4.7.2  什麼是LLVMPass
    4.7.3  編譯過程
  4.8  指令系統
    4.8.1  指令系統概述
    4.8.2  指令格式
    4.8.3  指令的定址方式
    4.8.4  指令的類型與功能
    4.8.5  CISC和RISC的比較
第5章  Clang架構與實踐示例
  5.1  C語言編譯器Clang
    5.1.1  Clang和GCC編譯器架構
    5.1.2  Clang起源
  5.2  Clang模塊內部實現原理及源代碼分析
    5.2.1  編譯參數分析
    5.2.2  預處理
  5.3  好用的代碼檢查工具
  5.4  Clang在Objective-C中的使用
    5.4.1  終端使用特點
    5.4.2  Clang的簡單使用
  5.5  Clang重排對象類結構分析
    5.5.1  概述
    5.5.2  根類、超類、子類
  5.6  使用Clang編譯C程序並在安卓設備中執行
  5.7  分析Swift高效的原因
    5.7.1  Swift的函數派發機制
    5.7.2  結構體定義的內存分配
    5.7.3  編譯SIL
    5.7.4  Clang編譯流程的缺點
    5.7.5  Swift的特點及其編譯器的使用流程
  5.8  LLVM中矩陣的實現分析
    5.8.1  背景說明
    5.8.2  功能實現
    5.8.3  舉例說明
第6章  LLVMIR實踐

  6.1  LLVM架構簡介
    6.1.1  LLVMIR的演變
    6.1.2  LLVMIR是什麼
    6.1.3  LLVM架構
    6.1.4  前端生成中間代碼
    6.1.5  LLVM後端優化IR
    6.1.6  LLVM後端生成彙編代碼
  6.2  獲取LLVMIR
    6.2.1  LLVMIR的三種形式
    6.2.2  LLVMIR結構
    6.2.3  標識符與變數
  6.3  LLVMIR實踐——Helloworld
    6.3.1  LLVMIR程序設計方法概述
    6.3.2  最基本的程序
    6.3.3  基本概念解釋
    6.3.4  主程序
  6.4  LLVMIR數據表示
    6.4.1  彙編層次的數據表示
    6.4.2  LLVMIR中的數據表示
    6.4.3  鏈接類型
    6.4.4  可見性
    6.4.5  寄存器
  6.5  LLVMIR類型系統
    6.5.1  類型系統
    6.5.2  元數據類型
    6.5.3  屬性
  6.6  LLVMIR控制語句
    6.6.1  彙編語言層面的控制語句
    6.6.2  LLVMIR層面的控制語句
  6.7  LLVMIR語法鏈接類型
  6.8  LLVMIR函數
    6.8.1  定義與聲明
    6.8.2  傳遞參數與獲得返回值
    6.8.3  內置函數、屬性和元數據
  6.9  LLVMIR異常處理
    6.9.1  異常處理的要求
    6.9.2  LLVMIR的異常處理
    6.9.3  怎麼拋
    6.9.4  怎麼接
第7章  LLVM晶元編譯器實踐示例
  7.1  編譯器基本概念
    7.1.1  LLVM的模塊化編譯器框架
    7.1.2  前端在幹什麼
    7.1.3  後端在幹什麼
    7.1.4  DAG下譯
    7.1.5  DAG合法化
    7.1.6  小結
  7.2  從無到有開發
    7.2.1  不必從頭開始開發
    7.2.2  需要添加的文件類型

    7.2.3  從文件角度看整體框架
    7.2.4  從類繼承與派生角度看整體框架
  7.3  晶元的整體架構部分
    7.3.1  ×××.h類文件
    7.3.2  ×××.td類文件
    7.3.3  ×××TargetMachine.cpp和×××TargetMachine.h類文件
    7.3.4  ×××MCTargetDesc類文件
    7.3.5  ×××baseInfo類文件
    7.3.6  ×××TargetInfo類文件
    7.3.7  ×××Subtarget類文件
    7.3.8  幾個容易混淆的概念
    7.3.9  小結
  7.4  寄存器信息
    7.4.1  ×××Registerinfo.td類文件
    7.4.2  ×××RegisterInfo類文件
    7.4.3  ×××SERegisterinfo類文件
  7.5  指令描述的.td文件
    7.5.1  ×××InstrFormats.td類文件
    7.5.2  ×××InstrInfo.td類文件
    7.5.3  依次定義指令
    7.5.4  定義指令的自動轉換
    7.5.5  小結
  7.6  指令描述的.cpp文件
    7.6.1  ×××InstrInfo.cpp(.h)類文件
    7.6.2  ×××SEInstrInfo.cpp(.h)類文件
    7.6.3  ×××AnalyzeImmediate.cpp(.h)類文件
第8章  LLVM編譯器示例代碼分析
  8.1  建立編譯器的基礎框架
  8.2  使用LLVM實現一個簡單編譯器
    8.2.1  目標
    8.2.2  詞法分析
    8.2.3  語法分析
    8.2.4  LLVMIR的代碼生成
    8.2.5  優化器
    8.2.6  添加JIT編譯器
    8.2.7  靜態單一賦值
    8.2.8  控制流
    8.2.9  用戶自定義操作符
    8.2.10  可變變數
第9章  LLVM優化示例
  9.1  LLVM優化示例介紹
    9.1.1  編譯器優化目標
    9.1.2  LLVM優化Pass如何工作
    9.1.3  聚集對象的標量替換
    9.1.4  公共子表達式消除
    9.1.5  全局變數優化器
    9.1.6  指令合併器
  9.2  改進優化條件
    9.2.1  偏轉循環移動代碼
    9.2.2  運行規範化自然循環

    9.2.3  歸納變數簡化
    9.2.4  進行比特追蹤死代碼消除
  9.3  鏈接時優化
    9.3.1  LTO基本概念
    9.3.2  LTO優化處理
    9.3.3  linkmap分析
  9.4  NutshellLLVMLTO
    9.4.1  ThinLTO
    9.4.2  高度並行的前端處理和初始優化
  9.5  LLVM完全LTO
    9.5.1  LLVM完全LTO的目標
    9.5.2  LLD的整個執行流程
  9.6  LLVM核心類簡明示例
第10章  LLVM後端實踐
  10.1  LLVM後端概述
    10.1.1  LLVM後端基本概念
    10.1.2  使用Cpu0作為硬體的例子
  10.2  LLVM新後端初始化和軟體編譯
    10.2.1  新後端初始化和軟體編譯
    10.2.2  LLVM代碼結構
    10.2.3  Cpu0後端初始化
    10.2.4  LLVM後端結構
    10.2.5  增加AsmPrinter
    10.2.6  增加DAGToDAGISel
    10.2.7  增加Prologue和Epilogue部分代碼
    10.2.8  操作數模式
    10.2.9  小結
  10.3  算術和邏輯運算指令
    10.3.1  算術運算指令
    10.3.2  邏輯運算指令
  10.4  生成目標文件
    10.4.1  簡要說明
    10.4.2  文件新增
    10.4.3  文件修改
    10.4.4  檢驗成果
  10.5  全局變數
    10.5.1  全局變數編譯選項
    10.5.2  代碼修改
    10.5.3  檢驗成果
    10.5.4  小結
  10.6  更多數據類型
    10.6.1  實現類型
    10.6.2  代碼修改
    10.6.3  檢驗成果
  10.7  控制流
    10.7.1  控制流語句
    10.7.2  消除無用的JMP指令
    10.7.3  填充跳轉延遲槽
    10.7.4  條件MOV指令
  10.8  函數調用

    10.8.1  棧幀結構
    10.8.2  傳入參數
    10.8.3  函數調用優化
  10.9  ELF文件支持
    10.9.1  ELF文件
    10.9.2  支持反彙編
  10.10  彙編
    10.10.1  棧幀管理
    10.10.2  彙編器
    10.10.3  內聯彙編
  10.11  使用模擬器驗證編譯器
    10.11.1  運行模擬器
    10.11.2  小結
第11章  MLIR編譯器
  11.1  MLIR語言參考
    11.1.1  高層結構
    11.1.2  MLIR符號
    11.1.3  MLIR作用域
    11.1.4  控制流和SSACFG作用域
    11.1.5  類型系統
    11.1.6  方言類型
  11.2  MLIR方言及運行分析
    11.2.1  MLIR簡介
    11.2.2  常見的IR表示系統
    11.2.3  MLIR的提出
  11.3  方言及運行詳解
    11.3.1  方言
    11.3.2  運行結構拆分
    11.3.3  創建新的方言操作
    11.3.4  將方言載入到MLIRContext中
    11.3.5  定義操作
    11.3.6  創建方言流程總結(使用ODS)
  11.4  MLIR運算與運算元
    11.4.1  MLIR運算與運算元概述
    11.4.2  運算類(Operation)
    11.4.3  運算元類(Op)
    11.4.4  MLIROpBase.td運算元類的作用
    11.4.5  MLIR運算的構建過程
    11.4.6  MLIRTableGen後端生成運算元代碼
  11.5  MLIR的緣起
  11.6  MLIR部署
    11.6.1  MLIR部署流程
    11.6.2  MLIR應用
  11.7  MLIR介紹
  11.8  MLIR基本數據結構
    11.8.1  MLIR源代碼目錄
    11.8.2  MLIR簡易UML類圖
    11.8.3  開發中用到的具體數據結構
  11.9  MLIR的出現背景與提供的解決方案
    11.9.1  概述

    11.9.2  解決方案
  11.10  機器學習編譯器:MLIR方言體系
    11.10.1  基礎組件
    11.10.2  方言體系
參考文獻

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032