LLVM编译器架构
LLVM编译器架构
LLVM概述
LLVM项目是模块化和可重用的编译器及工具链技术的集合。尽管名称如此,LLVM与传统虚拟机关系不大。名称“ LLVM”本身不是缩写。它是项目的全名。
LLVM最初是伊利诺伊大学的一个研究项目,目的是提供一种基于SSA的现代编译策略,该策略能够支持任意编程语言的静态和动态编译。从那时起,LLVM逐渐发展成为一个由多个子项目组成的总体项目,其中许多子项目已用于各种商业和开源项目的产品中,并广泛用于学术研究。LLVM项目中的代码已根据“具有LLVM例外的Apache 2.0许可”获得许可
LLVM的主要子项目是:
- 该LLVM内核库提供一个现代化的源代码与目标无关的优化,随着代码生成支持许多流行的CPU(以及一些不太常见的!),这些包都是围绕着建立以及指定被称为LLVM中间表示的代码表示(“ LLVM IR”)。LLVM核心库有充分的文档记录,特别容易发明自己的语言(或移植现有的编译器)以将LLVM用作优化器和代码生成器。
- Clang是“ LLVM本机” C / C ++ / Objective-C编译器,旨在提供惊人的快速编译,极其有用的错误和警告消息,并为构建出色的源代码级工具提供平台。该Clang静态分析器和clang-tidy工具,代码自动发现错误,而且是那种可以使用clang前端的库来解析C / C ++代码生成工具的很好的例子。
- 该LLDB项目建立在由LLVM和Clang提供了极大的机调试库。它使用Clang AST和表达式解析器,LLVM JIT,LLVM反汇编程序等,从而提供了一种“可行”的体验。在加载符号时,它还比GDB速度更快,存储效率更高。
- 在libc中++和libc ++ ABI项目提供了一个标准的conformant和高性能执行的C ++标准库,包括C ++ 11和C ++ 14的全力支持。
- 当目标没有简短的本机指令序列来实现核心IR操作时,compiler-rt项目将对底层代码生成器支持示例(例如__fixunsdfdi)和其他调用进行高度优化的实现。它还为动态测试工具(例如AddressSanitizer,ThreadSanitizer,MemorySanitizer和DataFlowSanitizer)提供了运行时runtime库的实现 。
- 该MLIR子项目是一种新的方法来构建可重用和可扩展的编译架构。MLIR旨在解决软件碎片,改善异构硬件的编译,显着降低构建特定于域的编译器的成本以及帮助将现有编译器连接在一起的问题。
- 该OpenMP的子项目提供的OpenMP与在clang的OpenMP实现使用运行时间。
- 该polly工程实施缓存局部性优化,使用多面体模型套件以及自动并行和矢量化。
- 该libclc项目旨在实现的OpenCL标准库。
10. 该klee项目实现了“象征性的虚拟机”,它采用一个定理证明,试图评估在努力发现问题和证明的功能性,通过程序中的所有动态路径。Klee的一个主要功能是,它在检测到错误时可以生成一个测试用例。
11. 该LLD项目是一个新的链接。这是系统链接程序的直接替代,并且运行速度更快。
除了LLVM的官方子项目之外,还有许多其他项目将LLVM的组件用于各种任务。通过这些外部项目,可以使用LLVM来编译Ruby,Python,Haskell,Rust,D,PHP,Pure,Lua和许多其它语言。LLVM的主要优势在于它的多功能性,灵活性和可重用性,这就是为什么它被用于各种各样的任务:从轻量级JIT编译嵌入式语言(如Lua)到为大型超级电脑编译Fortran代码的原因。
LLVM拥有广泛而友好的社区,这些社区对构建出色的低级工具感兴趣。如果有兴趣参与其中,那么最好的方法是浏览LLVM博客并注册LLVM Developer邮件列表。有关如何发送补丁程序,获取提交访问权限以及版权和许可主题的信息,请参阅《 LLVM开发人员政策》。
LLVM编译器架构的更多相关文章
- 编译器架构Compiler Architecture(下)
编译器架构Compiler Architecture(下) Combining Scanning and Parsing 实际上没有必要将扫描(词法分析/标记化)与解析(语法分析/树生成)分开.基于P ...
- 编译器架构Compiler Architecture(上)
编译器架构Compiler Architecture(上) 编译器是程序,通常是非常大的程序.它们几乎都有一个基于翻译分析综合模型的结构. CONTENTS Overview • Compiler C ...
- LLVM编译器
LLVM 1. 说说 LLVM(Low Level Virtual Machine)到底是什么吧 先说编译器:编译器是把程序员的代码翻译成机器可以理解的语言的工具: 再谈 LLVM:一个模块化和可重用 ...
- cmake构建时指定编译器架构(x86 or x64)
vs2015 x64编译器为例,cmake命令如下: cmake -G "Visual Studio 14 Win64" path\to\source\dir 去掉Win64,就是 ...
- LLVM与Clang的概述及关系
LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time).链接时间(link-time).运行时间(run-time ...
- LLVM和clang
LLVM编译器架构 LLVM项目是一套工具的集合,它包括模块化.可复用的编译器及一些列工具链技术. LLVM最开始是Low Level Virtual Machine的简称,但现在它并不是传统意义上的 ...
- 转:LLVM与Clang的概述及关系
转:http://www.cnblogs.com/saintlas/p/5738739.html LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言 ...
- iOS开发系列-LLVM、Clang
LLVM LLVM计划启动于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持开展. 我们可以认为LLVM是一个完整 ...
- 深入理解iOS开发中的BitCode功能
前言 做iOS开发的朋友们都知道,目前最新的Xcode7,新建项目默认就打开了bitcode设置.而且大部分开发者都被这个突如其来的bitcode功能给坑过导致项目编译失败,而这些因为bitcode而 ...
随机推荐
- hdu1261 JAVA
题意: 一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA".给定若干字母和它们相应的个数,计算一共可以组成多少个不同的 ...
- 安全之路 —— 无DLL文件实现远程进程注入
简介 在之前的章节中,笔者曾介绍过有关于远程线程注入的知识,将后门.dll文件注入explorer.exe中实现绕过防火墙反弹后门.但一个.exe文件总要在注入时捎上一个.dll文件着实是怪麻烦的,那 ...
- hdu2604 矩阵快速幂
题意: 给你n个人,排成一个长度是n的队伍,人只有两类f,m,问可以有多少种排法使度列中不出现fff,fmf这样的子串.思路: 一开始暴力,结果超时了,其实这个题目要是能找到类似于 ...
- Learning Memory-guided Normality代码学习笔记
Learning Memory-guided Normality代码学习笔记 记忆模块核心 Memory部分的核心在于以下定义Memory类的部分. class Memory(nn.Module): ...
- Day003 类型转换
类型转换 由于java是强类型语言,所以要进行有些运算的时候,需要用到类型转换 低------------------------------------------------------> ...
- Root mapping definition has unsupported parameters
使用ElasticSearch创建映射报错 Root mapping definition has unsupported parameters 原因 使用的ES版本为7.2.0,不再支持创建指定类型 ...
- FTP主动模式(PORT)与被动模式(PASV)
待完善 参考文章0 参考文章1
- 分布式事务与Seate框架(2)——Seata实践
前言 在上一篇博文(分布式事务与Seate框架(1)--分布式事务理论)中了解了足够的分布式事务的理论知识后,到了实践部分,在工作中虽然用到了Seata,但是自己却并没有完全实践过,所以自己私下花点时 ...
- laravel 伪静态实现
Route::get('show{id}.html',['as'=>'products.detail','uses'=>'companyController@show']) ->wh ...
- calico NetworkPolicy on kubernetes
什么是网络策略 在Kubernetes平台中,要实现零信任网络的安全架构,Calico与istio是在Kubernetes集群中构建零信任网络必不可少的组件. 而建立和维护整个集群中的"零信 ...