LLVM 学习

2020-04-24  本文已影响0人  化二缺

关于LLVM

传统编译器

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

LLVM 架构

image.png

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
上一篇 下一篇

猜你喜欢

热点阅读