坐标:编译原理,代码优化


1. 数据流分析的应用

引用定义链的到达-定义分析(前向数据流问题)、活跃变量分析(逆向数据流问题)、可用表达式分析

在每一种数据流分析应用中,都会把每个程序点一个数据流值关联起来。基本上这个程序点是基本块层级。

2. 基本块的数据流分析方程

B:基本块,IN[B]: 紧靠基本块之前的数据流值,

OUT[B]: 紧随基本块之后的数据流值,

fB: 基本块B的传递函数。注意数据流的方向。

正向: 

教课书中则是这样的数据流方程,S是一条语句

其中,gen[S]是在S中产生的信息,kill[S]是被S注销的信息。

<!-- 按照自己浅显的理解组织的,如不严谨,欢迎指正,勿喷 -->

先不管怎么分析,以上数据流分析应用中的数据流分析问题定义如下:

1) 到达-定义分析问题

与程序点(基本块)关联的数据流值是:变量定义(赋值语句)。

相关概念:引用-定值链(ud链),它是一个列表,对于变量的每一次引用,到达该引用的所有定值都在该列表中。

in[B]: 紧靠基本块B之前的有效定义的变量(暂不管具体的变量值)。

out[B]: 紧随基本块B之后的有效变量定义。

gen[B]: 在基本块B中,生成的新的变量定义。

kill[B]: 在基本块B中,被新的变量定义注销的变量定义。

数据流方程:

2) 活跃变量分析问题

与程序点(基本块)关联的数据流值是:对变量的引用(也因此称为活跃变量)。

相关概念:定义-引用链(du链)。du链是个集合,对于每个定义,它能到达(途中不被注销)的所有引用的集合。

in[B]: 紧靠基本块B之前的有效的变量引用

out[B]: 紧随基本块B之后的效的变量引用

use[B]: 在基本块B中,使用到的变量引用

def[B]: 在基本块B中,定义的变量

数据流方程:

3)可用表示式分析问题

与程序点(基本块)关联的数据流值是:可用的表达式。

同样使用到达定义进行分析。

U: 全集,程序中出现在一个或多个语句右边的所有表达式的全集。

in[B]: 紧靠基本块B之前的可用表达式集合。

out[B]: 紧随基本块B之后的可用表达式集合。

e_gen[B]: 在基本块B中,生成的可用表达式的集合。

e_kill[B]: 在基本块B中,注销的可用表达式集合。

数据流方程:交集。

整理成表格对比:

问题

层级

数据流方向

IN[B]

OUT[B]

聚合操作

用途

到达-定义分析

基本块

正向

如上所述

如上所述

并集

如下所述

活跃变量分析

基本块

逆向

同上

同上

并集

如下所述

可用表示式

基本块

正向

如上所述

如上所述

交集

如下所述

4. ud链和du链的用途

<!-- 明确了用途,又有干劲了 -->

三种数据流分析的方程、用途相关推荐

  1. 正圆锥体空间方程_数值模拟偏微分方程的三种方法:FDM、FEM及FVM

    偏微分方程数值模拟常用的方法主要有三种:有限差分方法(FDM).有限元方法(FEM).有限体积方法(FVM),本文将对这三种方法进行简单的介绍和比较. 一.有限差分方法 有限差分方法(Finite D ...

  2. 如何利用python解方程_Python 解方程的三种方法

    # 首发于我的博客 The North. 新年第一篇,搞起. 这回写一个好久之前想做,一直搁着没做的东西-- Python 解方程(其实是放假回家,趁着家里电脑重装 LOL 的时间过来写一篇). 咱这 ...

  3. python解复杂方程_Python 解方程的三种方法

    # 首发于我的博客 The North. 新年第一篇,搞起. 这回写一个好久之前想做,一直搁着没做的东西-- Python 解方程(其实是放假回家,趁着家里电脑重装 LOL 的时间过来写一篇). 咱这 ...

  4. 线和面的方程区别_[平面与圆柱面交线方程]平面与圆柱面的交线有哪三种情况...

    平面与圆柱面的交线有哪三种情况 1.面与圆柱相交时,只和一个圆柱的圆(底面圆或顶面圆)及柱身相交,此时的交线:由圆柱圆上的交线(是直线段)和柱身交线(是圆弧线)组成. 2.面与圆柱相交时,与圆柱上下底 ...

  5. matlab迭代求解,[基于matlab平台的三种迭代法求解矩阵方程]matlab迭代法求方程的根...

     数值分析第二次作业 学院:电子工程学院 基于matlab平台的三种迭代法求解矩阵方程组 求解系数矩阵由16阶Hilbert方程组构成的线性方程组的解,其中右端项为[2877/851,3491/14 ...

  6. matlab解方程x 2-x-2=0,matlab用三种方法求解二阶微分方程x''+0.2x'=0.4x=0.2u(t),u(t)是单位阶跃函数,初始状态为0...

    问题描述: matlab用三种方法求解二阶微分方程x''+0.2x'=0.4x=0.2u(t),u(t)是单位阶跃函数,初始状态为0 1个回答 分类: 数学 2014-11-28 问题解答: 我来补答 ...

  7. python 解方程_python如何解方程的三种方法

    python求解方程组的三种方法: Numpy求解方程组x + 2y = 3 4x + 5y = 6 当然我们可以手动写出解析解,然后写一个函数来求解,这实际上只是用 Python 来单纯做" ...

  8. Kendall’s tau-b,pearson、spearman三种相关性的区别(有空整理信息检索评价指标)

    同样可参考: http://blog.csdn.net/wsywl/article/details/5889419 http://wenku.baidu.com/link?url=pEBtVQFzTx ...

  9. 神经网络分为哪三种模型,神经网络主要包括哪些

    神经网络有哪些主要分类规则并如何分类? 神经网络模型的分类人工神经网络的模型很多,可以按照不同的方法进行分类.其中,常见的两种分类方法是,按照网络连接的拓朴结构分类和按照网络内部的信息流向分类. 1按 ...

  10. 请求合并的三种方式,大大提高接口性能!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://zhenbianshu.github.io/ 将相似或重复请求在上游系统中合并后发往下游系统,可以大大降低下游 ...

最新文章

  1. 太阳能控制器原理图_太阳能人体感应壁灯的电路设计
  2. 在 Android Studio 2.2 中愉快地使用 C/C++
  3. 应用adb发布apk到android avd模拟器
  4. maven打包跳过测试
  5. yocto-sumo源码解析(十一): recvfds
  6. 微脉java面试,微脉医疗开放平台
  7. .net 窗体清除上次显示的内容_access在系统右下角任务栏弹出消息提示窗体
  8. python迭代法求平方根_1021: 迭代法求平方根
  9. 理解Rails真实性令牌
  10. 在博客园cnblogs的博客内容之中显示地图(测试中)
  11. Linux下Gogs二进制安装配置
  12. PHP处理多表查询时的SQL语句拆分与重新组装
  13. 短语wipe the slate clean
  14. webscraper多页爬取_爬虫工具实战篇(Web Scraper)- 京东商品信息爬取(原创)
  15. CAD在画线的过程中显示长度和角度
  16. 记录matlab符号方程符号解求法
  17. 国产设计软件都有哪些,国产设计工具推荐
  18. 无法定位序数 354 于动态链接库LIB
  19. java实现短信接口
  20. HoloLens开发遇到的问题:d3d11: failed to create 2D texture shader resource view

热门文章

  1. python paramiko ssh-解决强制修改密码登录问题
  2. Unity 3D 中基础的三种传值技术(脚本组件,类静态字段,SendMessage)
  3. 一起来Fit TDMA over WiFi
  4. powerBI使用概览
  5. Qt学习:常用数学函数
  6. cmd把一个较大的文件分割_将文件分割成较小的文件
  7. 数据库防火墙闪亮登场(好文共赏)
  8. 简述自动化测试实习收获
  9. 斐迅路由器刷华硕固件
  10. 手把手逆向Playcanvas天空盒编码(一次乌龙的任务)