跳转至

📔 dcc888 lecture03 DataFlow Analysis 课程学习笔记

1. DataFlow概述

数据流分析是编译器中最常用的静态分析方法。

对于经典的数据流分析,是一个从CFG和一个有限高度的Lattice L开始的 monotone framework

  • lattice对于所有程序来说,可能是固定的,也可能对给定程序的进行参数化。

并不一定非得使用CFG来运行数据流分析,可以直接使用指令语法来完成。

2. Liveness Analysis

通过CFG表示程序的例子,需要思考几个问题:

  • 需要多少个寄存器才能在其它程序中编译这个程序?

通过寄存器的信息来进行数据分析的过程称为 Liveness 分析

假设提供的寄存器无限,则变量v应该在程序点p的寄存器中:

  • 从每一条路径p到另一个程序点p_u
  • 路径p不需要对v进行任何重新定义。

这两个条件决定了变量v在程序点p上什么时候是活的。如果变量是alive,在程序点p,则变量必须驻留在寄存器或内存中。

2.1 propagation of Information

  • 程序点p是单个node时:

  • 一个变量在程序点p之前是alive,当且仅当:

    • 它在p之后会被立即alive
    • 在p处没重新定义又或者p被使用过。
  • 但是当程序点p存在多个后继节点的情况时,又该如何在多个程序点中找出alive变量呢?

  • 如果变量v在p之前的任何前驱操作是alive,那它在p之后一定是alive的。

2.2 IN and OUT Sets and dataflow equations

为了解决活性分析问题,会将信息存储到某个位置,将程序点与一组alive变量映射在一起。

我们将每个程序点p的两个集合相互连接起来:

  • IN:紧接在 p之前的一组变量。
  • OUT:紧接在 p之后的一组变量。

一般情况下,可以定义集合为多个方程组成。

2.3 declarative program 和 Prolog工具

不做文章内容的更新,会单独更新一篇prolog工具使用的文章进行学习笔记记录。

3. Available Expressions

3.1 Propagation of information

3.2

4. Very Busy Expressions Analysis

5. Reaching Definitions Analysis

参考资源