LLVM设计概览¶
一些介绍性的文章和展示
- LLVM 语法参考手册
- LLVM语言参考手册:一些关于LLVM中间表示的相关定义,详细介绍了LLVM字节码的含义和规范
- LLVM编译器简介
- 提供对用户的LLVM简介(08年的一份PPT文稿)
- Intro to LLVM(LLVM介绍)
- 一本介绍LLVM编译器hack技术的书籍
- LLVM: 为分析转换长生命周期程序而设计的编译器框架
- 设计概览
- LLVM: 多级优化的编译器基础设施
- 更多的细节(相当过时的)
- 提及LLVM的相关出版物
用户指南¶
适合刚入门的读者。
注意: 如果您仅仅关心如何使用基于LLVM的编译器,您可以参考 Clang 或 DragonEgg 。这里的文档是为要使用LLVM中间表示的用户准备的,这里涵盖更多的LLVM字节码的相关细节。
- 开始使用LLVM系统
- 讨论如何开始了解LLVM项目并快速入门,我们将介绍从解压缩到编译整个项目的各种细节问题。
- 使用CMake构建LLVM系统
- 使用 CMake 构建系统的入门指导补充
- 如何在ARM平台上构建
- 在ARM平台构建和测试LLVM/Clang
- How To Cross-Compile Clang/LLVM using Clang/LLVM
- 如何跨平台编译和测试LLVM/Clang
- Getting Started with the LLVM System using Microsoft Visual Studio
- 在Windows平台使用Visual Studio的用户入门指导补充
- Building LLVM With Autotools
- 入门指南的补充,关于使用LLVM的Autotools构建系统的构建指导
- LLVM Tutorial: Table of Contents
- 使用LLVM项目的教程,包括使用LLVM制作一款个人定制语言的编译器教程。
- LLVM Command Guide
- LLVM命令行工具的参考手册 (LLVM命令行工具的 “man” 文档”)
- LLVM’s Analysis and Transform Passes
- LLVM中一系列优化和分析的实现
- Frequently Asked Questions (FAQ)
- 一系列常见问题和其解决方案
- Release notes for the current release
- 介绍最新的特性,已知的异常和其他局限性。
- How to submit an LLVM bug report
- 提交LLVM错误信息的相关指导
- Sphinx Quickstart Template
- 编写Sphinx文档的一个模板,同时也是一份教程,您应该阅读它的源码形式,它可以在LLVM源码的docs目录下找到
- LLVM Testing Infrastructure Guide
- LLVM测试框架的使用参考手册
- 如何构建 C, C++, ObjC, 和 ObjC++ 的前端
- 从源码构建Clang前端的构建指导
- The LLVM Lexicon
- 缩略语,术语和LLVM所用到的概念定义。
- How To Add Your Build Configuration To LLVM Buildbot Infrastructure
- 添加新的构建器到LLVM buildbot master,增加新的自动构建机器人。
- YAML I/O
- 使用 LLVM 的 YAML I/O 库的参考指南
- The Often Misunderstood GEP Instruction
- 回答一下对LLVM指令的常见误解,详细介绍GetElementPtr指令的含义和用法
- Performance Tips for Frontend Authors
- 编译器前端作者的小提醒,关于如何生成高效的LLVM IR
开发者文档¶
适合希望将LLVM作为第三方库使用的应用开发者阅读。
- LLVM Language Reference Manual
- LLVM语言参考手册:一些关于LLVM中间表示的相关定义,详细介绍了LLVM字节码的含义和规范
- LLVM Atomic Instructions and Concurrency Guide
- 原子指令和并发指南:LLVM并发模型的相关信息
- LLVM Programmer’s Manual
- 介绍LLVM源代码的基础部分,重要的类和相关API接口,也包含一些重要的提示和技巧。
- LLVM Extensions
- LLVM特殊的扩展工具和兼容格式
- CommandLine 2.0 Library Manual
- 提供了命令行解析库的相关信息。
- LLVM Coding Standards
- LLVM代码规范的细节,并且提供了编写高效C++代码的技巧信息
- How to set up LLVM-style RTTI for your class hierarchy
- 如何让
isa<>
,dyn_cast<>
, 等指令可以用在您自定义的类中。 - Extending LLVM: Adding instructions, intrinsics, types, etc.
- 这里介绍了如何添加新的LLVM指令,内联函数,内部类型等
- Doxygen generated documentation
- (classes) (tarball)
- ViewVC Repository Browser
- Architecture & Platform Information for Compiler Writers
- 一系列关于所支持的架构的相关信息,对于编译器开发者十分必要。
- LibFuzzer – a library for coverage-guided fuzz testing.
- A library for writing in-process guided fuzzers.
子系统文档¶
适合API调用者和LLVM开发者阅读。
- Writing an LLVM Pass
- 如何去写一个LLVM转换分析过程(一个Pass)的相关信息。
- Writing an LLVM Backend
- 关于如何去写一个针对特性目标机型的LLVM的后端。
- The LLVM Target-Independent Code Generator
- LLVM代码生成器的设计与实现,如果你正在重新制作一个新的目标架构,设计一个新的代码生成过程或者修改现有组件,这份文档将会十分有价值。
- Machine IR (MIR) Format Reference Manual
- MIR串行化格式的参考文档,用来测试LLVM的代码生成过程。
- TableGen
- TableGen工具的介绍,一款LLVM代码生成部分很常用的工具。
- LLVM Alias Analysis Infrastructure
- 关于如何给一个新的分析实现或现有实现起别名。
- 垃圾收集与LLVM
- 编译器用来实现GC程序的源代码接口。
- Source Level Debugging with LLVM
- LLVM 源码级调试器的设计哲学描述文档
- Auto-Vectorization in LLVM
- 这份文档描述了如何将LLVM的当前状态向量化。
- Exception Handling in LLVM
- 这份文档描述了如何设计和实现在LLVM中的异常处理。
- LLVM bugpoint tool: design and usage
- 自动bug跟踪和测试用例减少器的描述和使用信息
- LLVM Bitcode File Format
- 这份文档描述了LLVM “.bc” 文件的格式和编码。
- System Library
- 这份文档描述了如何使用LLVM系统库(
lib/System
),以及如让LLVM源码保持可移植性 - LLVM Link Time Optimization: Design and Implementation
- 链接时优化:这份文档描述了LLVM模块内优化器和链接器之间的接口,以及设计思路
- The LLVM gold plugin
- 如何在Linux平台上,构建你的程序时启用链接时优化。
- Debugging JIT-ed Code With GDB
- 如何使用GDB调试Jit引擎中的代码。
- MCJIT Design and Implementation
- MCJIT执行引擎的内部工作描述
- LLVM Branch Weight Metadata
- 提供了分支预测技术的相关信息
- LLVM Block Frequency Terminology
- 提供了一些关于在分析过程中,基本块频率信息(
BlockFrequencyInfo
)的术语信息 - Segmented Stacks in LLVM
- 这份文档描述了分段栈和它是如何在LLVM被使用的。
- LLVM’s Optional Rich Disassembly Output
- 这份文档描述了可选富反编译器的输出形式
- How To Use Attributes
- 回答一些关于属性指令的相关问题。
- User Guide for NVPTX Back-end
- 这份文档描述使用NVPTX后端去编译到GPU代码的方法。
- User Guide for AMDGPU Back-end
- 这份代码描述了如何使用AMDGPU后端。
- Stack maps and patch points in LLVM
- LLVM对于映射指令地址到变量所在位置的相关支持,
- Using ARM NEON instructions in big endian mode
- LLVM对于生成NEON instructions在大端ARM目标机型的支持是有点令人费解的,这份文档在解释其实现和基本原理
- LLVM Code Coverage Mapping Format
- 这份文档描述了LLVM代码覆盖率映射的格式和编码方式。
- Garbage Collection Safepoints in LLVM
- 这份文档描述了对于垃圾回收机制的支持的一系列额外扩展。
- MergeFunctions pass, how it works
- 描述了合并功能优化。
- Design and Usage of the InAlloca Attribute
- 描述了
inalloca
参数属性的相关信息 - FaultMaps and implicit checks
- 异常图和隐式检查:LLVM对于转换控制流到错误恢复语句的支持
- Compiling CUDA C/C++ with LLVM
- LLVM对于CUDA的支持
开发过程文档¶
LLVM开发过程中的重要信息
- LLVM Developer Policy
- LLVM项目对于开发者和他们贡献的政策
- Creating an LLVM Project
- How-to guide and templates for new projects that use the LLVM
infrastructure. The templates (directory organization, Makefiles, and test
tree) allow the project code to be located outside (or inside) the
llvm/
tree, while using LLVM header files and libraries. - LLVMBuild Guide
- 描述了LLVMBuild 的结构和LLVM用到的文件的详细说明
- LLVM Makefile Guide
- 描述了LLVM的Makefiles如何工作以及如何使用它们。
- How To Release LLVM To The Public
- 这是一份准备LLVM发布版的指导,大多数开发者可以忽略它。
- How To Validate a New Release
- 这是一个如何校验新发布版的指导,大多数开发者可以忽略它。
- Advice on Packaging LLVM
- 打包LLVM成分发版的建议。
- Code Reviews with Phabricator
- 关于如何使用Phabricator代码审阅工具审阅托管在 http://reviews.llvm.org/ 上的代码,以及相关的命令行接口。——Arcanist
Community¶
LLVM has a thriving community of friendly and helpful developers. The two primary communication mechanisms in the LLVM community are mailing lists and IRC.
邮件列表¶
如何你在文档中找不到你需要的内容,可以尝试查看邮件列表。
- 开发者列表 (llvm-dev)
- This list is for people who want to be included in technical discussions of LLVM. People post to this list when they have questions about writing code for or using the LLVM tools. It is relatively low volume.
- 提交归档 (llvm-commits)
- This list contains all commit messages that are made when LLVM developers commit code changes to the repository. It also serves as a forum for patch review (i.e. send patches here). It is useful for those who want to stay on the bleeding edge of LLVM development. This list is very high volume.
- Bug和补丁归档 (llvm-bugs)
- This list gets emailed every time a bug is opened and closed. It is higher volume than the LLVM-dev list.
- 测试结果归档 (llvm-testresults)
- A message is automatically sent to this list by every active nightly tester when it completes. As such, this list gets email several times each day, making it a high volume list.
- LLVM公共列表 (llvm-announce)
- This is a low volume list that provides important announcements regarding LLVM. It gets email about once a month.
IRC¶
Users and developers of the LLVM project (including subprojects such as Clang) can be found in #llvm on irc.oftc.net.
This channel has several bots.
- Buildbot reporters
- llvmbb - Bot for the main LLVM buildbot master. http://lab.llvm.org:8011/console
- bb-chapuni - An individually run buildbot master. http://bb.pgr.jp/console
- smooshlab - Apple’s internal buildbot master.
- robot - Bugzilla linker. %bug <number>
- clang-bot - A geordi instance running near-trunk clang instead of gcc.