概述

LLVM编译器基础设施提供了一系列项目,从工业级的编译器到专业的JIT应用,再到小型的研究项目都有。

同样的,文档也被按照不同的目标读者,从高层次划分成为了几个部分:

LLVM设计概览

一些介绍性的文章和展示

LLVM 语法参考手册
LLVM语言参考手册:一些关于LLVM中间表示的相关定义,详细介绍了LLVM字节码的含义和规范
LLVM编译器简介
提供对用户的LLVM简介(08年的一份PPT文稿)
Intro to LLVM(LLVM介绍)
一本介绍LLVM编译器hack技术的书籍
LLVM: 为分析转换长生命周期程序而设计的编译器框架
设计概览
LLVM: 多级优化的编译器基础设施
更多的细节(相当过时的)
提及LLVM的相关出版物

用户指南

适合刚入门的读者。

注意: 如果您仅仅关心如何使用基于LLVM的编译器,您可以参考 ClangDragonEgg 。这里的文档是为要使用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)

Documentation for Go bindings

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
  • robot - Bugzilla linker. %bug <number>
  • clang-bot - A geordi instance running near-trunk clang instead of gcc.

Indices and tables