美文网首页
LLVM 学习

LLVM 学习

作者: 化二缺 | 来源:发表于2020-04-24 11:47 被阅读0次

关于LLVM

  • 官网地址 https://llvm.org/
  • LLVM 项目是模块化,可重用的编译器以及工具链技术的集合
  • 创始人 Chris Lattner ,也是 Swift 之父
  • LLVM 不是缩写(acronym),是项目全名

传统编译器

  • GCC
  • LLVM
  • Clang
image.png
  • Frontend: 前端
  • 词法分析 , 语法分析 ,语义分析 生成中间代码
  • Optimizer :优化器
  • 中间代码优化
  • Backend 后端
  • 生成机器代码

LLVM 架构

image.png
  • 不同的前端后端使用统一的中间代码 LLVM Intermediate Representation(LLVM IR)
  • 如果需要支持一种新的编程语言,那么只需要实现一个新的前端
  • 如果需要支持一个新的硬件设备,那么只需要实现一个新的后端
  • 优化阶段是一个通用的阶段,他针对的是统一的LLVM IR ,不论是支持新的编程,还是支持新的硬件设备,都不需要对优化阶段进行修改
  • 想比之下,GCC 的前端和后端是耦合在一起的,想要支持一门新的语言是要花费特别多精力的,特别困难。
  • LLVM 现在被作为实现各种静态和运行时编译语言的通用基础结构(GCC家族,Java , .Net, Python, Ruby, Scheme, Haskell , D等)

Clang

什么是Clang
Clang相对GCC 的优点
  • 编译速度快 : OC 调试比GCC 快3倍
  • 占用内存小 :Clang 生成的AST 所占内存是GCC 的五分之一
  • 模块化设计 : Clang采用基于库的模块化设计,易于IDE 集成和其他用途的重用
  • 诊断信息可读性强 :Clang在编译过程中,保存了大量详细的元数据,有利于调试
  • 设计清晰简单,容易理解,易于扩展增强

Clang 和 LLVM 的关系

image.png

OC源文件的编译过程

$clang -ccc-print-phases main.m

命令行查看编译的过程

0: input,"main.m",objective-c
1: preprocessor ,{0},objective-c-cpp-output
2: complier,{1},ir
3: backend,{2},assembler
4: assembler,{3},object
5: linker,{4},image
6:bind-arch,"x86_64",{5},image

词法分析

$clang  -fmodules -E -Xclang -dump-tokens main.m

生成语法树 AST (iOS 用的是自下向上的语法树)

$clang  -fmodules -fsyntax-only-Xclang -ast-dump main.m

IR

IR有三种形式

  • text:便于阅读的文本格式,类似于汇编,拓展名.ll
    $clang -S -emit-llvm main.m
  • memory:内存格式
  • bitcode:二进制格式,拓展名.bc
    $clang -c -emit-llvm main.m
image.png text格式中间代码.png IR基本语法.png

LLVM 开发插件

源码编译.png
  • Clang 插件开发


    image.png
  • Pass 开发


    image.png
  • 开发一个新的编程语言


    image.png

相关文章

  • 【LLVM】LLVM的安装与配置

    LLVM学习入门 入门学习LLVM开始,回顾一下之前的知识。首先,LLVM由三个部分组成, 第一部分是LLVM组件...

  • LLVM 学习

    关于LLVM 官网地址 https://llvm.org/ LLVM 项目是模块化,可重用的编译器以及工具链技术的...

  • LLVM学习

    以下资料是在腾讯课堂上面的视频学习的记录目前熟知的编译器有 GCC LLVM Clang 1命令行查看程序编译...

  • 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学习笔记

    1.llvm 学习笔记2.Clang 之路——编写我的第一个 Clang 插件:检测 ObjC 中的类声明规范

  • llvm学习资料

    https://people.cs.nctu.edu.tw/~chenwj/dokuwiki/doku.php?i...

  • llvm学习教程

    https://github.com/haidragon/study_obscure study_obscure ...

  • 浅谈LLVM

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

网友评论

      本文标题:LLVM 学习

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