LLVM编译器架构

LLVM概述

LLVM项目是模块化和可重用的编译器及工具链技术的集合。尽管名称如此,LLVM与传统虚拟机关系不大。名称“ LLVM”本身不是缩写。它是项目的全名。

LLVM最初是伊利诺伊大学的一个研究项目,目的是提供一种基于SSA的现代编译策略,该策略能够支持任意编程语言的静态和动态编译。从那时起,LLVM逐渐发展成为一个由多个子项目组成的总体项目,其中许多子项目已用于各种商业和开源项目的产品中,并广泛用于学术研究。LLVM项目中的代码已根据“具有LLVM例外的Apache 2.0许可”获得许可

LLVM的主要子项目是:

  1. LLVM内核库提供一个现代化的源代码与目标无关的优化,随着代码生成支持许多流行的CPU(以及一些不太常见的!),这些包都是围绕着建立以及指定被称为LLVM中间表示的代码表示(“ LLVM IR”)。LLVM核心库有充分的文档记录,特别容易发明自己的语言(或移植现有的编译器)以将LLVM用作优化器和代码生成器
  2. Clang是“ LLVM本机” C / C ++ / Objective-C编译器,旨在提供惊人的快速编译,极其有用的错误和警告消息,并为构建出色的源代码级工具提供平台。该Clang静态分析器clang-tidy工具,代码自动发现错误,而且是那种可以使用clang前端的库来解析C / C ++代码生成工具的很好的例子。
  3. LLDB项目建立在由LLVM和Clang提供了极大的机调试库。它使用Clang AST和表达式解析器,LLVM JIT,LLVM反汇编程序等,从而提供了一种“可行”的体验。在加载符号时,它还比GDB速度更快,存储效率更高。
  4. libc中++libc ++ ABI项目提供了一个标准的conformant和高性能执行的C ++标准库,包括C ++ 11和C ++ 14的全力支持。
  5. 当目标没有简短的本机指令序列来实现核心IR操作时,compiler-rt项目将对底层代码生成器支持示例(例如__fixunsdfdi)和其他调用进行高度优化的实现。它还为动态测试工具(例如AddressSanitizerThreadSanitizerMemorySanitizerDataFlowSanitizer)提供了运行时runtime库的实现 。
  6. MLIR子项目是一种新的方法来构建可重用和可扩展的编译架构。MLIR旨在解决软件碎片,改善异构硬件的编译,显着降低构建特定于域的编译器的成本以及帮助将现有编译器连接在一起的问题。
  7. OpenMP的子项目提供的OpenMP与在clang的OpenMP实现使用运行时间。
  8. polly工程实施缓存局部性优化,使用多面体模型套件以及自动并行和矢量化。
  9. 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编译器架构的更多相关文章

  1. 编译器架构Compiler Architecture(下)

    编译器架构Compiler Architecture(下) Combining Scanning and Parsing 实际上没有必要将扫描(词法分析/标记化)与解析(语法分析/树生成)分开.基于P ...

  2. 编译器架构Compiler Architecture(上)

    编译器架构Compiler Architecture(上) 编译器是程序,通常是非常大的程序.它们几乎都有一个基于翻译分析综合模型的结构. CONTENTS Overview • Compiler C ...

  3. LLVM编译器

    LLVM 1. 说说 LLVM(Low Level Virtual Machine)到底是什么吧 先说编译器:编译器是把程序员的代码翻译成机器可以理解的语言的工具: 再谈 LLVM:一个模块化和可重用 ...

  4. cmake构建时指定编译器架构(x86 or x64)

    vs2015 x64编译器为例,cmake命令如下: cmake -G "Visual Studio 14 Win64" path\to\source\dir 去掉Win64,就是 ...

  5. LLVM与Clang的概述及关系

    LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time).链接时间(link-time).运行时间(run-time ...

  6. LLVM和clang

    LLVM编译器架构 LLVM项目是一套工具的集合,它包括模块化.可复用的编译器及一些列工具链技术. LLVM最开始是Low Level Virtual Machine的简称,但现在它并不是传统意义上的 ...

  7. 转:LLVM与Clang的概述及关系

    转:http://www.cnblogs.com/saintlas/p/5738739.html      LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言 ...

  8. iOS开发系列-LLVM、Clang

    LLVM LLVM计划启动于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持开展. 我们可以认为LLVM是一个完整 ...

  9. 深入理解iOS开发中的BitCode功能

    前言 做iOS开发的朋友们都知道,目前最新的Xcode7,新建项目默认就打开了bitcode设置.而且大部分开发者都被这个突如其来的bitcode功能给坑过导致项目编译失败,而这些因为bitcode而 ...

随机推荐

  1. 路由器逆向分析------在QEMU MIPS虚拟机上运行MIPS程序(ssh方式)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69652258 在QEMU MIPS虚拟机上运行MIPS程序--SSH方式 有关在u ...

  2. android so加载

    本文分析so加载的步骤,其实在之前dalvik浅析二中也有提及,但那重点关注的是jni.android中so库的加载,代码如下: loadLibrary("nanosleep"); ...

  3. 分布式事务与Seate框架(1)——分布式事务理论

    前言 虽然在实际工作中,由于公司与项目规模限制,实际上所谓的微服务分布式事务都不会涉及,更别提单独部署构建Seata集群.但是作为需要不断向前看的我,还是有必要记录下相关的分布式事务理论与Seate框 ...

  4. idea下不能运行main 函数

    解决办法: 需要修改.idea/workspace.xml 在<component name="PropertiesComponent">里添加<property ...

  5. python爬虫——《瓜子网》的广州二手车市场信息

    由于多线程爬取数据比单线程的效率要高,尤其对于爬取数据量大的情况,效果更好,所以这次采用多线程进行爬取.具体代码和流程如下: import math import re from concurrent ...

  6. 白日梦的MySQL专题(第33篇):各种登陆MySQL的骚操作

    阅读原文 系列文章公众号首发,点击阅读原文 前置知识 我们想登陆到mysql中前提是肯定需要一个用户名和密码:比如 mysql -uroot -proot 在mysql中用户的信息会存放在 mysql ...

  7. [java] IDEA

    快捷键 shift+shift:搜索 ctrl+d:复制行 ctrl+x:删除行 ctrl+p:查看方法参数 ctrl+o:查看类方法 ctrl+h:查看类结构 ctrl+i:实现接口方法 ctrl+ ...

  8. [tools] 工具

    代码编辑 notepad++ 文档对比 Beyond Compare 代码阅读 source insight 代码分析 Scitools 下载 http://www.cr173.com/soft/29 ...

  9. testlink安装(mac os)

    安装依赖:xampp.mysql.testlink 一.xampp安装(参考:https://blog.csdn.net/it_cgq/article/details/79430511) 1.下载xa ...

  10. Linux_源码安装包管理理论概述

    一.源码包基本概述 1️⃣:源码包的编译用到了linux系统里的编译器,通常源码包都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言 2️⃣:Linux上的C语言编译器叫做gcc,利用 ...