LLVM IR
来源:互联网 发布:日本国籍 知乎 编辑:程序博客网 时间:2024/05/04 23:56
在介绍LLVM IR之前,我们需要先了解下LLVM的结构。传统的静态编译器分为三个阶段:前端、优化和后端。
LLVM的三阶段设计是这样的:
这样做的优点是如果需要支持一种新的编程语言,那么我们只需要实现一种新的前端。如果我们需要支持一种新的硬件设备,那我们只需要实现一个新的后端。而优化阶段因为是针对了统一的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文件,这个文件是可读的,可以通过文本编辑器打开。
llvm-dis hello.bc
这样我们就可以直观的得到IR的两种格式了,至于在内存中的那种格式,我们是无法通过文件的形式得到的。
我们一般都是查看.ll格式,因为这本身就是给人阅读的IR格式。
关于LLVM IR的介绍,LLVM专门有一个文档,文档的地址为:
http://llvm.org/docs/LangRef.html
0 0
- LLVM IR
- LLVM IR 语法
- LLVM IR is a compiler IR
- LLVM每日谈之二 LLVM IR
- LLVM教程( 三)-- LLVM IR
- (转)LLVM IR 简介
- LLVM IR指令的抽象
- LLVM IR 调试 常见错误
- llvm IR 语法小例子
- LLVM (4) 11.3 LLVM的代码表示:LLVM IR
- LLVM IR 语法简介(一)
- Mapping High-Level Constructs to LLVM IR
- LLVM IR 语言的形式化描述
- llvm之IR手册翻译(1)
- llvm之IR手册翻译(2)
- llvm之IR手册翻译(3)
- llvm之IR手册翻译(4)
- llvm之IR手册翻译(5)
- Service Unavailable -windows2003 打补丁所致
- Linux下memcached-1.4.20安装 , 查看状态
- 并查集+线段树 BZOJ 3038: 上帝造题的七分钟2
- 【BZOJ】【P3211】【花神游历各国】【题解】【线段树】
- 新网严重漏洞导致前瞻网域名被盗 ,损失过亿
- LLVM IR
- matlab编程笔记:错误集锦
- @Html.DropDownListFor 设置默认值
- HDFS 的Trash回收站功能的配置、使用
- 学一学,FBO, 很不错的opengl博客
- hadoop集群配置机架感知
- 马云之三两事
- Umount a busy device
- DM9000驱动