SSA 的语义和多重赋值
Semantics of SSA and multiple assignment
在 SSA 形式中,从 phi 分配的变量最终具有适当的值,具体取决于到达它的路径。但是,如果可能通过一些不寻常的路径,phi 的两个输入都已分配,会发生什么情况?例如
a = 1
...
b = 2
...
c = phi(a, b)
它是否被定义为像联合一样运行,使得 c 以值 2 结束,因为这是最后一次赋值?
对于SSA(单一静态赋值),phi
节点的两个操作数应该是特定变量的两个定义。
对于您的示例,这意味着 b=2
和 a=1
是单个变量的两个定义。而且由于 b=2
在 a=1
之后总是 运行。因此,定义 b=2
将杀死 a=1
的定义。所以,你的 phi(a,b)
实际上是非法的。
phi
的操作数通常是来自程序的两个不同执行过程的定义。
在 SSA 形式中,从 phi 分配的变量最终具有适当的值,具体取决于到达它的路径。但是,如果可能通过一些不寻常的路径,phi 的两个输入都已分配,会发生什么情况?例如
a = 1
...
b = 2
...
c = phi(a, b)
它是否被定义为像联合一样运行,使得 c 以值 2 结束,因为这是最后一次赋值?
对于SSA(单一静态赋值),phi
节点的两个操作数应该是特定变量的两个定义。
对于您的示例,这意味着 b=2
和 a=1
是单个变量的两个定义。而且由于 b=2
在 a=1
之后总是 运行。因此,定义 b=2
将杀死 a=1
的定义。所以,你的 phi(a,b)
实际上是非法的。
phi
的操作数通常是来自程序的两个不同执行过程的定义。