南大静态分析-4(Avaliable Expressions Analsis)

Available Expressions Analysis (可用表达式分析)

must analysis

如果说一个表达式 x op y 在 program point p 上是available的,那么

  1. 从流图入口点到点p的所有路径,都必须经过表达式x op y。(该表达式结点在流图上支配p点)
  2. 在上一次计算该表达式后, 没有再定义过x或者y

截屏2020-05-17 下午8.16.00

在程序优化中, 我们就可以在p出直接利用上一次的表达式计算结果来替换该表达式。也可以用来探测全域公共子表达式。

例子:

表达式可利用

image-20201209145609833

表达式不可利用

image-20201209145630745

Abstraction(数据抽象)

截屏2020-05-17 下午8.16.43

在流图中抽象每条表达式,可利用状态为一个位。0代表不可利用。

Safe-approximation

有了定义,有了抽象,下面就要进行评估->先看汇聚点怎么merge,再制定transfer function。

截屏2020-05-17 下午9.43.38

截屏2020-05-17 下午9.46.53

must analysis所有的path都要满足这一条件:

截屏2020-05-17 下午9.47.55

是一种 under-approximation,可以有漏报,可以是safe的。

截屏2020-05-17 下午9.49.19

这里如果b删了, 这里要做交。但是有情况,如x流下来时是x=3而恰好左边的BB中x=3。那么就是一个漏报。

Algorithm of Available Expressions Analysis

截屏2020-05-17 下午9.51.13

  • 正向分析, boundary是OUT[entry]= 空;
  • 因为是must analysis,汇聚点做交,仅此OUT[B] = U

CASE:

初始化:

截屏2020-05-17 下午9.52.56

第一次迭代:

截屏2020-05-17 下午9.53.57

第二次迭代:

截屏2020-05-17 下午9.54.44

总结三个算法

截屏2020-05-17 下午9.56.10

  • 设计一个数据流分析算法, 首先要描述场景, 从场景中抽象出我们需要的数据,然后设计safe approximation,转化成算法;还有就是理解算法是如何停止的。