数据流分析概念

  • 点(point):程序中某条指令的前/后位置
  • 定值点(definition point):对某变量赋值的指令位置
  • 引用点(use point):使用某变量值的指令位置

到达定值(Reaching Definition)

定义:定值点 到达点 ,当且仅当存在一条路径从 ,且此路径上 未被注销。

UD 链 / DU 链

  • UD 链(Use-Definition Chain):对某个引用点,所有可能到达该点的定值点集合
  • DU 链(Definition-Use Chain):对某个定值点,所有可能使用该定值的引用点集合

活跃变量(Live Variable)

变量 在点 处活跃,当且仅当存在一条路径从 出发,在 被重定值前被引用。

gen 和 kill

  • gen:本基本块内产生的定值
  • kill:本基本块内被注销的定值(即同一变量被重新赋值)

数据流方向

方向示例
到达定值、可用表达式
活跃变量

迭代算法(到达定值)

初始化:

  • (入口基本块)
  • (对

迭代至不动点:

  1. 对每个基本块
  2. 若本轮 有变化,重复 1-2

实现中用 标记记录变化,仅在有变化的基本块间传播。

到达定值数据流方程

重点 数据流方程

  • 会合运算:并集(任何一个前驱的定值都可能到达)
  • 方向:前驱 后继(前 后)

可用表达式数据流方程

满足交集(表达式必须所有路径都可用才算可用):

  • 会合运算:交集(所有前驱路径都必须经过)

活跃变量数据流方程

方向(从后继出发反推到前驱):

  • :在 B 中定值但定值前未被引用的变量
  • :在 B 中引用但引用前未被定值的变量

重点 活跃变量数据流方程方向与控制流相反(后 前)。

数据流分析的结果为 循环优化算法 中的代码外提、强度削弱和归纳变量删除提供关键信息(如定值可达性、变量活跃性)。