优化对代码进行的变换必须遵守以下原则等价原则经.ppt

优化对代码进行的变换必须遵守以下原则等价原则经.ppt

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
优化对代码进行的变换必须遵守以下原则等价原则经;该语句段的中间代码见P274 图10.2 ;i:=m-1; j:=n ; T1:=4*n; v:=a[T1];;一. 删除公共子表达式(多余运算);二. 复写传播;三. 删除无用代码;四. 代码外提;六. 删除归纳变量(图10.4);经前述各种优化处理后,最终的中间代码如下:;10.2 局部优化;1. 求出程序中可做基本块入口的语句,它们是:;3. 代数变换:x:=y**2 可变换为 x:=y*y (强度削弱);另外有许多代数变换可以把基本块计算的表达式集合变换成代数等价的集合。其中常用的变换是那些可以简化表达式或用较快运算代替较慢运算的变换。例如:   x∶=x+0或x∶=x*1   这样的语句可以从基本块中删除而不改变它计算的表达式集合,又如   x∶=y**2   的指数算符通常要用函数调用来实现,使用代数变换,这个语句可由快速、等价的语句   x∶=y*y来代替。   我们从下面例子理解这些变换。   ;有四元式程序:   t1 := 4 - 2   t2 := t1 /2   t3 := a * t2   t4 := t3 * t1   t5 := b + t4   c := t5 * t5   进行合并已知量变换后得到:   t1 := 2   t2 := t1 /2   t3 := a * t2   t4 := t3 * t1   t5 := b + t4   c := t5 * t5   再进行复写传播和删除无用赋值等变换后得到:   t2 := 2 /2   t3 := a * t2   t4 := t3 * 2   t5 := b + t4   c := t5 * t5;再进行合并已知量变换后得到:   t2 := 1   t3 := a * t2   t4 := t3 * 2   t5 := b + t4   c := t5 * t5   再进行复写传播和删除无用赋值等变换后得到:   t3 := a * 1   t4 := t3 * 2   t5 := b + t4   c := t5 * t5 ; 接着使用代数变换后有:   t3 := a   t4 := t3 * 2   t5 := b + t4   c := t5 * t5   使用复写传播和删除无用赋值变换后又有:   t4 := a * 2   t5 := b + t4   c := t5 * t5   再使用代数变换:   t4 := a + a   t5 := b + t4   c := t5 * t5   重新命名临时变量:   t1 := a + a   t5 := b + t1   c := t5 * t5   还可减少临时变量:   t1 := a + a   t1 := b + t1   c := t1 * t1;二. 基本块的DAG(Directed Acycline Graph) 表示及其应用;在一个有向图中,我们称任一有向边ni→nj(或表示为有序对(ni,nj))中的结点ni为结点nj的前驱(父结),结点nj为结点ni的后继(子结)。又称任一有向边序列n1→n2,n2→n3,…,nk-1→nk为从结点n1到结点nk的一条通路。如果其中n1=nk,则称该通路为环路。该结点序列也记为(n1,n2,…,nk)。例如,图1中有向图的通路(n2,n2)和(n3,n4,n3)就是环路。 如果有向图中任一通路都不是环路,则称该有向图为无环路有向图,简称DAG。图2的有向图就是一个DAG。在DAG中,如果(n1,n2,…,nk)是其中一条通路,则称结点n1为结点nk的祖先,结点nk为结点n1的后代。图2中结点n6就是结点n9的祖先,n9是n6的后代。;图1 有向图 ;我们要用到的有向图,是一种其结点带有下述标记或附加信息的DAG:   ① 图的叶结点,即无后继的结点,以一标识符(变量名)或常数作为标记,表示这个结点代表该变量或常数的值。如果叶结点用来代表某变量A的地址,则用addr(A)作为这个结点的标记。通常把叶结点上作为标记的标识符加上下标0,以表示它是该变量的初值。   ② 图的内部结点,即有后继的结点,以一运算符作为标记,表示这个结点代表应用该运算符对其后继结点所代表的值进行运算的结果。   ③ 图中各个结点上可能附加一个或多个标识符,表示这些变量具有该结点所代表的值。 ; 一个基本块的DAG为如下形式的图: (1) 叶子结点(无后继):以一个标识符或常数或变量的地址作为标记。标识符可以0为下标,表示初值; (2) 内部结点(有后继):以运算符为标记;其后继代表运算分量; (3) 各结点可附加多个标识符,表示这些标识符等价,且具有该结点的值。; 上述这种DAG可

文档评论(0)

130****8663 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档