美文网首页
LLVM编译器

LLVM编译器

作者: HChase | 来源:发表于2019-08-12 16:54 被阅读0次

一、LLVM编译器组成

LLVM项目是模块化、可重用的编译器以及工具链技术的集合,由前端(Fronttend),优化器(Optimizer),后端(Backend);

作用:

  • 前端(Fronttend): 词法分析,语法分析,语义分析,生成中间代码;
  • 优化器(Optimizer):中间代码优化;
  • 后端(Backend):生成机器码(比如生成Mach-o);


二、clang

  • llvm项目的一个子项目;
  • 基于llvm架构的c/c++/objective-c编码器前端;

三、lang 与 llvm的关系


clang 作为llvm编译器的前端,负责对源代码词法分析语法分析语义分析生成中间代码等功能,只是编译器的一部分。

四、oc源文件的编译过程

编写一个oc文件,取出.m文件,使用命令行 clang -ccc-print-phases xxx.m , 就可以看到文件的编译过程;


0:导入源文件main.m的oc文件;
1:preprocessor 预编译过程,生成对于cpp输出文件;
2:compiler 编译。通过使用ir (中间代码LLVM Intermediate Representation (LLVM IR)) 编译;
3:后端部分,生成对应的汇编代码;
4:汇编代码生成目标文件;
5:linker;
6:生成对于的二进制文件;


详细步骤:

  1. 查看preprocessor(预处理)的结果:$ clang -E main.m


  2. 词法分析,生成Token: $ clang -fmodules -E -Xclang -dump-tokens main.m


  3. 语法分析,生成语法树(AST,Abstract Syntax Tree): $ clang -fmodules -fsyntax-only -Xclang -ast-dump main.m

main.m 内容:

void test(int a, int b) {
    int c = a + b - 3;
}
  1. LLVM IR中间代码
    LLVM IR有3种表示形式 :
  • text:便于阅读的文本格式,类似于汇编语言,拓展名.ll, $ clang -S -emit-llvm main.m

  • memory:内存格式

  • bitcode:二进制格式,拓展名.bc, $ clang -c -emit-llvm main.m


  • 全局标识符以@开头,局部标识符以%开头

  • alloca,在当前函数栈帧中分配内存

  • i32,32bit,4个字节的意思

  • align,内存对齐

  • store,写入数据

  • load,读取数据

相关文章

  • 二十五、LLVM

    什么是编译器 LLVM概述 LLVM案例体验 LLVM源码 & 编译流程 1 什么是编译器? 1.1 Python...

  • oc- APP编译过程以及启动过程

    简单介绍 - LLVM编译器 苹果使用的是LLVM编译器,LLVM架构设计的非常好,主要分为前端,中间,后端 Fr...

  • iOS LLVM编译流程

    1. LLVM概念 1.1 编译器 LLVM与编译器息息相关,究竟什么是编译器呢?带着疑问往下看吧。编译器就是将一...

  • 初识LLVM&Clang-开发Xcode插件

    初识LLVM&Clang-开发Xcode插件 LLVM Xcode现在使用的编译器就是LLVM。LLVM比以前使用...

  • iOS LLVM-Clang 浅谈

    LLVM概念 LLVM官网: https://llvm.org/ 编译器架构图:image Frontend:前端...

  • iOS llvm-1

    LLVM 传统编译器 LLVM区别于传统的编译器,它前端和后端分开了 LLVM流程1.所有的代码会经过[词法分析,...

  • LLVM 之 初探

    一、编译器概述 编译器就是说将高级语言 翻译 为低级语言的程序。 二、LLVM概述   LLVM 是 构架编译器 ...

  • Bitcode功能

    LLVM是目前苹果采用的编译器工具链,Bitcode是LLVM编译器的中间代码的一种编码,LLVM的前端可以理解为...

  • 30.iOS底层学习之LLVM初了解

    本篇提纲1、LLVM简介2、编译器的一些基础知识 1.LLVM简介 基本介绍 LLVM是架构编译器的框架系统,以c...

  • LLVM架构-编译原理

    什么是LLVM LLVM项目是模块化、可重用的编译器以及工具链技术的集合 The LLVM Project is ...

网友评论

      本文标题:LLVM编译器

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