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

相關文章
相關標籤/搜索