第10章优化.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文档。上传文档
查看更多
第十章 优化 对程序等价变换,生成更有效的目标代码 等价原则 有效原则 合算原则 10.1代码优化常用方法 例:void quicksort(int m,int n); {int i,j,v,x; if(n=m) return; i =m-1;j=n; v=a[n]; B1 While(1){ do i=i+1 while (a[i]v); B2 do j=j-1 while (a[j]v); B3 if (i=j)break; B4 x=a[i]; a[i]=a[j];a[j]=x;} B5 x=a[i]; a[i]=a[n];a[n]=x; B6 quicksort(m, j); quicksort(i+1, n); } 10.3 循环优化 代码外提 将循环中的不变运算提到循环体外,在循环入口结点前建立前置结点,循环中外提代码放入前置结点中 循环不变运算外提的条件 1、当把循环不变运算A:=B op C外提到循环前置结点时,要求该不变运算所在的结点是循环所有出口结点的必经结点; 2、当把循环不变运算A:=B op C外提时,循环中其它地方不再有A的定值点; 3、当把循环不变运算A:=B op C外提时,循环中A的所有引用点都是且仅仅是这个定值所能到达的; 代码外提算法 求出循环中的所有不变运算; 对所求得的不变运算A:=B或A:=B op C,检查它是否同时满足 1、不变运算所在的结点是循环所有出口结点的必经结点; 2、不变运算在循环中其它地方未再定值; 3、循环中所有A的引用点只有在不变运算中A的定值才能到达 或满足: 以上条件2、3,并且A在离开循环后不再活跃。 将满足条件的不变运算按顺序外提到循环的前置结点; 循环优化---强度削弱 将循环中执行时间较长的运算替换成执行时间较短的运算 若循环中有I的递归赋值I:=I?C(C是循环不变量),且循环中T的赋值运算可化为 T:=C1*I?C2( C1、C2是循环不变量)则T的赋值运算可以强度削弱 循环优化---删除归纳变量 基本归纳变量:若循环中有对I的唯一形式的赋值I:=I?C(C是循环不变量),则I是基本归纳变量 归纳变量:若I是基本归纳变量,循环中J的赋值运算可化为I的同一线性函数J:=C1*I?C2 ( C1、C2是循环不变量)则T是归纳变量 强度削弱和删除归纳变量算法 找出循环中所有基本归纳变量 找出循环中所有其它归纳变量及其与已知基本归纳变量的线性函数关系 对每一归纳变量进行强度削弱 删除对归纳变量的无用赋值 删除基本归纳变量 (1)I:=1 (2)if XY goto B3 (3)I:=2 (4)X:=X+1 (5)Y:=Y-1 (6)if Y20 goto B5 (7)J:=I B1 B2 B3 B4 B5 问题:能否将I:=2外提? 若程序执行流程是: B2,B4,B5则 J的值为? 例一: (1)I:=1 (2)if XY goto B3 (3)I:=2 (4)X:=X+1 (5)Y:=Y-1 (6)if Y20 goto B5 (7)j:=I B1 B2 B3 B4 B5 I:=2 B2’ 若程序执行流程是: B2,B4,B5则 J的值为? 问题:若出循环后不再引用该I的值,能否将I:=2外提? (1)I:=1 (2) I:=3 (3)if XY goto B3 (4)I:=2 (5)X:=X+1 (6)Y:=Y-1 (7)if Y20 goto B5 (8)j:=I B1 B2 B3 B4 B5 若程序执行流程是: B2,B3,B4,B2,B4,B5则J的值为? 例二: 问题:能否将I:=3外提? (1)I:=1 (3)if XY goto B3 (4)I:=2 (5)X:=X+1 (6)Y:=Y-1 (7)if Y20 goto B5 (8)j:=I B1 B2 B3 B4 B5 I:=3 B2’ 若程序执行流程是: B2,B3,B4,B2,B4,B5则J的值为? 原因:循环中(B3块)重新对A定值 I:=1 if XY goto B3 A:=I+1 X:=X+1 I:=2 Y:=Y-1 if Y20 goto B5 J:=A B1 B2 B3 B4 B5 例三: 若程序执行流程是: B2,B3,B4,B2,B4,B5则J的值为? 问题:能否将B4中的I:=2外提? I:=1 if XY goto B3 A:=I+1 X:=X+1 Y:=Y-1 if Y20 goto B5 j:=A B1 B2 B3 B4 B5 I:=2 B2’ 若程序执行流程是: B2,B3,B4,B2,B4,B5则J的值为? 原因:循环中B3的I的引用点,B

文档评论(0)

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

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

1亿VIP精品文档

相关文档