LLVM部分概念

LLVM是模块化,可重用的编译器以及工具链技术的集合,用它可以给Xcode开发插件,开发语言。

传统编译器架构


LLVM部分概念_第1张图片
传统编译器架构

LLVM架构


LLVM部分概念_第2张图片
LLVM架构

相比于传统架构LLVM的耦合度更低,不同语言只要实现一个新的编译器前端。
要支持一个新[图片上传中...(屏幕快照 2019-06-23 12.34.25.png-ac921b-1561264477034-0)]
的硬件,只需要实现一个新的后端。都不需要对中间优化阶段做修改。

Clang:LLVM的子项目,基于LLVM架构的C/C++/Objective-C编译器前端


LLVM部分概念_第3张图片
Clang和LLVM关系图

查看编译过程命令clang -ccc-print-phases main.m

  1. preprocessor(预处理器)替换头文件宏定义, 终端查看命令(clang -E main.m)
  2. 编译编译成IR中间代码
    • 词法分析:将代码生成一个个token(clang -fmodules -E -Xclang -dump-tokens main.m)
    • 语法分析:生成语法树(AST), 查看命令(clang -fmodules -fsyntax-only -Xclang -ast-dump main.m)
    • 生成中间代码:中间代码有三种表现形式(txt,内存格式,bitCode二进制格式)
  3. 中间代码优化(开发者可以按自己的意愿优化中间代码)
  4. 后端生成适合某个架构的机器码

我们写的代码转成机器码的过程,开发者可以自己添加Pass按自己的意愿优化代码


LLVM部分概念_第4张图片
代码转机器码过程

你可能感兴趣的:(LLVM部分概念)