llvm每日谈之二 LLVM IR

做者:snsn1984
html

在介绍LLVM IR以前,咱们须要先了解下LLVM的结构。传统的静态编译器分为三个阶段:前端、优化和后端。 前端

[Three Major Components of a Three-Phase Compiler]
LLVM的三阶段设计是这样的:
[LLVM's Implementation of the Three-Phase Design]
这样作的优势是若是须要支持一种新的编程语言,那么咱们只须要实现一种新的前端。若是咱们须要支持一种新的硬件设备,那咱们只须要实现一个新的后端。而优化阶段由于是针对了统一的LLVM IR,因此它是一个通用的阶段,不管是支持新的编程语言,仍是支持新的硬件设备,这里都不须要对优化阶段作修改。因此从这里能够看出LLVM IR的做用。
LLVM IR主要有三种格式:一种是在内存中的编译中间语言;一种是硬盘上存储的二进制中间语言(以.bc结尾),最后一种是可读的中间格式(以.ll结尾)。这三种中间格式是彻底相等的。

LLVM IR是LLVM优化和进行代码生成的关键。根据可读的IR,咱们能够知道再最终生成目标代码以前,咱们已经生成了什么样的代码。并且根据IR,咱们能够选择使用不一样的后端而生成不一样的可执行代码。同时,由于使用了统一的IR,因此咱们能够重用LLVM的优化功能,即便咱们使用的是本身设计的编程语言。 编程

若是想直观的看下llvm的IR究竟是什么样的,能够先写一个helloworld的程序,文件名字叫作hello.c。根据下列文档的步骤配置llvm: 后端

http://clang.llvm.org/get_started.html 编程语言

而后根据文档的内容使用下列命令能够获得二进制的.bc文件: 编辑器

clang -emit-llvm -c hello.c -o hello.bc 优化

而后使用下列命令能够获得对应的hello.ll文件,这个文件是可读的,能够经过文本编辑器打开。 spa

llvm-dis hello.bc .net

这样咱们就能够直观的获得IR的两种格式了,至于在内存中的那种格式,咱们是没法经过文件的形式获得的。 设计

咱们通常都是查看.ll格式,由于这自己就是给人阅读的IR格式。

关于LLVM IR的介绍,LLVM专门有一个文档,文档的地址为:
相关文章
相关标签/搜索