LLVM每日谈之二 LLVM IR
来源:互联网 发布:淘宝质量分怎么提高 编辑:程序博客网 时间:2024/05/16 08:25
作者:snsn1984
在介绍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
- LLVM每日谈之二 LLVM IR
- LLVM每日谈之二十六 riscv-llvm
- LLVM IR
- LLVM每日谈之二十一 一些关于编译器和LLVM/Clang的代码
- LLVM每日谈之二十二 llvm-config工具的使用
- LLVM每日谈之二十三 LLVM/Clang编译Linux内核资料
- LLVM每日谈之二十 Everything && Clang driver
- LLVM每日谈之二十四 Google的ClangMR
- LLVM每日谈之二十五 Clangd和LSP
- LLVM每日谈之二十七 几个在线编译器资源
- LLVM每日谈之九 谈LLVM的学习
- LLVM每日谈之三 如何创建一个LLVM工程
- LLVM每日谈之五 LLVM文档介绍
- LLVM每日谈之六 LLVM的源码结构
- LLVM每日谈之十 LLVM Test简介
- LLVM每日谈之十五 LLVM自带的examples
- LLVM每日谈之十六 LLVM的学习感悟
- LLVM每日谈之四 Pass初探
- 卡诺图
- 提问题找答案网站
- 【thinkphp3.x】thinkphp3.x中import方法导入类库的用法
- Eclipse 常用快捷键
- RTTI、虚函数和虚基类的实现方式、开销分析及使用指导
- LLVM每日谈之二 LLVM IR
- 测试度量指标的收集和意义 上
- 测试度量指标的收集和意义 下
- android瀑布流学习
- Linux内核usb驱动框架——U盘挂载
- c++stack容器介绍
- 堆排序
- java 设计模式学习笔记五Adapter适配器模式
- apache做反向代理服务器