美文网首页
LLVM 初始 ①

LLVM 初始 ①

作者: Aliv丶Zz | 来源:发表于2020-07-20 15:29 被阅读0次

什么是LLVM

  • 官网:https://llvm.org/
  • The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
    LLVM项目是一个模块化的、可重用的编译器和工具链技术的集合
  • 创始人: Chris Lattner ,Swift之父
  • 有些文章把LLVM当做 Low Level Virtual Machine(低级虚拟机)的缩写简称,官方描述如下:
    The name "LLVM" itself is not an acronym; it is the full name of the project.
    “LLVM”本身不是首字母缩略词;它是项目的全名

常见编译器

  • GCC

GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix及苹果电脑 Mac OS X 操作系统的标准编译器。
GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。

  • LLVM

LLVM是Low Level Virtual Machine的简称。这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。可以作为多种语言编译器的后台来使用。

  • Clang

Clang是一个C++编写的基于LLVM、发布于LLVM BSD许可证下的C/C++/Object-C/Object-C++ 编译器。

GCC,LLVM,Clang编译器对比

LLVM介绍

  • LLVM是编译器的工具链的集合,Clang是使用LLVM的编译器,Clang必须调用连接器LLDB来产生可执行文件。
  • LLVM是一个优秀的编译器框架,它也采用经典的三段式设计,
    分为 frontEnd(前端)optimizer(优化器)backend(后端) 三层架构。
    • 前端
      可以使用不同的编译工具对代码文件做词法分析、语法分析、语义分析,然后将分析好的代码转换成LLVM的中间代码IR(intermediate representation);

    • 优化器
      只对中间表示IR操作,通过一系列的Pass对IR做优化

    • 后端
      负责将优化好的IR解释成对应平台的机器码

1.png

LLVM的优点

  • 中间表示IR代码编写良好,而且不同的前端语言最终都转换成统一的中间代码LLVM IR(LLVM Intermediate Representation)

  • 如果需要支持一种新的变成语言,那么只需要实现一个新的前端

  • 如果需要支持一种新的硬件设备,那么只需要实现一个新的后端

  • 优化阶段是一个通用的阶段,它只针对统一的LLVM IR,不论是支持新的编程语言,还是支持新的硬件设备,都不需要对优化阶段做修改

  • LLVM现在被座位实现何种静态和运行时编译语言的通用基础结构(GCC家族、Java、.NET、Python、Ruby、Scheme、Haskell、D等)

  • 相比之下,GCC的前端和后台没分的太开,前端后端耦合在一起,所以GCC为了支持一门新的语言,或者为了支持一个新的目标平台,就变的特别困难

例如:对于图1:
LLVM: 需要 3个编译器前端  、3个编译器后端 
GCC: 因为耦合的原因需要
             C-X86、C-PowerPC、C-ARM
             Fortran-X86、Fortran-PowerPC、Fortran-ARM
             Haskell-X86、Haskell-PowerPC、Haskell-ARM
  • LLVM IR 是LLVM的中间表示,优化器就是对IR进行操作的,具体的优化操作由一些列的Pass来完成,当前端生成初级IR后,Pass会依次对IR进行处理,最终生成后端可用的IR。下图可以说明这个过程:
2.png
  • 传统编译器比如 gcc 会将编译的整个过程揉在一块,但是 LLVM 采用全新的架构,

Clang介绍

  • Clang是LLVM项目的一个子项目
  • 基于LLVM架构的C/C++/Object-C编译器前端
  • 官网 http://clang.llvm.org/

相比于GCC,Clang具有如下优点

  • 编译速度块:在某平台上,Clang的编译速度显著的快过GCC(Debug模式下编译OC速度比GCC快3倍)

  • 占用内存小:Clang生成的AST所占用的内存是GCC的五分之一左右

  • 模块化设计:Clang采用基于库的模块化设计,易于IDE集成及其他用途的重用

  • 诊断信息可读性强:在编译过程中,Clang创建并保留了大量纤细的元数据(metadata),有利于调试和错误信息更加友善

  • 设计清晰简单,易于理解,扩展性强

Clang 与 LLVM

  • 广义的LLVM ----------- 整个LLVM架构
  • 狭义的LLVM ----------- LLVM后端(代码优化、目标代码生成)
3.png
LLVM与Clang及其关系: https://blog.csdn.net/xhhjin/article/details/81164076

相关文章

  • LLVM 初始 ①

    什么是LLVM 官网:https://llvm.org/ The LLVM Project is a collec...

  • LLVM

    LLVM 什么是LLVM? 官网:https://llvm.org/ The LLVM Project is a ...

  • iOS_LLVM

    LLVM 官网:https://llvm.org/[https://llvm.org/] The LLVM Pro...

  • iOS 逆向 day 18 GCC LLVM Clang

    一、LLVM 1. 什么是 LLVM 官网:https://llvm.org/ The LLVM Project ...

  • 浅谈LLVM

    何为LLVM 在LLVM的官网(https://llvm.org/[https://llvm.org/])中写到T...

  • iOS逆向-day10:LLVM 编译器

    一、LLVM的简单介绍 1.1、什么是LLVM官网:https://llvm.org/LLVM官网解释:The L...

  • 初识LLVM&Clang-开发Xcode插件

    初识LLVM&Clang-开发Xcode插件 LLVM Xcode现在使用的编译器就是LLVM。LLVM比以前使用...

  • LLVM 工具

    llvm-dis llvm-dis 是一个反汇编工具,通过 LLVM 字节码文件(.bc)得到 LLVM 汇编文件...

  • LLVM(1)LLVM了解

    一、什么是LLVM 1、官网:https://llvm.org/The LLVM Project is a col...

  • llvm 编译

    1,下载llvm 源码git clone https://git.llvm.org/git/llvm.git/2,...

网友评论

      本文标题:LLVM 初始 ①

      本文链接:https://www.haomeiwen.com/subject/wxhghktx.html