用户指南¶
注意:如果您只是想使用基于 LLVM 的编译器,您应该查看 Clang。此处的文档面向需要使用 LLVM 中间表示的用户。
Clang¶
- 如何在 ARM 上构建
关于在 ARM 上构建和测试 LLVM/Clang 的说明。
- 如何使用配置文件引导优化构建 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 的 Dockerfile 指南
使用 LLVM 提供的 Dockerfile 的参考。
- 支持库
本文档描述了 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 对象。
- 检测配置文件格式
本文档解释了基于检测的配置文件的两种二进制格式。
- 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 交叉编译编译器运行时内联函数
关于交叉构建和测试 Arm 编译器运行时内联函数的说明。
- 在大端模式下使用 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 目标用户指南
本文档描述了如何使用 RISCV-V 目标。
- RISC-V 向量扩展
本文档描述了如何在 LLVM IR 中表达 RISC-V 向量扩展以及如何在后端为其生成代码。
- 沙盒 IR
本文档描述了沙盒 IR 的设计和用法,沙盒 IR 是 LLVM IR 上的事务层。