llvm IR 语法小例子
来源:互联网 发布:淘宝流量兑换在哪里 编辑:程序博客网 时间:2024/05/22 08:15
LLVM IR 语法
以下图程序为例:
在klee运行之后,每个文件夹中都会有一个assembly.ll这是llvm IR的中间语言代码。Klee中的指令执行,都是根据这个来实现的。下图为IR代码:
首先对于e这个函数:
i32 表示该类型所占位数。(bit),align对齐。
这里面创建了两个局部变量%2,%3(@全局变量),具体干什么的下面分析。
Store 写入,把函数定义中#0中的值(就是int x),写入%3中。利用load将%3的值读出到%4中。所以上面的%3是为了int x创建的内存。
Icmp 表示比较 对%4和1 进行比较。相当于x>1?。返回ture和false
Icmp 有多种选项,参见http://llvm.org/docs/LangRef.html#icmp-instruction
Br 是用来进行分支的。分为两种情况,一种的条件一种非条件。
根据cond的true,false来选择下面要执行的分支label。这里是根据%5的值选择。
其中label 6是true
将2 写入 %2 中,所以%2应该是为return创建的内存。
这里的br是非条件语句。将单个标签作为目标,也就是直接跳转到label %8中。
Label 7 同理;
Label8 的作用是将 %2中要返回的值加载进%9,返回ret %9
接下来是主函数:
首先分配了两个内存,将 0 写入%1干啥不知道。是int a;???。其中bitcast... to是
为了给klee_make_symbolic做准备。
加载%2到%4中,调用e函数,返回值给%5,最终返回%5即为结果。
阅读全文
0 0
- llvm IR 语法小例子
- LLVM IR 语法
- LLVM IR 语法简介(一)
- LLVM IR
- (LLVM)中间语言(IR)基本语法简介
- LLVM IR is a compiler IR
- LLVM每日谈之二 LLVM IR
- LLVM教程( 三)-- LLVM IR
- (转)LLVM IR 简介
- LLVM IR指令的抽象
- LLVM IR 调试 常见错误
- LLVM (4) 11.3 LLVM的代码表示:LLVM IR
- Python 语法小例子
- Mapping High-Level Constructs to LLVM IR
- LLVM IR 语言的形式化描述
- llvm之IR手册翻译(1)
- llvm之IR手册翻译(2)
- llvm之IR手册翻译(3)
- python核心高级学习总结1---------*args和**kwargs
- jzoj. 1302. DigitalCounter
- SQLite+Qt 图书管理系统设计(具体实现)
- [OSX]为终端(Terminal)添加色彩
- 超级台阶
- llvm IR 语法小例子
- Play framework路由(Http route)
- SQL drop和truncate与drop的区别
- React Native自定义控件【底部抽屉菜单】
- 亚马逊云上搭建VPN服务器
- hadoop性能调优与运维
- TF-IDF(java实现)
- FPGA之Quartus12.1及Modelsim Altera10.1安装和破解
- Spring MVC使用注解开发