静态单赋值形式全解析
1. 静态单赋值形式基础
在程序转换中,静态单赋值(SSA)形式是一种重要的程序表示方法。在这种形式下,每个变量只有一个静态定义点。例如,对于变量 b1 ,由于它是死变量,其对应的 φ 函数可以通过死代码消除来删除。而变量 c 在进入时是活跃的,转换为 SSA 后,隐式定义 c0 是活跃的,它可能是未初始化的变量,也可能是函数的形式参数。
像 c1 ← c2 + b2 这样的赋值语句会被多次执行,这表明变量 c1 会被多次更新。这体现了我们处理的不是动态单赋值程序(如纯函数式程序),而是每个变量只有一个静态定义点的程序。
2. 转换为 SSA 形式
将程序转换为 SSA 形式的算法主要包括两个步骤:插入 φ 函数和重命名变量。
2.1 插入 φ 函数的标准
我们可以在每个汇合点(即控制流图中具有多个前驱的每个节点)为每个变量添加 φ 函数,但这既浪费又不必要。例如,在图 19.2b 中,块 4 沿着每个入边都由相同的 b 定义到达,因此它不需要为 b 添加 φ 函数。
路径汇合标准指出,当且仅当以下所有条件都为真时,流图的节点 z 应该为变量 a 存在一个 φ 函数:
1. 存在一个包含 a 定义的块 x 。
2. 存在一个(与
超级会员免费看
订阅专栏 解锁全文
10万+

被折叠的 条评论
为什么被折叠?



