数据流分析:优化与加速策略
1. 利用数据流分析进行程序转换
优化编译器可借助数据流分析的结果,从多个方面对程序进行优化。
1.1 公共子表达式消除
对于流图语句 s : t ← x ⊕ y
,若表达式 x ⊕ y
在 s
处可用,则可消除 s
中的计算。具体算法如下:
1. 计算可达表达式,即找出形如 n : v ← x ⊕ y
的语句,且从 n
到 s
的路径不会计算 x ⊕ y
或定义 x
与 y
。
2. 选择一个新的临时变量 w
,将 n
重写为:
n : w ← x ⊕ y
n′ : v ← w
- 最后将语句
s
修改为s : t ← w
。后续可依靠复制传播来移除部分或全部额外的赋值四元组。
1.2 常量传播
假设存在语句 d : t ← c
( c
为常量),以及另一个使用 t
的语句 n : y ← t ⊕ x