llvm IR 语法小例子

这篇博客介绍了LLVM IR的语法,以一个示例程序为切入点,详细解释了IR代码中的存储、比较、分支等操作。通过分析函数e和主函数的IR代码,展示了如何在LLVM IR中处理变量、条件判断和函数调用,帮助读者理解LLVM IR的中间语言特性。

 

LLVM IR 语法

2018.12.24

注:去年写的,原来是有图的,不知道何时竟然图都没了,翻了好久才找到这些图。

以下图程序为例:

在klee运行之后,每个文件夹中都会有一个assembly.ll这是llvm IR的中间语言代码。Klee中的指令执行,都是根据这个来实现的。下图为IR代码:

首先对于e这个函数:

i32 表示该类型所占位数。(bit),align对齐。

这里面创建了两个局部变量%2,%3(@全局变量),具体干什么的下面分析。

Store 写入,把函数定义中#0中的值(就是int x),写入%3中。利用load将%3的值读出到%4中。所以上面的%3是为了int x创建的内存。

03-12
### 关于 LLVM 中间表示 (IR) LLVM Intermediate Representation (IR) 是一种低级的、类似于汇编的语言,用于描述程序逻辑。这种中间层抽象使得优化器可以独立于源语言执行各种分析和转换操作[^1]。 #### 主要特点 - **平台无关性**:LLVM IR 设计成与目标架构无关的形式,在最终阶段才被翻译为目标机器码。 - **类型安全**:具备静态类型的特性,有助于提高代码的安全性和效率。 - **简洁表达力强**:尽管语法简单,却能有效地捕捉高级编程概念并支持复杂的变换过程。 #### 文档资源 对于希望深入了解 LLVM IR 的开发者来说,《LLVM Programmer’s Manual》提供了有关整个 LLVM 源码库布局的基础介绍以及重要的类和 API 解说,这其中包括了对 IR 结构的理解和支持工具的使用方法。 另外,《Implementing LLVM Passes Tutorial》不仅涵盖了如何创建自定义 pass 的基础知识,还特别强调了针对 LLVM 中间端(即 IR 层面)的操作指南,非常适合初学者学习实现自己的 pass 或改进现有的功能[^2]。 最后,《Overview of LLVM Pass-Based Architecture》一文中也包含了关于 IR 分析和转换的具体实例说明,比如支配树(Dominator Trees) 和目标转换信息(Target Transform Information),这些都是构建高效编译流程不可或缺的知识点[^3]。 ```llvm define i32 @add(i32 %a, i32 %b) { entry: %sum = add nsw i32 %a, %b ret i32 %sum } ``` 上述例子展示了简单的加法函数在 LLVM IR 下的表现形式。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值