1、终端中查看代码的整个编译过程
输入以下命令:
clang -ccc-print-phases 类名
0: input, "Person.m", objective-c
1: preprocessor, {0}, objective-c-cpp-output 预处理
2: compiler, {1}, ir 编译器前端生成IR中间代码
3: backend, {2}, assembler 编译器后端生成汇编代码
4: assembler, {3}, object 生成目标代码
5: linker, {4}, image 链接一些动态库
6: bind-arch, "x86_64", {5}, image 生成适合某个架构的代码
2、查看预处理
输入以下命令:
clang -E 类名
3、查看词法分析
输入以下命令:
clang -fmodules -E -Xclang -dump-tokens main.m
4、查看生成的语法树-AST
语法分析生成语法树
输入以下命令:
clang -fmodules -fsyntax-only -Xclang -ast-dump main.m
5、LLVM IR(中间代码)
LLVM IR有三种表现形式:
text:便于阅读的文本格式,类似于汇编语言,拓展名为.II。clang -S -emit-llvm main.m
memory:内存格式
bitcode:二进制格式,拓展名为.bc。 clang -c -emit-llvm main.m
6、IR基本语法:
注释以分号开头;
全局标识符以@开头,局部标识符以%开头
alloca:在当前函数栈帧中分配内存
align:对齐
store:写入数据
load:读取数据
网友评论