LLVM IR 上的 Phi 指令

Phi instructions on LLVM IR

有什么方法可以获取有关 .ll 文件的 'phi' 说明?

对于以下部分代码,我没有得到任何 'phi' 说明 在字节码上:

int y, z;
y = f;

if (y < 0)
    z = y + 1;
else
    z = y + 2;
return z;

我知道我可以使用传递“-mem2reg”,但如果可能的话,我希望能够在字节码上看到 phi 指令。

LLVM 中的虚拟寄存器是SSA 形式,而内存单元不是。对于 Clang 等 LLVM 前端,不必关心 SSA 形式很方便。如果我使用 Clang 将 C 代码编译为 LLVM IR,则所有变量都分配在堆栈上。不需要 SSA 表格,因为 z 位于内存中。

如果你使用

opt -mem2reg -S example.ll -o example-opt.ll

正如前面评论中所建议的那样,z 不再分配在堆栈上,而是分配在虚拟寄存器中。因此,您还将看到一个 phi 指令,用于您的示例以维护 SSA 形式。