网站大量收购独家精品文档,联系QQ:2885784924

柳青《编译技术》Comp-Cha11.pptVIP

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * (2)循环的查找 必经结点 在程序流图中,对任意两个结点m和n,若从流图的首结点出发,到达n的任意通路都要经过m,则称m是n的必经结点,记为m DOM n。 必经结点集 流图中结点n的所有必经结点的集合,称为结点n的必经结点集,记为D(n)。 例如,对如右所示的程序流图, 求各结点的D(n)。 注意 D(7) 的值。 1 2 3 4 5 6 7 * * (2)循环的查找 回边 假设 a b是流图中的一条有向边,   若b DOM a, 则称a b是流图中的一条回边。   对于一已知流图,只要求出各结点 必经结点集,就可求出流图中的所有回边。  对右图,有向边6 6、7 4、4 2 是回边。 循环 如果已知有向边a b是回边, 则循环就是由结点b、a以及有通路到达 a而该通路不经过b的所有结点组成。  1 2 3 4 5 6 7 * * 例如,对右图中的程序流图,根据定义,结点序列{6},{4,5,6,7}以及{2,3,4,5,6,7}都是循环,而结点序列{2,4},{2,3,4},{4,6,7}以及{4,5,7}虽然都是强连通的,但因它们的入口结点不唯一,所以都不是上述意义下的循环。 1 2 3 4 5 6 7 对前面例题的程序流图,可看出{B2,B3} 是程序中的循环,而B2是唯一的入口结点。 (1) read x (2) read y (3) r:=x mod y (4) if r=0 goto (8) (5) x:=y (6) y:=r (7) goto (3) (8) write y (9) halt B1 B2 B3 B4 程序流图 * * 3、循环优化的主要技术 (1)代码外提 入口结点 前置结点 (2)强度削弱 (3)变换循环控制条件(删除归纳变量) 算法 * * 11.4 全局优化 全局优化是整个程序范围内的代码优化。   为了进行全局优化,需要在整个程序范围内,对程序中的所有变量的定值和引用间的关系进行分析,通常将这一工作称为数据流分析。 通过在程序的控制流图中进行数据流分析,是实现全局优化的基础。 * * 11.4.1 一些主要概念 (1)到达-定值 变量A的定值是一个语句(四元式),它赋值或可能赋值给A,该语句的位置称作A的定值点。 Eg. 对A的赋值或读值到A的语句。 (2)引用-定值链(ud链) 假设在程序中某点u引用了变量A的定值,则把能到达u的A的所有定值点的全体,称为A在引用点u的引用—定值链。通常将到达—定值信息存储(一个定值表)作为引用—定值链较方便,称之为 ud链。 * * (3)活跃变量 对程序中的某变量A和某点 p,若存在一条从p 开始的通路,其中引用了A在点p 的值,则称A 在点p 是活跃的。否则称A 在点p是死亡的。 活跃变量的分析对于删除无用赋值是很有意义的。 (4)定值-引用链(du链) 若一个变量A在程序中某点p定值,则可计算该定值能到达的对A的所有引用点,这些引用点集合称为该定值点的定值—引用链,简称为 du链。 du链信息可进一步用于强度削弱的优化中。 * * 11.4.2 数据流方程的一般形式 数据流信息可以由建立和解方程来收集,这些方程联系程序不同点的信息。 (1)数据流方程 典型的数据流方程(正向前进)形式为:P263 out[s] = (in[s] – kill[s]) ∪gen[s] (11-1) (2)建立和解数据流方程的3个因素 ① 可能沿程序控制流前进反方向进行计算; 反向前进的数据流方程形式为: in [s] = (out [s] – kill[s]) ∪gen[s] (11-2) ② 方程是在基本块一级而不是在语句一级建立; ③ 过程调用中,指针赋值和数组变量赋值的处理。 * * 11.4.3 到达—定值数据流方程 (1) 对程序中所有基本块, 定义如下几个集合 In [B] :到达基本块B入口之前的各个变量的所有定值点集。 Out [B] : 到达基本块B出口之后的各个变量的所有定值点集。 Gen [B] :基本块B中定值的并到达B出口之后的的所有定值点集。 Kill [B] :基本块B 外满足下述条件的定值点集:这些定值点所定值的变量在B中已被重新定值。 * * (2) 上述四个集合的计算 Gen[B] 和Kill [B]可直接从给定的流图求出。 In [B] 和 Out [B] 由相应方程求出。 例 图 11.6 (P 264) B Gen[B] 位向量 Kill[B] 位向量 B1 {d1,d2} 110000

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8135026137000003

1亿VIP精品文档

相关文档