LLVM浅析

3 篇文章 0 订阅

LLVM的探索

编译器的作用就是将源码编译成可以运行的程序。
终端按顺下敲入
vim hello.py
python hello.py

vim hello.c
clang hello.c
./a.out
vim main.m

#imclude<stdio.h>
int main(int argc, char *argv[]){
	printf("hello word!");
};

LLVM概述

请添加图片描述
请添加图片描述
从写代码->LLVM 的动态流程 ->APP运行:
源代码- 预编译 - 编译 - 链接.o - 可执行文件(静态连接和动态连接)- 可执行文件 - dyld - libsystem

Frontend 编译器前端

在这里插入图片描述

Optimizer 优化器

优化器负责进行各种优化。改善代码的运行时间,例如消除多余的计算等

backend 后端/ CodeGenerator代码生成器

将代码映射到目标的指令集。声称机器语言,并且进行机器相关的代码优化。

iOS的编译器架构

Objective C/C/C++使用的编译器前端是Clang,Swift是Swift,后端都是LLVM
在这里插入图片描述
请添加图片描述

编译流程

通过命令可以打印源码的编译阶段

clang -ccc-print-phases main.m

在这里插入图片描述
请添加图片描述
在这里插入图片描述
clang -fmodules -fsyntax-only -Xclang -dump-tokens main.m
会把代码切成一段段的如下:
请添加图片描述
在这里插入图片描述

clang -s -fobjc-arc -emit-llvm main.m

生成的main.II如图 :
请添加图片描述
请添加图片描述

bitCode

xcode7 以后开启bitCode苹果会做进一步的优化。生成.bc的中间代码。
我们通过优化后的IR代码生成.bc代码

clang -emit-llvm -c main.ll -o main.bc 

生成汇编代码

我们通过最终的.bc或者.ll代码生成汇编代码

clang -S -fobjc-arc main.bc -o main.s 

clang -S -fobjc-arc main.ll -o main.s 

生成的汇编代码也可以进行优化

clang -Os -S -fobjc-arc main.m -o main.s

生成目标文件(汇编器)

目标文件的生成,是汇编器以汇编代码作为输入,将汇编代码转换为机器代码,最后输出目标文件。

clang -fmodules -main.s -o main.o

在这里插入图片描述
生成可执行文件(连接)
连接器把编译产生的.o文件和(.dylib.a)文件,生成一个mach-o文件。

clang main.o -o main

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值