Runtime系列:LLVM的中间代码(IR)【07】

简介: Runtime系列:LLVM的中间代码(IR)

Objective-C在变为机器代码之前,会被LLVM编译器转换为中间代码(Intermediate Representation)


可以使用以下命令行指令生成中间代码:


clang -emit-llvm -S main.m

常用语法简介:


@ - 全局变量

% - 局部变量

alloca - 在当前执行的函数的堆栈帧中分配内存,当该函数返回到其调用者时,将自动释放内存

i32 - 32位4字节的整数

align - 对齐

load - 读出

store - 写入

icmp - 两个整数值比较,返回布尔

br - 选择分支,根据条件来转向label,不根据条件跳转的话类似 goto

label - 代码标签

call - 调用函数


具体参考官方文档:https://llvm.org/docs/LangRef.html


相关文章
|
6月前
|
编译器 PHP Kotlin
深入浅出 Compose Compiler(3) IR & IrGenerationExtension
深入浅出 Compose Compiler(3) IR & IrGenerationExtension
133 0
|
编译器 Go 开发工具
常见问题之Golang——cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%错误
本文主要是对我日常在使用golang时遇到的一些问题与解决方式进行的汇总,在此提供给大家便于排查一些遇到的问题,其中有更好的解决方案可在评论区留言。
1175 0
常见问题之Golang——cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%错误
|
3月前
|
iOS开发 Perl
解决pod install报错:ffi is an incompatible architecture
解决pod install报错:ffi is an incompatible architecture
102 2
|
3月前
|
Dart C语言 Windows
Dart ffi 使用问题之要生成plugin_ffi_sample_bindings_generated.dart文件该如何操作
Dart ffi 使用问题之要生成plugin_ffi_sample_bindings_generated.dart文件该如何操作
|
3月前
|
Java
cxf 动态调用 WebService No compiler detected, make sure you are running on top of a JDK instead of a JRE
cxf 动态调用 WebService No compiler detected, make sure you are running on top of a JDK instead of a JRE
58 0
|
C++
编译OpenJDK11:fixpath Unknown argument: -nologo
编译OpenJDK11:fixpath Unknown argument: -nologo
118 0
MAC编译OpenJDK8:clang: error: unknown argument: ‘-fpch-deps‘
MAC编译OpenJDK8:clang: error: unknown argument: ‘-fpch-deps‘
89 0
MAC编译OpenJDK8:error: invalid argument ‘-std=gnu++98‘ not allowed with ‘C‘
MAC编译OpenJDK8:error: invalid argument ‘-std=gnu++98‘ not allowed with ‘C‘
105 0
MAC编译OpenJDK8:error: ‘&&‘ within ‘||‘ [-Werror,-Wlogical-op-parentheses]
MAC编译OpenJDK8:error: ‘&&‘ within ‘||‘ [-Werror,-Wlogical-op-parentheses]
98 0
|
Linux
编译OpenJDK8:specified bound depends on the length of the source argument
编译OpenJDK8:specified bound depends on the length of the source argument
180 0