- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈工大编译原理第八章
第八章 代码优化 逐条语句进行的代码生成策略经常产生含有大量冗余指令和次最优结构的目标代码。 若存在,且其左右子结点为NODE(B),NODE(c),让n等于找到的结点; n3 n4 R r n1 + 公共表达式 T2 如果A无定义,则把A附加到结点n上并令NODE(A)=n;否则先把A从NODE(A)结点上的附加标识符集中删除,再把A附加到新结点n上并令NODE(A)=n 下面是前面介绍的基本块的DAG生成过程 删除无用赋值 ③ T2=R+r 如果不存在,则建立这样的结点,让n等于建立的结点 否则,查看OP结点, n1 n7 n2 n6 n8 n5 n3 n4 3.14 T0 6.28 T1 R r + T2 * A ,B ,T3 ,T4 ,T5 - T6 * B DAG 生成过程 ① T0=3.14 ② T1=2*T0 ③ T2=R+r ④ A=T1*T2 ⑤ B=A ⑥ T3=2*T0 ⑨ T6=R-r ⑩B=T5*T6 ⑧ T5=T3*T4 ⑦ T4=R+r 此时应去掉B n1 n7 n2 n6 n8 n5 n3 n4 3.14 T0 6.28 T1 R r + T2 * A ,T3 ,T4 ,T5 - T6 * B 生成 DAG ① T0=3.14 ② T1=6.28 ③ T3=6.28 ④ T2=R+r ⑤ T4=T2 ⑥ A=6.28*T2 ⑦ T5=A ⑧ T6=R-r ⑨ B=A*T6 由DAG生成的中间代码G’ G’中已合并了已知量② ⑥ ⑤为无用赋值,G’已删除 ③ ⑦是公共子表达式,删除 ① T0=3.14 ② T1=2*T0 ③ T2=R+r ④ A=T1*T2 ⑤ B=A ⑥ T3=2*T0 ⑦ T4=R+r ⑧ T5=T3*T4 ⑨ T6=R-r ⑩ B=T5*T6 假设T0、T1、T2、T3、T4、T5、T6在后面的基本块中都不使用, S1=R+r A=6.28*S1 S2=R-r B=A*S2 在基本块中应用:合并已知量、临时变量改名等优化技术,可将上述代码变换为: 8.3 循环优化 8.3.1代码外提 实行代码处提时,在循环入口处建立一个新结点,称为前置结点 循环中的代码优化可采用: 代码外提、强度削弱和删除归纳变量 循环中外提的代码将通通外提到前置结点中。 对下面程序段: Int a[10,10] For I=1 to 10 do A[I,2*j]=A[I,2*j]+1 其生成的中间代码为: * * 1、源程序级:局部优化、循环优化、全局优化 1、节省时间 2、节省空间 二、优化技术 一、优化目的 2、目标代码级的优化 三、优化原则 1、等价原则 2、有效原则 3、合算原则 Void quicksort(a,m,n); Int m,n,a[]; { int I,j; int v,x; if(n=m) return; I=m-1;j=n;v=a[n] While(1){ Do {I=I+1;}while (a[I]v); Do{j=j-1;}while(a[j]v); If(I=j)break; X=a[I];a[I]=a[j];a[j]=x; } X=a[I];a[I]=a[n];a[n]=x; Quicksort(m,j);quicksort(I+1,n); } 例:快速排序程序 8.1 优化的主要种类 i=m-1 j=n t1=4*n v=a[t1] i=i+1 t2=4*i t3=a[t2] If t3v goto B2 j=j-1 t4=4*j t5=a[t4] If t5v goto B3 If I=j goto b6 t11=4*I x=a[t11] t12=4*I t13=4*n t14=a[t13] a[12]=t14 t14=4*n a[15]=x t6=4*I x=a[t6] t7=4*i t8=4*j t9=a[t8] a[t7]=t9 t10=4*j a[t10]x goto b2 中间代码程序段 B1 B6 B5 B4 B3 B2 i=m-1 j=n t1=4*n v=a[t1] i=i+1 t2=4*i t3=a[t2] if t3v goto B2 j=j-1 t4=4*j t5=a[t4] if t5v goto B3 if i=j goto B6 t11=4*I x=a[t11] t12=4*I t13=4*n t14=a[t13] a[12]=t14 t14=4*n a[
文档评论(0)