LLVM语言参考手册

LLVM是一个基于SSA(静态单赋值)表示,提供了类型安全,低级别操作,灵活性和表现“所有”高级语言的能力。他是在LLVM编译策略的各个阶段中使用的通用代码表示。

LLVM的代码表示形式被设计为使用三种不同的格式:

  • 1、表示为在内存中编译器中间语言;
  • 2、表示为在磁盘上的位码(适合于即时编译器的快速加载);
  • 3、表示为人类可读的汇编语言。

LLVM为编译器的高效转换和分析提供了强大的中间语言,同时提供一个自然的方法来调试和可视化的转换。LLVM的这三种不同形式的代码表示的都是等价的。本文档描述了人类可读的代表性和符号。

LLVM IR的目标是实现轻量和低级别同时是有表现力的,类型化,可扩展。它的目标是成为一个“通用IR”的序列,由是在一个足够低的水平是高层次的思想可以被清晰地映射到它(类似于微处理器是如何“万能的IR”,这让很多源语言被映射到它们) 。通过提供类型信息,LLVM可以作为优化的目的:例如,通过指针分析可以证明,一个C的自动变量是从来没有被当前函数以外的地方访问,那么就可以让它被提升到一个简单的SSA值中而不是存储单元中。

注意这个文档描述规范化的LLVM汇编语言。这有区别于“可以被解释的就是(well-formed)格式良好的”的概念。例如,下面的指令在语法上是OK的,但不是’well form’(格式良好的)的:  

%x = add i32 1, %x

这是因为%x的定义不能支配到所有使用了%x的地方。
LLVM的架构提供了一个验证过程,用于验证一个LLVM模块是否规范化。这个pass将自动于解释器解释输入汇编之后和优化程序输出bitcode之前。
验证程序验证过程中指出的违规暗示转换过程中的错误或输入到解析器中的错误。

本手册是LLVM汇编语言的参考手册。 本手册翻译自LLVM官方文档:http://llvm.org/docs/LangRef.htm

注意

鉴于本人水平和时间有限,在翻译的过程中难免会有错漏或者不够贴切严谨之处,LLVM官网的文档也会不断更新,本中文手册并保证和官方文档同步更新。