首页 > 其他 > 详细

LLVM 笔记(一)—— phi 指令

时间:2015-10-19 19:15:49      阅读:395      评论:0      收藏:0      [点我收藏+]

ilocker:关注 Android 安全(新手) QQ: 2597294287

语法:

<result> = phi <ty> [ <val0>, <label0>], ...

示例:

Loop:       ;Infinite loop that counts from 0 on up...
  %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
  %nextindvar = add i32 %indvar, 1
  br label %Loop

phi 指令用于实现 PHI 节点。

在运行时,phi 指令根据“在当前 block 之前执行的是哪一个 predecessor(前任) block”来得到相应的值。

以上面示例中的 phi 指令为例,如果当前 block 之前执行的是 LoopHeader,则该 phi 指令的值是 0,而如果是从 Loop label 过来的,则该 phi 指令的值是 %nextindvar。

在 phi 指令的语法中,后面是一个列表,列表中的每个元素是一个 value/label 对,每个 label 表示一个当前 block 的 predecessor block,phi 指令就是根据 label 选相应的 value。

phi 指令必须在 basic block 的最前面,也就是在一个 basic block 中,在 phi 指令之前不允许有非 phi 指令。

LLVM 笔记(一)—— phi 指令

原文:http://www.cnblogs.com/ilocker/p/4892439.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!