文章的主题:
- LLVM被创建出来的原始动机
- LLVM如何演进成现在的整个编译框架
为什么要有LLVM?
起点
LLVM的大爆炸,源自于一篇硕士论文。Chris Arthur Lattner的《LLVM: AN INFRASTRUCTURE FOR MULTI-STAGE OPTIMIZATION》[1].LLVM原本的名字是Low Level Virtual Machine. 虽然它现在已经和虚拟机没什么太大关系了,但是在它诞生的时候,它的野心在于取代虚拟机。
传统编译器优化的痛点
优化的本质在于利用各种信息(源代码中的信息,编译时数据流分析,运行时数据采样),来优化程序的二进制表示。在最开始,编译器的优化都是静态的,或基于控制流,或基于数据流。随着编译器优化的逐步演进,逐渐出现了利用其它阶段信息进行优化的方式,常见的有如下几种:
- 链接时过程间优化
- 运行时优化
- Profile-Driven优化
这些技术都有着什么样的缺点?
链接时优化
过程间(或全程序)优化的基本思路是将尽可能多的程序集中到一个地方,将分析和转换扩大到单个编译单元之外。而决定过程间优化的一个最重要决策是:程序的中间表示将在哪个级别上进行?