LLVM中的PHI节点

         PHI 节点,它会选择来自不同分支的 i,因为我们的 IR 是 SSA(single static assignment,静态单赋值)形式的。在控制流图中,一个给定的变量可以来自两个不同的基本块(两条不同的路径),为了在 SSA 形式的 LLVM IR 中表达这种分支情况,需要用到phi 指令。(PHI指令用于实现 PHI 节点。在运行时,PHI指令根据“在当前 block 之前执行的是哪一个 predecessor(前任) block”来得到相应的值。)

        举个例子:
                %i = phi i32 [ 1, %entry ], [ %nextvar, %loop ]

        phi 指令必须在 basic block 的最前面,也就是在一个 basic block 中,在 phi 指令之前不允许有非 phi 指令。
        这里的 IR 表明变量 i 的值可能会来自两个基本块:%entry 或者%loop。来自%entry
块的变量值是 1,而%nextvar 变量将来自%loop。

你可能感兴趣的:(LLVM,笔记,其他)