Available Expressions Analysis (可用表达式分析)
must analysis
如果说一个表达式 x op y
在 program point p
上是available的,那么
- 从流图入口点到点
p
的所有路径,都必须经过表达式x op y
。(该表达式结点在流图上支配p点) - 在上一次计算该表达式后, 没有再定义过x或者y
在程序优化中, 我们就可以在p出直接利用上一次的表达式计算结果来替换该表达式。也可以用来探测全域公共子表达式。
例子:
表达式可利用
表达式不可利用
Abstraction(数据抽象)
在流图中抽象每条表达式,可利用状态为一个位。0代表不可利用。
Safe-approximation
有了定义,有了抽象,下面就要进行评估->先看汇聚点怎么merge,再制定transfer function。
must analysis所有的path都要满足这一条件:
是一种 under-approximation,可以有漏报,可以是safe的。
这里如果b删了, 这里要做交。但是有情况,如x流下来时是x=3
而恰好左边的BB中x=3
。那么就是一个漏报。
Algorithm of Available Expressions Analysis
- 正向分析, boundary是
OUT[entry]= 空
; - 因为是must analysis,汇聚点做交,仅此
OUT[B] = U
CASE:
初始化:
第一次迭代:
第二次迭代:
总结三个算法
- 设计一个数据流分析算法, 首先要描述场景, 从场景中抽象出我们需要的数据,然后设计
safe approximation
,转化成算法;还有就是理解算法是如何停止的。