三种数据流分析的方程、用途
坐标:编译原理,代码优化
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链的用途
<!-- 明确了用途,又有干劲了 -->
三种数据流分析的方程、用途相关推荐
- 正圆锥体空间方程_数值模拟偏微分方程的三种方法:FDM、FEM及FVM
偏微分方程数值模拟常用的方法主要有三种:有限差分方法(FDM).有限元方法(FEM).有限体积方法(FVM),本文将对这三种方法进行简单的介绍和比较. 一.有限差分方法 有限差分方法(Finite D ...
- 如何利用python解方程_Python 解方程的三种方法
# 首发于我的博客 The North. 新年第一篇,搞起. 这回写一个好久之前想做,一直搁着没做的东西-- Python 解方程(其实是放假回家,趁着家里电脑重装 LOL 的时间过来写一篇). 咱这 ...
- python解复杂方程_Python 解方程的三种方法
# 首发于我的博客 The North. 新年第一篇,搞起. 这回写一个好久之前想做,一直搁着没做的东西-- Python 解方程(其实是放假回家,趁着家里电脑重装 LOL 的时间过来写一篇). 咱这 ...
- 线和面的方程区别_[平面与圆柱面交线方程]平面与圆柱面的交线有哪三种情况...
平面与圆柱面的交线有哪三种情况 1.面与圆柱相交时,只和一个圆柱的圆(底面圆或顶面圆)及柱身相交,此时的交线:由圆柱圆上的交线(是直线段)和柱身交线(是圆弧线)组成. 2.面与圆柱相交时,与圆柱上下底 ...
- matlab迭代求解,[基于matlab平台的三种迭代法求解矩阵方程]matlab迭代法求方程的根...
数值分析第二次作业 学院:电子工程学院 基于matlab平台的三种迭代法求解矩阵方程组 求解系数矩阵由16阶Hilbert方程组构成的线性方程组的解,其中右端项为[2877/851,3491/14 ...
- 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 问题解答: 我来补答 ...
- python 解方程_python如何解方程的三种方法
python求解方程组的三种方法: Numpy求解方程组x + 2y = 3 4x + 5y = 6 当然我们可以手动写出解析解,然后写一个函数来求解,这实际上只是用 Python 来单纯做" ...
- Kendall’s tau-b,pearson、spearman三种相关性的区别(有空整理信息检索评价指标)
同样可参考: http://blog.csdn.net/wsywl/article/details/5889419 http://wenku.baidu.com/link?url=pEBtVQFzTx ...
- 神经网络分为哪三种模型,神经网络主要包括哪些
神经网络有哪些主要分类规则并如何分类? 神经网络模型的分类人工神经网络的模型很多,可以按照不同的方法进行分类.其中,常见的两种分类方法是,按照网络连接的拓朴结构分类和按照网络内部的信息流向分类. 1按 ...
- 请求合并的三种方式,大大提高接口性能!
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://zhenbianshu.github.io/ 将相似或重复请求在上游系统中合并后发往下游系统,可以大大降低下游 ...
最新文章
- 太阳能控制器原理图_太阳能人体感应壁灯的电路设计
- 在 Android Studio 2.2 中愉快地使用 C/C++
- 应用adb发布apk到android avd模拟器
- maven打包跳过测试
- yocto-sumo源码解析(十一): recvfds
- 微脉java面试,微脉医疗开放平台
- .net 窗体清除上次显示的内容_access在系统右下角任务栏弹出消息提示窗体
- python迭代法求平方根_1021: 迭代法求平方根
- 理解Rails真实性令牌
- 在博客园cnblogs的博客内容之中显示地图(测试中)
- Linux下Gogs二进制安装配置
- PHP处理多表查询时的SQL语句拆分与重新组装
- 短语wipe the slate clean
- webscraper多页爬取_爬虫工具实战篇(Web Scraper)- 京东商品信息爬取(原创)
- CAD在画线的过程中显示长度和角度
- 记录matlab符号方程符号解求法
- 国产设计软件都有哪些,国产设计工具推荐
- 无法定位序数 354 于动态链接库LIB
- java实现短信接口
- HoloLens开发遇到的问题:d3d11: failed to create 2D texture shader resource view