Day 3 Data Flow Analysis-Application

视频地址

南京大学《软件分析》课程03(Data Flow Analysis I)

南京大学《软件分析》课程04(Data Flow Analysis II)

Content

  1. 数据流分析的概括
  2. 数据流分析预备知识(数学、符号知识)
  3. Reaching Definitions分析
  4. Live Variables分析
  5. Available Expressions分析

Overview of Data Flow Analysis

什么是Data Flow Analysis?

How application-specific Data Flows through the Nodes(BBs/statements) and Edges(control flows) of CFG(a program)?

保障分析的安全性:

  • may analysis:

    结果可能是正确的(over-approximation)

  • must analysis:

    结果必须是真实的(under-approximation)

不同的数据流分析有不同的

  • data abstraction(符号抽象为+,-,0,unknown,undefined)
  • flow safe-approximation(may/must analysis)
  • transfer functions(+ op + = +等等)
  • control-flow handlings(merge处的处理)

Preliminaries of Data Flow Analysis

  • 输入和输出状态

在这里插入图片描述

  • 转化函数的约束规则
    • Forward Analysis(沿着控制流顺序): OUT[s]=f(IN[s])
    • backward Analysis(反向控制流分析): IN[s]=f(OUT[s])
  • 控制流约束规则

在这里插入图片描述

先暂不考虑方法调用,别名问题

Reaching Definitions Analysis

  • 定义:在p处定义的变量在到达q处时变量未被重新赋值
  • 用处:编译优化、错误检测(比如变量是否初始化)

在这里插入图片描述

may analysis

有一条path没有初始化就要报出错误

merge处要union

数据抽象

所有的定义用bit vectors来抽象

在这里插入图片描述

转换函数

OUT[B]=gen U (IN[B]-killB)

eg:

在这里插入图片描述

算法

在这里插入图片描述

细节之处:

  1. entry的out初始化为空:语义理解
  2. 第二行for排除了entry:作为data flow analysi模板,有的分析中边界初始化和其它的BB初始化可能不一样
  3. BB的out初始化:may analysis一般为空,must analysis一般为Top(All)
  4. 为什么算法可以停止?(下述例子理解)

example

这里只贴结果了,还是观看原视频最好(老师PPT做得很好很费心)

在这里插入图片描述

算法为什么可以停止

  • gen和kill都是固定的(程序不变):输入不变,输出不变
  • out不会缩小,有限
  • 第一次所有结果都不变时即可结束(到达不动点)

在这里插入图片描述

Live Variables analysis

  • 定义:变量v从p点沿着路径是否被使用(并未被重新定义)
  • 作用:寄存器分配(替换不会被用到的)

在这里插入图片描述

数据抽象

仍为bit vectors

Backward analysis

在某条路某点上发现被use,可以自动向前传播

may analysis

有一条path用到就认为是live

merge处仍为union

转换函数

在这里插入图片描述

算法

在这里插入图片描述

细节之处:

  1. 已知out去求in
  2. 先use后define

example

在这里插入图片描述

Available Expressions analysis

  • must analysis
  • 定义:

在这里插入图片描述

算法

在这里插入图片描述

example

在这里插入图片描述

对比

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值