使用者指南¶
注意:如果您只是想使用基於 LLVM 的編譯器,則應查看 Clang。此處的文件適用於需要使用中介 LLVM 表示法的使用者。
Clang¶
- 如何在 ARM 上建置
關於在 ARM 上建置和測試 LLVM/Clang 的注意事項。
- 如何使用 Profile-Guided Optimizations 建置 Clang 和 LLVM
關於使用 PGO 建置 LLVM/Clang 的注意事項。
- 如何使用 Clang/LLVM 交叉編譯 Clang/LLVM
關於交叉建置和測試 LLVM/Clang 的注意事項。
- 如何建置 C、C++、ObjC 和 ObjC++ 前端
從原始碼建置 clang 前端的說明。
- LLVM 程式碼覆蓋率映射格式
這描述了用於 LLVM 程式碼覆蓋率映射的格式和編碼。
- 控制流程驗證工具設計文件
控制流程完整性驗證工具的描述。
LLVM 建置與發行版¶
- 建置 LLVM 的發行版
使用 LLVM 的 CMake 建置系統封裝和發行基於 LLVM 工具的最佳實務指南。
- 使用 CMake 建置 LLVM
針對使用 CMake 建置系統 的使用者,對主要入門指南的補充說明。
- 用於建置 LLVM 的 Dockerfiles 指南
使用 LLVM 提供的 Dockerfiles 的參考。
- 支援函式庫
本文件描述 LLVM 支援函式庫 (
lib/Support
) 以及如何保持 LLVM 原始碼的可移植性。- 進階建置設定
本文件描述更進階的建置設定。
最佳化¶
- 編寫 LLVM Pass
關於如何在新的 pass 管理器下編寫 LLVM 轉換的資訊。
- 編寫 LLVM Pass (舊版 PM 版本)
關於如何在舊版 pass 管理器下編寫 LLVM 轉換和分析的資訊。
- LLVM 的分析與轉換 Pass
LLVM 中實作的最佳化和分析列表。
- 堆疊安全分析
本文件描述了區域變數堆疊安全分析的設計。
- MergeFunctions pass,其運作方式
描述函數合併最佳化。
- LLVM 別名分析基礎架構
關於如何編寫新的別名分析實作或如何使用現有分析的資訊。
- MemorySSA
關於 LLVM 中的 MemorySSA 工具以及如何使用它的資訊。
- LLVM 迴圈術語(與標準形式)
一份文件,描述 LLVM 中使用的迴圈和相關術語。
- LLVM 週期術語
一份文件,描述作為迴圈概括化的週期。
- LLVM 中的自動向量化
本文件描述 LLVM 中向量化的當前狀態。
- LLVM 連結時間最佳化:設計與實作
本文件描述 LLVM 模組間最佳化器與連結器之間的介面及其設計
- LLVM gold 外掛程式
如何在 Linux 上使用連結時間最佳化建置您的程式。
- 註解
關於 LLVM 中註解實作的參考。
- 使用 LLVM 進行原始碼層級除錯
本文件描述 LLVM 原始碼層級除錯器的設計和理念。
- 如何更新除錯資訊
本文件說明如何在各種程式碼轉換中正確更新除錯資訊。
- 除錯資訊的指令參照
本文件解釋 LLVM 如何使用值追蹤或指令參照,以在編譯的最後階段確定除錯資訊的變數位置。
- 除錯資訊遷移:從內建函數到記錄
這是一份遷移指南,描述如何從使用諸如 dbg.value 之類的內建函數的除錯資訊遷移到使用非指令 DbgRecord 物件。
- Instrumentation 描述檔格式
本文件解釋了基於 instrumentation 的描述檔的兩種二進制格式。
- InstCombine 貢獻者指南
本文件說明了 InstCombine 和相關 pass 的貢獻指南。
程式碼生成¶
- 編寫 LLVM 後端
關於如何為機器目標編寫 LLVM 後端的資訊。
- LLVM 目標獨立程式碼產生器
LLVM 程式碼產生器的設計與實作。如果您正在將 LLVM 重新定向到新的架構、設計新的程式碼生成 pass 或增強現有組件,這會很有用。
- TableGen
描述 TableGen 工具,LLVM 程式碼產生器大量使用該工具。
GlobalISel¶
- MIRPatterns
描述 MIR Patterns 的設計以及如何使用它們。
JIT¶
- MCJIT 設計與實作
描述 MCJIT 執行引擎的內部運作。
- ORC 設計與實作
描述 ORC API 的設計與實作,包括一些使用範例,以及從 ORCv1 轉換到 ORCv2 的使用者指南。
- JITLink 與 ORC 的 ObjectLinkingLayer
描述 JITLink 函式庫(ORC 的新 JIT 連結器)的設計和 API。
- 除錯 JIT 編譯的程式碼
如何使用 GDB 除錯 JIT 編譯的程式碼。
如何使用 GDB 除錯 JIT 編譯的程式碼。
其他主題¶
- CommandLine 2.0 函式庫手冊
提供有關使用命令列剖析函式庫的資訊。
- 擴展 LLVM:新增指令、內建函數、類型等
請查看此處以了解如何將指令和內建函數新增至 LLVM。
- 如何新增受限的浮點數內建函數
提供將新的受限數學內建函數新增至 LLVM 時所需的步驟。
- 如何建置 Windows Itanium 應用程式。
關於組建 Windows Itanium 環境的注意事項。
- 如何為 Arm 交叉編譯 Compiler-rt Builtins
關於為 Arm 交叉建置和測試 compiler-rt builtins 的注意事項。
- 在大端模式下使用 ARM NEON 指令
LLVM 對於在大端 ARM 目標上產生 NEON 指令的支援在某種程度上不直觀。本文件解釋了實作和基本原理。
- LLVM 中對 AArch64 可擴展矩陣擴展的支援
LLVM 對於 AArch64 SME ACLE 和 ABI 的支援。
- 使用 clang 編譯 CUDA
LLVM 對 CUDA 的支援。
- NVPTX 後端使用者指南
本文件描述如何使用 NVPTX 後端來編譯 GPU 核心。
- AMDGPU 後端使用者指南
本文件描述如何使用 AMDGPU 後端來編譯 GPU 核心。
- 異質除錯的 DWARF 擴展
本文件描述了 DWARF 擴展,以支援針對 AMDGPU 後端等目標的異質除錯。
- 允許 DWARF 運算式堆疊上的位置描述
本文件描述 DWARF 擴展,以允許 DWARF 運算式堆疊上的位置描述。它是 異質除錯的 DWARF 擴展 的一部分。
- SPIR-V 目標使用者指南
本文件描述如何使用 SPIR-V 目標來編譯 GPU 核心。
- DirectX 目標使用者指南
本文件描述如何使用 DirectX 目標來編譯 DirectX 運行時的 GPU 程式碼。
- RISC-V 目標使用者指南
本文件描述如何使用 RISC-V 目標。
- RISC-V 向量擴展
本文件描述了如何在 LLVM IR 中表示 RISC-V 向量擴展,以及如何在後端為其產生程式碼。
- Sandbox IR
本文件描述了 Sandbox IR 的設計和用法,Sandbox IR 是 LLVM IR 之上的事務層。
- LLVM 中的遙測框架
本文件描述了 LLVM 中的遙測框架。