发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
http://www./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 专案起源于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./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:///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 出错时的诊断信息如同小说一般...
来自: guitarhua > 《编程语言》
0条评论
发表
请遵守用户 评论公约
GCC,LLVM,Clang编译器对比
GCC,LLVM,Clang编译器对比。一方面,是Apple对Objective-C语言(甚至后来对C语言)新增很多特性,但GCC开发者并不买Apple的帐——不给...
雪豹的心脏:LLVM和Clang 雪豹,LLVM,Clang 知名博客对于苹果的
雪豹的心脏:LLVM和Clang 雪豹,LLVM,Clang 知名博客对于苹果的。在那篇综述的最后,我这样结尾:对于LLVM,Apple拥有相当宏伟的计划:逐...
c 各种编译器(gcc clang)
c 各种编译器(gcc clang)很多时候,出现一些类似GNU,GCC,CLANG,LLVM等与编译器有关的名词的时候,都不太清楚它到底是干嘛的,理解这些东西后,对于xcode中很多配置型的需求修改起来都会得心应手,因此...
一言不合升性能,AMD为Ryzen推出专门的C/C 编译器
一言不合升性能,AMD为Ryzen推出专门的C/C 编译器。Phoronix针对其他更常见的编译器进行了一个测试,如GCC 6.3,GCC 7.1,GCC 8,LLVM C...
How to use Clang Static Analyzer
scan-build总结:不管是编译单独文件还是整个工程,scan-build 都不直接启动clang,而是启动ccc-analyzer或c++-analyzer[scan-build option]经过scan-build处理,以环境变量的形式传递给ccc-analyzer[c...
在windows下使用llvm+clang
llvm+clang 在windows下有两种,一个是用mingw编译的,使用gcc的头文件和库。clang: C语言编译器,类似于gccclang++: C++编译器,类似于g++。clang++只是clang的一个别名。文档请见:http://clang.llvm...
大白话聊聊编译那点事儿
目标代码生成,目标代码优化,这些环节共同组成了编译后端,其实编译后端还会有本文没有深入讲的链接环节(将目标文件串联成可执行文件),编译后端专门负责处理各个平台的差异,根据不同平台,编译后...
Julia机器学习核心编程.2(LLVM和JIT)
Julia机器学习核心编程.2(LLVM和JIT)LLVM不用对传统虚拟机做太多修改,下面列举LLVM的一些特性。· 创建LLVM的核心库提供了现代的源...
clang编译器简介
clang编译器简介。Linux下的apt-get(有时候需要自己配置一下相关的软件源):sudo apt-get install clang-3.4 clang-3.4-doc libclang-...
微信扫码,在手机上查看选中内容