第5章代码优化解说.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
通过上述各种优化,最终得到图5–25的优化结果。比较图5–21和图5–25可知:B2和B3中的四元式从4条减为2条,而且一条是由乘法变为加法;B5中的四元式由9条变为3条,B6中的四元式由8条变为2条。以上这些优化对循环执行来说,效果是非常明显的。虽然B1的四元式由4条变为现在的B1和B2共6条,但因其仅被执行一次,所以影响甚微。 图5–24 强度削弱后的程序流图 图5–25 删除归纳变量后的程序流图 例5.8 试对图5-17给定的程序流图进行强度削弱优化。 [解答] 由图5–17的B3看到,T2是递归赋值的变量,每循环一次增加一个常量10。因T3=T2 +T1计算T3值时要引用T2的值,它的另一运算对象是循环不变量T1,所以每循环一次,T3值的增量与T2相同,即常数10。因此,我们可以对T3进行强度削弱,即将T3=T2 +T1外提到前置结点B2中,同时在T2=T2 +10的后面给T3增加一个常量10。进行以上强度削弱后的结果如图5–18所示。 图5–17 例5.8程序流图 图5–18 例5.8强度削弱后的流图 3.删除归纳变量 如果循环中对变量I只有惟一的形如I=I±C的赋值,且其中C为循环不变量,则称I为循环中的基本归纳变量。如果I是循环中一基本归纳变量,J在循环中的定值总是可化归为I的同一线性函数,也即J=C1*I±C2,其中C1和C2都是循环不变量,则称J是归纳变量,并称它与I同族。一个基本归纳变量也是一归纳变量。 一个基本归纳变量除用于其自身的递归定值外,往往只在循环中用来计算其它归纳变量以及控制循环的进行。此时,可以用同族的某一归纳变量来替换循环控制条件中的这个基本归纳变量,从而达到将这个基本归纳变量从流图中删去的目的。这种优化称为删除归纳变量或变换循环控制条件。 由于删除归纳变量是在强度削弱以后进行的,因此,我们一并给出强度削弱和删除归纳变量的算法如下: (1) 利用循环不变运算信息,找出循环中所有基本归纳变量。 (2) 找出所有其它归纳变量A,并找出A与已知基本归纳变量X的同族线性函数关系FA(X);即: ① 在L中找出形如A=B*C、A=C*B、A=B/C、A=B±C、A=C±B的四元式,其中B是归纳变量,C是循环不变量。 ② 假设找出的四元式为S:A=C*B,这时有: i. 如果B就是基本归纳变量,则X就是B,A与基本归纳变量B是同族的归纳变量,且A与B的函数关系就是FA(B)=C*B。 ii. 如果B不是基本归纳变量,假设B与基本归纳变量D同族且它们的函数关系为FB(D),那么如果L外B的定值点不能到达S且L中B的定值点与S之间未曾对D定值,则X就是D,A与基本归纳变量D是同族的归纳变量,且A与D的函数关系是FA(D)=C*B=C*FB(D)。 (3) ?(强度削弱)对(2)中找出的每一归纳变量A,假设A与基本归纳变量B同族,而且A与B的函数关系为FA(B)=C1*B+C2,其中C1和C2均为循环不变量,C2可能为0,执行以下步骤: ① 建立一个新的临时变量。如果两个归纳变量A和A都与B同族且FA(B)=FA(B),则只建立一个临时变量。 ② 在循环前置结点原有的四元式后面增加下面的四元式: =C1*B =+C2 (注:实现A=C1*B+C2) 如果C2=0,则无四元式=+C2。 ③ 把循环中原来对A赋值的四元式改为A=。 ④ 在循环中基本的归纳变量B的惟一赋值B=B±E(E是循环不变量)后面增加下面的四元式: (4) 依次考察第(3)步中每一归纳变量A,如果在A=与循环中任何引用A的四元式之间没有对的赋值且A在循环出口之后不活跃,则删除A=并把所有引用A的地方改为引用。 (5) ?(删除基本归纳变量)如果基本归纳变量B在循环出口之后不是活跃的,并且在循环中除在其自身的递归赋值中被引用外,只在形为if B rop Y goto Z(或if Y rop B goto Z)中被引用,则: ① 选取一与B同族的归纳变量M,并设FM(B)=C1*B+C2(尽可能使所选M的FM(B)简单,并且可能的话,使M是循环中其它四元式要引用的或者是循环出口之后的活跃变量)。 ② 建立一临时变量R,并用下列四元式:

文档评论(0)

1112111 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档