LLVM每日谈之二 LLVM IR

简介: 作者:snsn1984 在介绍LLVM IR之前,我们需要先了解下LLVM的结构。传统的静态编译器分为三个阶段:前端、优化和后端。 LLVM的三阶段设计是这样的: 这样做的优点是如果需要支持一种新的编程语言,那么我们只需要实现一种新的前端。

作者:snsn1984

在介绍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文件,这个文件是可读的,可以通过文本编辑器打开。

llvm-dis hello.bc

这样我们就可以直观的得到IR的两种格式了,至于在内存中的那种格式,我们是无法通过文件的形式得到的。

我们一般都是查看.ll格式,因为这本身就是给人阅读的IR格式。


关于LLVM IR的介绍,LLVM专门有一个文档,文档的地址为:

目录
相关文章
|
10天前
|
前端开发 编译器 C++
什么是LLVM项目?
什么是LLVM项目?
54 37
|
编译器 iOS开发
Runtime系列:LLVM的中间代码(IR)【07】
Runtime系列:LLVM的中间代码(IR)
331 0
|
前端开发 IDE 编译器
LLVM编译器前端 Clang 简介
昨天晚上安装rails的开发环境,被ruby的编译搞的有点崩溃。下载的ruby的源码不能用系统自带的gcc -4.21编译,也不能用系统自带的clang进行编译,必须下载并使用gcc -4.2进行编译才能通过。今天稍微看看编译器的一些背景。
557 0
LLVM编译器前端 Clang 简介
|
编译器 iOS开发 Windows
带你读《LLVM编译器实战教程》之一:构建和安装LLVM
本书的前半部分将向您介绍怎么样去配置、构建、和安装LLVM的不同软件库、工具和外部项目。接下来,本书的后半部分将向您介绍LLVM的各种设计细节,并逐步地讲解LLVM的各个编译步骤:前段、中间表示(IR)、后端、即时编译(JIT)引擎、跨平台编译和插件接口。本书包含有大量翔实的示例和代码片段,以帮助读者平稳顺利的掌握LLVM的编译器开发环境。
20190 0
|
Android开发 C语言 C++
《深入理解LLVM》第一章 LLVM简介
第一章 LLVM简介 作者:史宁宁 1.1 LLVM是什么 LLVM是什么?这是一个虽然基础,但是也曾经让很多新入门的人迷惑的一个问题。从字面上来讲,LLVM(Low Level Virtual Machine)是一个底层虚拟机,LLVM曾经有一部分功能对虚拟机有所帮助。
2531 0
|
前端开发 编译器 C++
深入研究Clang(一)Clang和LLVM的关系及整体架构
作者:史宁宁(snsn1984) Clang和LLVM的关系        Clang和LLVM到底是什么关系,这是在研究Clang的过程中所不可避免的一个问题。
1754 0
|
测试技术 编译器 流计算
LLVM每日谈之一 LLVM是什么
作者:snsn1984 写在前面的话: 最近接触llvm比较多,在这个上面花了不少的时间。感觉llvm要完全理解透是个很不容易的事情,需要在学习过程中好好的整理下自己的思路。
1571 0
|
C++ iOS开发 小程序
深入研究Clang(十) Clang Static Analyzer简介
Clang Static Analyzer 官网地址:http://clang-analyzer.llvm.org/ Clang Static Analyer是一个源码分析工具,它可以发现C、C++和Objective-C程序中的bug。
2314 0
|
Linux
LLVM每日谈之二十三 LLVM/Clang编译Linux内核资料
作者:史宁宁(snsn1984) 之前有朋友问到这个问题,是否有使用LLVM/Clang编译Linux内核的,随手找了一些相关资料,在这里贴出来,与大家共享。 网址:http://llvm.
1814 0
|
C++ 索引 Python
LLVM每日谈之二十一 一些关于编译器和LLVM/Clang的代码
作者:史宁宁(snsn1984) 自己收集了一些LLVM/Clang的代码,并且自己也在一点一点的写一些LLVM/Clang以及编译器的代码,在这里把这些代码库分享出来,欢迎大家交流探讨。
1152 0