- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章-代码优化.pptx
第10章 代码优化???代码优化的目标减少目标程序所占用的存储空间;(空间少)提高目标程序的运行速度。(时间短) 优化可以在编译的不同阶段进行,通常优化可以再中间代码和目标代码生成之后进行。本章讨论的是对中间代码进行等价变换。代码优化的分类 根据优化所涉及的程序范围,中间代码优化分为三类:局部优化循环优化全局优化 在整个程序范围内进行的优化。 对一段顺序语句序列优化。 对中循环的代码序列优化。§10.1 基本块与程序控制流图一、基本块基本块:是指程序中一顺序执行的语句序列,其中只有一个入口语句(第一个语句)和一个出口语句(最后一个语句)。 对于一个基本块来说,执行时只能从其入口语句进入,从其出口语句退出。 根据基本块的定义,它是一个按顺序执行的代码序列,而且只能从它的唯一入口进入,从其唯一的出口退出,期间不发生任何分叉。任何控制转移四元式出口语句所转向的目标语句入口语句入口语句 1. 程序的第一个语句;或者, 2. 条件转移语句或无条件转移语句的转 移目标语句;或者 3. 紧跟在条件转移语句后面的语句。划分基本块的步骤1、求四元式序列中各个基本块的入口语句。2、对每一入口语句,构造所属的基本块,该基本块由:(1)该入口语句到下一入口语句(不包括下一入口语句)之间的语句序列组成;或,(2)该入口语句到一转移语句(包括该转移语句)之间的语句序列组成;或,(3)该入口语句到一停语句(包括该停语句)之间的语句序列组成。3、凡是未包含在某一基本块中的语句,都是程序中控制流程不可达的语句,可删除它们。例子 (1) read a (2) read b (3) r:=a mod b (4) if r=0 goto (8) (5) a:= b (6) b:= r (7) goto (3) (8) write b (9) haltB1B2B3B4二、程序控制流程图(流图)定义:以基本块为结点,控制程序流向作 为有向边,画出的有向图称为流图。特点: 具有唯一首结点的有向图; 从首结点开始到流图中任何结点都有通路。 如果一个结点的基本块的入口语句是程序的第一条语句,则称此结点为首结点。一个控制流程图可表示成一个三元组:G=(N,E,n0)N:所有结点(基本块)集;E:所有有向边集;n0 :首结点。有向边 当下述条件有一个成立时,从结点i有一有向边引向结点j:① 基本块j在程序的位置紧跟在i后,且i的出口语句不是无条件转移或停语句;② i的出口是goto(S)或if goto(S),而(S)是j的入口语句。 i j例子:构造以下程序的流图 (1) read a (2) read b (3) r:=a mod b (4) if r=0 goto (8) (5) a:= b (6) b:= r (7) goto (3) (8) write b (9) haltB1B2B3B4B1B2B4B3§10.2 局部优化局部优化是指基本块内的优化。对于一个给定的程序,可以把它划分为一系列的基本块。在各个基本块内分别进行优化。一、局部优化种类 在一个基本块内,可以进行合并已知量、删除公共子表达式和删除无用赋值三种优化措施。 合并已知量是指在编译时就对表达式中能计算的部分先计算,并用该值替换这部分表达式,而不必生成相应的代码。 变量A被定值后不再被引用或未经引用又发生了对A的第二次定值,则前一定值为无用赋值,应删掉。 删除公共子表达式就是使基本块内相同的子表达式只计算一次,把重复计算的表达式删去,从而避免多余的运算。二、基本块的DAG表示DAG Directed Acyclic Graph 无环路有向图定义:(1)在一个有向图中,若结点ni有弧指向结点nj,则ni是nj的父结点,nj是ni的子结点;(2)若n1,n2,…,nk间存在有向弧n1?n2?…?nk,则称n1到nk之间存在一条通路,若n1=nk,则称该通路为环路;(3)若有向图中任意通路都不是环路,则称该图为无环路有向图(DAG)。基本块的DAG表示优化中用到的有向图是一种结点带有下述标记或附加信息的DGA:(1) 图的叶结点以一标识符或常数做标记,表示该结点代表该变量或常数的值。(2) 图的内部结点以一运算符作为标记;(3) 图中各个结点上可能附加一个或多个标识符,表示这些标识符具有该结点所代表的值,简称附标。四元式对应的DAG结点形式按其四元式对应结点的后继个数分成四种类型:0型、1型、2型、3型。0型:2型:1型:例子:构造以下基本块的DAG(1) T0:=3.14(2) T1:=2*T0(3) T2:=R+r(4) A:=T1*T2(5) B:=A(6) T3:=2*T0(7) T4:=R+r(8) T5:=T3*T4(9) T6:=R-r(10) B:=T5*T6三、用D
文档评论(0)