美文网首页
LLVM部分概念

LLVM部分概念

作者: 分流替躺欧阳克 | 来源:发表于2019-06-23 13:03 被阅读0次

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

    传统编译器架构


    传统编译器架构

    LLVM架构


    LLVM架构

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

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


    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部分概念

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