静态单赋值形式(SSA)的优化算法及相关应用
1. SSA 图的数据结构表示
在对程序进行优化时,SSA 形式能让我们快速获取重要的数据流信息。为了更好地利用这一特性,我们需要关注 SSA 图的数据结构表示。主要涉及的对象有语句、基本块和变量:
- 语句 :包含所在块、块内前一个语句、块内后一个语句、定义的变量以及使用的变量等信息。语句类型可以是普通赋值、φ 函数、取值、存储或分支。
- 变量 :有定义位置(语句)和使用位置列表。
- 基本块 :包含语句列表、有序的前驱列表和后继(对于以条件分支结尾的块,可能有多个后继)。前驱的顺序对于确定块内 φ(v1, v2, v3) 的含义很重要。
2. 死代码消除
SSA 数据结构使死代码分析变得快速且容易。一个变量在其定义位置是活跃的,当且仅当它的使用列表不为空。这是因为在 SSA 形式中,同一变量不会有其他定义,并且变量的定义支配着每个使用,所以从定义到使用必然存在一条路径。
死代码消除的迭代算法如下:
W ← 一个包含 SSA 程序中所有变量的列表
while W 不为空
从 W 中移除某个变量 v
if v 的使用列表为空
令 S 为 v 的定义语句
if S 除了对 v 的赋值外没有其他副作用
从程序中删除 S
对于 S 使用的每个变量 xi
从 xi