关于LLVM IR的Phi说明

时间:2015-08-05 15:07:34

标签: llvm bytecode

有没有办法在.ll文件上获取'phi'说明?

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

int y, z;
y = f;

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

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

1 个答案:

答案 0 :(得分:4)

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

如果您使用

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

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