http://www.cocoachina.com/bbs/read.php?tid-53788.html
编译器后端,寄存器分配算法
http://blog.csdn.net/lm2302293/article/details/6790812
前瞻-全时优化和LLVM-2
http://blog.csdn.net/lm2302293/article/details/6798745
前瞻-全时优化和LLVM-1
http://blog.csdn.net/lm2302293/article/details/6798736
编译器后端寄存器分配算法SSA(静态单一赋值法)
http://blog.csdn.net/lm2302293/article/details/6791752
http://wenku.baidu.com/view/045ec6dba58da0116c174977.html:
LLVM: An Infrastructure for Multi-Stage Optimization!
LLVM(Low Level Virtual Machine),底层虚拟机,是一个编译器的基础建设,以C++写成。
LLVM属于编译器的中间层,它的输入是编译器的IF代码,输出经过最佳化的IF代码。然后再被编译器转化为机器相关的汇编代码。
LLVM支持语言无关的指令集和类型系统。指令采用静态单赋值形式。
LLVM是为了任意一种编程语言写成的程式,利用 虚拟技术,创造出 编译时期, 链结时期, 执行时期以及“闲置时期”的最佳化。它最早是以 C/C++为实作对象,目前它支援了包括 Objective-C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL以及其他语言。LLVM 专案起源于2000年伊利诺伊大学厄巴纳-香槟分校 Vikram Adve 与 Chris Lattner 的研究发展而成,他们想要为所有静态及动态语言创造出动态的编译技术。LLVM是以 BSD 授权来发展的开源码软件。在2005年,苹果电脑雇用了Chris Lattner及他的团队,为了苹果电脑开发应用程式系统。
LLVM定义了一个虚拟机的语言。然后再这个语言的基础上,实现了很多的功能,例如大多数的优化都是基于这个虚拟机的语言来进行的。(这是和GCC很大的 不同,我想也是delphij提到的更好的优化的原因.) 你可以这么理解,LLVM就是建立了很多个积木块,写编译器就是搭积木。
LLVM-GCC就是一个积木块,它把C代码编译成LLVM的语言。
LLVM-GCC 模块 => LLVM CODE
-> optimize
-> xxx不同的积木块
x86代码生成模块binary <=
这样,我们写两个积木就实现了一个编译器。如果要不同的平台,我们换最后那个。不同的语言,我们换第一个。
另外,我认为这是一个趋势。微软的phoeni项目和LLVM是非常的类似的。
用VB+LLVM写一个山寨编译器:http://www.vbgood.com/thread-98641-1-1.html
llvm-gcc的前端是gcc。
clang是llvm项目自己写的编译器。clang目前还缺少一些语法的支持,不过FreeBSD未来计划采用的是clang,因为它的结构更清晰,而且将会支持最新的C/C++标准。
学习LLVM的方法:
http://hi.baidu.com/zhanghuikl/blog/item/4d6a25f31e7dc05c342acc15.html
参见:http://linuxtoy.org/archives/llvm-and-clang.html
LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种语言编译器的后台来使用。如果这样还比较抽象的话,介绍下 Clang 就知道了:Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。
Clang 开发事出有因,Wiki 介绍如下:
Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端显卡) 上生成代码 (JIT),令程序仍然能够正常运行。之后 LLVM 与 GCC 的集成过程引发了一些不快,GCC 系统庞大而笨重,而 Apple 大量使用的 Objective-C 在 GCC 中优先级很低。此外 GCC 作为一个纯粹的编译系统,与 IDE 配合很差。加之许可证方面的要求,Apple 无法使用修改版的 GCC 而闭源。于是 Apple 决定从零开始写 C family 的前端,也就是基于 LLVM 的 Clang 了。
Clang 的特性:
当然,GCC 也有其优势:
相信介绍到这里大家能够对 Clang 和 LLVM 有所了解了。除去 Clang 之外,LLVM 还被用在 Gallium3D 中进行 JIT 优化,Xorg 中的 pixman 也有考虑使用 LLVM 来优化执行速度,llvm-lua 使用 LLVM 来编译 Lua 代码,gpuocelot 使用 LLVM 可以令 CUDA 程序无需重新编译即可运行在多核 X86CPU、IBM Cell、支持 OpenCL 的设备之上... 我个人感觉 Apple 在开源界口碑较差(也许是我的错觉?),不过 Apple 也为开源界贡献了不少,Webkit,OpenCL(虽说只是个标准),Clang。我最为佩服的是虽然出身于命令行之上的 Unix 族系统,但有魄力写出自成体系的图形栈,其图形界面优美而人性化,可谓也为开源界贡献了自己的精神与思想。 对于 Clang 这个很有潜力的项目,我希望其 C++ 支持(尤其是 template 支持)能够早日完善。因为 GCC 在 template 出错时的诊断信息如同小说一般...