LLVM部分概念

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按自己的意愿优化代码


代码转机器码过程
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • http://www.starming.com/index.php?v=index&view=107 http:/...
    111浪子111阅读 3,315评论 0赞 11
  • 什么是LLVM LLVM项目是模块化、可重用的编译器以及工具链技术的集合。 美国计算机协会 (ACM) 将其201...
    Coder_LRT阅读 2,625评论 0赞 1
  • 在 iOS 开发的过程中,Xcode 为我们提供了非常完善的编译能力,正常情况下,我们只需要 Command + ...
    CoderLF阅读 13,300评论 0赞 17
  • iOS app的编译过程 在 iOS 开发的过程中,Xcode 为我们提供了非常完善的编译能力,正常情况下,我们只...
    帽子和五朵玫瑰阅读 3,030评论 0赞 17
  • 一、什么是LLVM 1、官网:https://llvm.org/The LLVM Project is a col...
    迷心迷阅读 3,254评论 0赞 2

友情链接更多精彩内容