ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:194.99KB ,
资源ID:1792769      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1792769.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(控制流与数据流分析.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

控制流与数据流分析.docx

1、控制流与数据流分析第七章控制流分析优化需要从程序中获得足够多的信息。控制流分析就是用来获取程序控制结构信息 的形式化分析方法,它是数据流分析,依赖分析的基础。7.1控制流分析方法概述7.1.1过程内控制流分析方法主要有下面 3种:1用dominator图找出循环,把循环标记出来供后面的优化使用。因为循环是程 序中最值得改进的地方,所以这种方法广泛被现在的编译器采用。2 .In terval分析:这是一类分析方法的统称,用来分析单个过程的结构,并把它 分解成为一系列有层次的结构称为 in terval。这些结构的层次关系可以用一棵树来表示,就叫控制树。接下来许多分析和优化就可以基于控制树来做。3

2、.结构分析:结构分析是 Interval分析中的特别重要且有代表性的一种,而且它在许多编译器或优化方法中被用到,所以单独作为一种控制流分析方法。这三种分析方法各有优劣之处,且三种方法并不是互相隔离的,具体实现时 可以根据需求做出折衷选择。7.1.2 控制流图和BB上面三种分析方法都是基于控制流图 (CFG)的基本单元BB来做的。因为控制 流图和BB大家都知道,所以这里省略它们的基本概念。只是在识别 BB的方法上补充一点:对 call语句的处理。对call语句的处理:一般情况下call语句调用目标过程后会返回 call语句顺序的下一条语句。这时 call语句和它顺序的下一条语句都不会被作为入口语

3、句。但是,如果一个 call语句有好几个返回地址 (例如:Fortran中有alternate返回地 址),那么call语句的下一条语句就应该作为入口语句,否则 BB中将有一条既不是顺序执行又不在 BB末尾的指令。C库函数中的setjump()和Iongjump()也 有类似情况。Fortran1 call 2 3 n 箭头所指都是入口语句7.13 EBBEBB与控制流分析的关系不大,只是因为刚介绍了 BB,所以把EBB也顺带介绍一下。EBB跟BB相比可以使指令调度这种局部优化在选择指令时范围更宽。介召EBB之前先要知道join node1.join node 的概念: 若一个节点不止一个前驱

4、 (随便有几个后继 ),那么该节点就 叫做 join node 。2.EBB :除了第一个节点外,其余节点都不是 join 节点的最大 CFG 子图。 (这 里的第一个节点指的是唯一一个前驱不在该 EBB 之内的节点,其余节点都不是 join 节点因而只有唯一前驱,而且前驱属于该 EBB 之内,所以一个 EBB 就是以 join 节点为根的一棵树 ) 图可见 muchnick 一书 p177 Fig7.8 完全对称的,我们可以有 branch node 和 reverse EBB 的概念,这里略。3.找 EBB 的算法: muchnick 一书 p176 Fig7.6 7.7Build_EBB

5、(r, succ, pred) :作用:给定某个 join node ,求以它为根的 EBB 树。思想:它调用 Add_Bbs()从join节点r出发在CFG上做深度优先搜索,若遇 到非join节点就把它加入该 EBB,然后沿该节点继续深度优先搜索;若遇到 join 节点就把它放入一个单独的集合 EbbRoots 里,然后控制返回它的父节点 继续搜索。Build_All_Ebbs(r, succ, pred) : 作用:找到 CFG 中所有 EBB 思想:把CFG的根放入EbbRoots集合里,并把它作为r调用Build_EBB(r, succ, pred);然后对 EbbRoots 中的 j

6、oin node 队列依次调用 Build_EBB(r, succ, pred), 得到所有 EBB 。7.2深度 /广度优先搜索,前序 /后序遍历略7.3Dominators 和 PostDominators7.3.1 dom, idom 基本概念dominate (简写为 dom) 是一个二元关系, a dom b 表示从 CFG 的 entry 节点到 b 节点的任意一条路径都会经过 a 节点。这时把 a 叫做 b 的 dominator。idom关系由dom关系得来,a idom b表示a dom b,且不存在节点c同时满足a dom c、c dom b。由 CFG 的节点集 N 和

7、idom 关系构成的边集组成一棵树,叫 idom 树,这棵树反 映了 CFG 上所有节点间 dom 和 idom 关系。7.3.2求 dominator 和 idominator求 dominator 的常规算法用的是迭代计算的方法,收敛结果即所求每个节点的domintor 集合。该算法大家比较熟悉,略。求 idominator 的算法要基于 domintor 算法的结果, 用下图来简单阐述:much nick 书p184 Fig7.15思想:任取节点i属于Domin(n)-n,固定i,依次检查 Domin(n)-n-i中节点 s,若s属于Domin(i),则从Domin(n)中删除节点s,因

8、为它不可能成为节点 n的idominator 了。检查完集合 Domin(n)-n-i 中剩余节点 s之后,再改变节点 i,继续上面做的检查。直到 domin(n)-n集合中只剩一个节点,该节点就是节点 n的 idominator。求Postdominator的算法与求 dominator的算法对称,只要把算法 Fig7.14中的pred函数改为succ函数就行了。7.3.3 计算dominator的快速算法该算法的详纟田介绍见 Len gauer and Tarja n A Fast Algorithm for Fi ndi ng Domi nators in a Flowgraph常规算法

9、时间复杂度为0(n2 .e),快速算法的时间复杂度为 0(n . %(e,n), a(e,n)是ackermann函数的倒数,增长非常缓慢。先给一个定义sdom(w):sdom(w) = min u| 存在路径 vO=u,v1,vk=w 且 vjw (1= j= k-1) 先对CFG作深度优先搜索,搜索树为 T,里面的u, w, v1,vk都是T中先序遍历的访问顺序,后面经常就用这个顺序号来指代节点。Sdom(w)表示:节点u有路径到达w,且路径上除u之外的其它节点的序号都大于 w。取CFG中满足这个条件且序号最小的 u作为sdom(w)。引入sdom函数的目的是由sdom可以计算idom(w

10、)因为算法比较复杂,不能几句话说清楚,所以先给个梗概。即我们首先会给 出一些引理和定理, 由它们得到sdom(w)的递推计算方法和基于 sdom函数的idom(w)的递推计算方法,然后按照特定的顺序使用递推计算方法计算得到 sdom和idom。引理和定理的意义不直观,可能需要了解证明过程才能清楚,可以查看上面的论 文,这里只在附录中给出最重要的定理的证明。 (引理123可以先跳过不看)引理1:如果v,w都是G中的点,且v=w,那么v到w的任何路径都要经过 v和w在深度 优先树T上的公共祖先。引理 2: sdom(w) - + w; idom(w) - * sdom(w)sdom(w) - +

11、w 表示在 T 上 sdom(w)是 w 的祖先,且 sdom(w)!=widom(w) -* sdom(w)表示在 T上idom(w)是 sdom(w)的 祖先,且 有可能 idom(w)=sdom(w)。引理3 :如果v,w满足v -* w , 那么或者有v -* idom(w) 或者有idom(w) -* idom(v) 。定理1 :假如w!=rsdom(w) = min( v| (v,w) 属于 E and v w and 存在边(v,w) 并且满足u -* v )定理1就是sdom(w)的递推计算式。定理一的证明:设X等于上面等式的右边部分一:证明 sdom(w) ex如果(x, w

12、) E且x w,那么,由sdom的定义和(x,w)= sdom(w)乞x。如果x = sdom(u) , u满足u w且u r *v且(v, w) E,则有路径I :从 sdom(u)到u,从u到v,从v到w。且sdom(u)到u上的节点的序号 u w,从u到v的路径上的节点序号也是 .u .w,所以sdom(w) _ sdom(u) = x二:证明 sdom(w) _xsdom(w) =v,v1,.,Vk,Vk =w (vj - w , 1 - j - k -1)设 k = 1,即(sdom(w), w) E,且 sdom(w) :w= sdom(w) : w,由 min 式 前半部分有 x

13、= min (.)三sdom(w)。若k .1,则取j是满足Vj *vkJ的那个最小的j,假如有Vj乞Vj .仁i乞j -1 , 则由引理一,存在 V|.i 一 I 一 j -1是vi和Vj的公共祖先,即v Vj *vk j ,这与j的取法矛盾。所以 vi _ Vj .1 _ i _ j -1所以存在路径sdom(w) , v1 一直到vj且路径上的点除了两端点外都大于等于 出,这说明 sdom(w) _ sdom(vj),又vj w,Vj “ *vk4,(vk4,w) E= sdom(Vj)_x,所以 sdom(w)亠 x综合一二,可知 sdom(w)二 x。定理2 :如果每一个满足 sdo

14、m(w) -+ u -* w的u都同时满足sdom(u) = sdom(w), 那么 idom(w) = sdom(w)定理3 :假设u是满足sdom(w) -+ u -* w 并且使sdom值最小的那个 u,那么 u 满足 sdom(u) sdom(u)这就得到了基于sdom函数的idom(w)的递推计算式。上面这些定理比较烦杂,有用的是定理 1、2、3和推论,其它都是为了证明这些而给出的。算法的步骤:(1)算法首先对CFG故深度优先搜索,按先序遍历次序给各个节点编号。(2)按照递减次序,用定理 1计算各个节点sdo m函数值(3)按照递减次序,用推论1计算各个节点的idom函数值,这里要说

15、明的是推论1计算idom函数值分两种情况,第一种情况下计算 idom(w)时sdom(w)已经得到,对应于下面图 1的step3 ;而第二种情况下计算 idom(w)时idom(u)还没得到,这时idom(w)中记录序号u,等递减遍历完成后,再进 行一次序号递增遍历,这时 idom(u)的值一定会在idom(w)之前被计算出来,用idom(w)=idom(idom(w) 就能得到idom(w)的值,对应于图 1中的 step4 。第步比较复杂,把它拿出来讨论。我们打算用semi函数来表示sdom函数,但semi函数在算法各个阶段表示的含义不完全相同。 Semi(w)值在(1)之前都为0,在(1)之后等于 w,在 之后等

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1