1

我已经实现了一个将控制流图转换为最小 ssa 的程序(我很确定它是正确的(参见此处))。现在我正在尝试实现复制传播。我已经实现了大部分,但我不确定当我们传播的变量在 phi 函数中时该怎么做。假设我有一个要传播的变量:

z_0 = y_1

此外,z_0在 phi 函数中:

z_1 = PHI(z_0, z_1)

现在,在传播时,我应该z_0在 phi 函数中做什么(因为传播完成后,我将删除 的定义z_0)?我应该传播z_0到 phi 函数吗?使得 phi 函数看起来像这样?:

z_1 = PHI(y_1, z_1)
4

1 回答 1

0

是的。的所有使用z0都替换为y1复制传播。正如@rici 暗示的那样,有多种边缘情况需要处理,因为复制传播特别擅长破坏 phi 节点/无意中改变它们的语义。

其中一些问题被封装在“丢失复制问题”和“丢失交换问题”中。

于 2021-04-17T19:01:11.863 回答