SSA的语义和多重赋值

时间:2015-05-21 13:27:35

标签: compiler-construction ssa

在SSA形式中,从phi分配的变量最终会得到适当的值,具体取决于它到达的路径。但是,如果通过一些不寻常的路径,两个输入到phi的指定都会被分配,会发生什么? e.g。

a = 1
...
b = 2
...
c = phi(a, b)

是否将其定义为联合使得c最终得到值2,因为这是最后一次分配?

1 个答案:

答案 0 :(得分:5)

对于SSA(单一静态分配),phi节点的两个操作数应该是特定变量的两个定义。

对于您的示例,这意味着b=2,而a=1是单个变量的两个定义。由于b=2将始终在a=1之后运行。因此,定义b=2将取消a=1的定义。所以,你的phi(a,b)实际上是非法的。

phi的操作数通常是来自程序的两个不同执行过程的定义。