数据流分析中存在的问题:
- 每个节点需要保存一份
x,y,z
的值,即便节点2只和x
有关。 - 当节点1的转换函数更新
y
时,必须经过2才能够到达3,但是y
的更新和2并没有关系。
Def-use关系
-
给定变量x,如果结点A可能改变x的值,结点B可能使用结点A改变后的x的值,则结点A和结点B存在Def-Use关系
-
基于Def-Use的数据流分析:
静态单赋值形式(SSA)
- 定义:每个变量只会被赋值一次
- 控制流汇合处无法确定变量是如何赋值的:引入函数Φ()
- SSA提供了Def-Use关系:
-
加入Φ()函数的条件:对于基本块B来说,例如上图的2
-
有多条路径汇合
-
在多条路径中,某个变量被进行了不同的赋值,例如
y
则需要在B前加入Φ()函数进行变量的合并。
-
-
支配关系与支配边界的解释理解:
- 不严格支配:个人理解为不支配,也就是说存在某个路径不需要经过A即可到达B,换句话说,可能在B处使用的变量无需经过A,可能在其他路径上的C被赋值,而不是严格支配的相对概念
- 支配边界:B的支配边界即从B出发按照各个路径顺序遍历,第一个不被B严格支配的节点。