LLVM编译器基础架构支持广泛的项目,从工业强度编译器到专门的JIT应用程序,再到小型研究项目。
同样,文档分为几个针对不同受众的高级别分组:
LLVM设计概述
几篇介绍性论文和演讲。
- LLVM编译器简介: 向用户介绍LLVM的演示文稿
- LLVM简介: 本章提供了面向编译器黑客的LLVM介绍
- LLVM:终身计划分析与转型的编制框架:设计概述
- LLVM:多阶段优化的基础架构:更多细节(现在很老)
用户指南
这些内容适用于那些刚刚接触LLVM系统的人。
注意:如果您是仅对使用基于LLVM的编译器感兴趣的用户,则应该查看Clang。此处的文档适用于需要使用中间LLVM表示的用户。
- LLVM系统入门 : 讨论如何使用LLVM基础架构快速启动和运行。从解包和编译分发到执行某些工具的一切。
- 使用CMake构建LLVM: 使用CMake构建系统的主要入门指南的附录。
- 在ARM平台上构建LLVM指南: 关于在ARM上构建和测试LLVM/Clang的注意事项。
- 如何使用配置文件引导优化构建Clang和LLVM: 使用PGO构建LLVM/Clang的注意事项。
- 如何为ARM平台交叉编译compiler-rt Builtins: 关于交叉构建和测试ARM的编译器-rt内置函数的注意事项。
- 如何使用Clang/LLVM交叉编译Clang/LLVM:关于交叉构建和测试LLVM / Clang的注意事项。
- 使用Microsoft Visual Studio开始使用LLVM系统:Windows上使用Visual Studio的主要入门指南的附录。
- LLVM命令指南: LLVM命令行实用程序的参考手册(LLVM工具的“man”页面)
- LLVM的分析和转换Passes:LLVM中实现的优化和分析列表
- LLVM FAQ: 常见问题和问题列表及其解决方案。
- 当前版本的发布说明:这描述了新功能,已知错误和其他限制。
- 如何提交LLVM错误报告: 有关正确提交有关您在LLVM系统中遇到的任何错误的信息的说明。
- sphinx模板快速入门:使用LLVM测试基础结构的参考手册。
- LLVM测试套件基础结构指南:使用LLVM测试基础结构的参考手册。
- LLVM测试套件使用指南:描述如何编译和运行测试套件基准测试。
- 如何构建C,C ++,ObjC和ObjC ++前端:从源代码构建clang前端的说明。
- LLVM词典:LLVM中使用的首字母缩略词,术语和概念的定义。
- 如何将构建配置添加到LLVM Buildbot基础结构:有关将新构建器添加到LLVM buildbot master的说明。
- YAML I/O:使用LLVM的YAML I/O库的参考指南。
- 经常被误解的GEP指令:关于LLVM最常被误解的指令的一些常见问题的答案。
- 前端作者的性能提示:前端作者关于如何生成IR的技巧的集合,LLVM能够有效地优化。
- Dockerfiles用于构建LLVM的指南:使用随LLVM提供的Dockerfiles的参考。
编程文档
对于使用LLVM作为库的应用程序的开发人员。
- LLVM语言参考手册:定义LLVM中间表示和不同节点的汇编表单。
- LLVM原子指令和并发指南:有关LLVM的并发模型的信息。
- LLVM程序员手册:介绍LLVM源代码库的总体布局,重要的类和API,以及一些提示和技巧。
- LLVM扩展:LLVM特定的工具和格式扩展LLVM寻求兼容性。
- CommandLine 2.0库手册:提供有关使用命令行解析库的信息。
- LLVM编码标准:详细介绍了LLVM编码标准,并提供了有关编写高效C ++代码的有用信息。
- 如何为类层次结构设置LLVM样式的RTTI:如何让
isa<>
,dyn_cast<>
等可供您的类层次的客户。 - 扩展LLVM:添加指令,内在函数,类型等:在这里查看如何向LLVM添加指令和内在函数。
- libFuzzer - 用于覆盖引导的模糊测试的库:用于编写进程中引导模糊器的库
- 模糊LLVM库和工具:有关编写和使用Fuzzers查找LLVM中的错误的信息.
- Scudo硬化分配器:一个实现安全加固的malloc()的库。
- 使用-opt-bisect-limit调试优化错误:用于调试优化引发的故障的命令行选项。
子系统文档
适用于API客户端和LLVM开发人员。
- 编写LLVM Passes:有关如何编写LLVM转换和分析的信息
- 编写LLVM后端:有关如何为机器目标编写LLVM后端的信息
- LLVM与目标无关的代码生成器:LLVM代码生成器的设计和实现。如果您正在将LLVM重新定位到新架构,设计新的codegen传递或增强现有组件,则非常有用。
- 机器IR(MIR)格式参考手册:MIR序列化格式的参考手册,用于测试LLVM的代码生成过程。
- TableGen:描述了TableGen工具,LLVM代码生成器大量使用它。
- LLVM别名分析基础结构:有关如何编写新别名分析实现或如何使用现有分析的信息。
- MemorySSA:有关LLVM中的MemorySSA实用程序的信息,以及如何使用它。
- 使用LLVM进行垃圾收集:接口源语言编译器应该用于编译GC程序。
- 使用LLVM进行源级别调试:本文档描述了LLVM源代码级调试器背后的设计和理念。
- LLVM中的自动矢量化:本文档描述了LLVM中矢量化的当前状态
- LLVM中的异常处理:本文档描述了LLVM中异常处理的设计和实现
- 如何添加一个受约束的浮点内在函数:在LLVM中添加新的约束数学内在时,提供必要的步骤。
- LLVM bugpoint工具:设计和使用:自动错误查找器和测试用例减少器描述和使用信息
- LLVM Bitcode文件格式:这描述了用于LLVM“bc”文件的文件格式和编码。
- 支持库:本文档描述了LLVM支持库(lib/Support)以及如何使LLVM源代码可移植
- LLVM链接时间优化:设计和实现:本文档描述了LLVM模块间优化器与链接器及其设计之间的接口
- LLVM黄金插件:如何在Linux上使用链接时优化来构建程序。
- 使用GDB调试JIT-ed代码:如何使用GDB调试JITed代码。
- MCJIT设计与实施:描述了MCJIT执行引擎的内部工作原理
- LLVM分支权重元数据:提供有关分支预测信息的信息。
- LLVM块频率术语:提供有关BlockFrequencyInfo 分析过程中使用的术语的信息
- LLVM中的分段堆栈:本文档描述了分段堆栈以及它们在LLVM中的使用方式
- LLVM的可选丰富的反汇编输出:本文档介绍了可选的丰富反汇编输出语法
- 如何使用属性:回答有关新属性基础结构的一些问题。
- NVPTX后端用户指南:本文档描述了使用NVPTX后端编译GPU内核。
- AMDGPU后端用户指南:本文档描述了使用AMDGPU后端编译GPU内核。
- LLVM中的堆栈映射和补丁点:LLVM支持将指令地址映射到值的位置并允许修补代码。
- 在big endian模式下使用ARM NEON指令:LLVM支持在大端ARM目标上生成NEON指令有点不直观。本文档解释了实施和理由。
- LLVM代码覆盖映射格式:LLVM代码覆盖映射格式
- LLVM中的垃圾收集安全点:这描述了一组垃圾收集支持的实验扩展。
- MergeFunctions Pass,它是如何工作的:描述合并优化的函数。
- InAlloca属性的设计和使用:inalloca参数属性的描述。
- FaultMaps和隐式检查:LLVM支持折叠控制流入错误机器指令。
- 用clang编译CUDA:LLVM对CUDA的支持。
- LLVM中的协同程序:LLVM中的协同程序.
- 全局指令选择:这描述了原型指令选择替换GlobalISel
- XRay仪表:有关如何在LLVM中使用XRay的高级文档。
- 使用XRay进行调试:如何使用XRay调试应用程序的示例。
- Microsoft PDB文件格式:Microsoft PDB(程序数据库)文件格式的详细说明。
- 控制流程验证工具设计文档:控制流完整性验证工具的说明
- 投机负荷强化:Spectre v1的推测负载强化缓解的描述
- 堆栈安全分析:本文档描述了局部变量的堆栈安全性分析的设计。