川师编译原理课件11I.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
川师编译原理课件11I

第十一 章 代码优化 11.1 优化技术简介 一、代码优化分类 1、按阶段分类 中间代码优化、目标代码优化。 2、按程序范围分类 局部(基本块)优化、循环优化、全局优化。 二、代码优化原则 等价原则、高效原则。 1、数组的存储空间 设数组中每个元素占t个存储空间,则 1)删除公共子表达式(4*i)和代码外提(4)(7) 2)强度削弱(T1的乘法变为加法) 3)变换循环控制条件(T1=80) 、合并已知量(T1:=4)和复写传播(T6:=T5[T1]) 4)删除无用赋值(2)、(6)、(11) 11.2 局部优化 一、局部优化的概念 1、基本块的定义:一个基本块是指程序中一顺序执行的语句序列,其中只有一个入口和一个出口。入口是程序第一个语句或转移语句的目标语句,或转移语句的后继第一个语句。出口是程序最后一个语句或转移语句。 2、对中间代码求基本块后,凡是没被纳入某个基本块的语句,则是控制流程无法到达的、也不会被执行的语句,可删去。 3、在基本块范围内的优化称为局部优化。 二、基本块的变换 1、提高运算效率的代数变换; 2、四种保结构变换 1)删除公共子表达式; 2)删除无用代码; 3)重新命名临时变量:引入新的临时变量不影响基本块的运算结果; 4)变换语句次序:当两个语句相互没有引用关系时,变换语句次序也不影响基本块的运算结果。 例如:1) t1:=a+b; 2) t2:=c+d; 3) t1:=t2+b; 其中,1)和2)可交换次序。 三、 基本块的DAG表示 1、DAG图即有向无环图 例: 2、附加信息的DAG图 1)以四元式为结点构造中间代码 的DAG,其中,ni表示结点编号,结点下符号为结点标记,结点右边符号为附加标识符。 2)基本块中各种四元式及对应DAG图的结点形式: (0)A:=B (:=,B,_,A) (1)A:=op B (op,B,_,A) (2)A:=B op C (:=,B,C,A) (3)A:=B[C] (=[],B[C],_,A)或(=[],B,C,A) (4)if B rop C goto(s) (jrop,B,C,(s)) (5)D[C]:=B ([]=,B,_,D[C]) (6)goto (s) (j,_,_,(s)) 3)按基本块后继结点数,可将四元式分为四类:0型,1型,2型,3型 4)对由0、1、2型四元式构成的基本块,其DAG构造算法描述如教材P242所示。 4) DAG的应用例子:构造右边所示基本块B1的的DAG。 根据DAG结点原来的构造顺序重写四元式如下: 四、DAG构造算法的讨论 1、对于数组元素赋值、间接赋值、多变量共享一单元的情况,应修改DAG构造算法,否则会引起DAG与代码不等价的问题;   例:X:=A[I]; A[J]=Y; Z:=A[I] 是否可变换为: X:=A[I]; Z:=A[I]; A[J]=Z ?  问题:当I=J 时,对A[J]的赋值即对A[I]的赋值。 2、解决方法:在适当的时候“注销”引发问题的标识符,其所代表的变量不再取该点的值。若在此后该变量的值还要引用,则需要重新构造一个以它为标记的叶结点。 11.3 控制流分析与循环优化 一、基本问题: 1、循环的概念:即程序中可能反复执行的代码。 2、如何找出程序的循环?   利用控制流(程)图来查找循环。 3、找出循环后如何优化?   代码外提、删除归纳变量、强度削弱。 二、控制流图 1、控制流图即具有只唯一首结点的有向图。 2、控制流图可表示为三元式(N,E,n0)。 3、以N表示程序的基本块,E表示基本块间的流程关系。这样的图称为程序流图。 例:图中的循环有: {6} {4,5,6,7} {2,3,4,5,6,7} 强连通但不是循环的例子: {2,4},{2,3,4},{4,6,7}, {4,5,7} 四、 循环的查找 1、为找出循环,需分析流图中的控制关系; 2、从流图的首结点(入口)开始,到n如果必须经m,则称m是n的必经结点。记作:m DOM n; 3、n的所有必经点的集合,称必经结点集,记作D(n); 4、求必经点集的算法:见教材P249的迭代算法。newD={n} 5、例子: 6、循环的查找算法 1)通过必经点集求回边,利用回边即可求出循环; 2)回边:设a?b是一条有向边,如b DOM。 a,则称a?b是流图中的一条回边。 3)例子: 图中回边有:6?6,7?4,4?2; 对于回边n?d,存在循环以d为入口点,以{d,n}∪ {存在可达n

文档评论(0)

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

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

1亿VIP精品文档

相关文档