LLVM 笔记(一)—— phi 指令

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

语法:安全

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

示例:oop

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 节点。code

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

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

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

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

相关文章
相关标签/搜索