用户指南¶
注意:如果您只是想使用基于 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 的 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 如何使用值跟踪或指令引用来确定编译最后阶段调试信息的变量位置。
- 调试信息迁移:从 intrinsics 到 records
这是一个迁移指南,描述了如何从使用诸如 dbg.value 之类的 intrinsics 的调试信息迁移到使用非指令 DbgRecord 对象。
- Instrumentation Profile 格式
本文档解释了基于 instrumentation 的配置文件的两种二进制格式。
- InstCombine 贡献者指南
本文档指定了 InstCombine 和相关 Pass 的贡献指南。
代码生成¶
- 编写 LLVM 后端
有关如何为机器目标编写 LLVM 后端的信息。
- LLVM 目标无关代码生成器
LLVM 代码生成器的设计和实现。如果您正在重新定位 LLVM 到新架构、设计新的 codegen 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:添加指令、intrinsics、类型等。
在这里查看如何向 LLVM 添加指令和 intrinsics。
- 如何添加受约束的浮点 Intrinsic
给出了向 LLVM 添加新的受约束数学 intrinsic 所需的步骤。
- 如何构建 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 向量扩展
本文档描述了 RISC-V 向量扩展如何在 LLVM IR 中表示,以及如何在后端为其生成代码。
- Sandbox IR
本文档描述了 Sandbox IR(LLVM IR 上的事务层)的设计和用法。
- LLVM 中的遥测框架
本文档描述了 LLVM 中的遥测框架。