网站大量收购独家精品文档,联系QQ:2885784924

编译原理第九章代码优化.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理第九章代码优化资料

图5–23 复写传播和删除无用赋值后的程序流图 a[T2] = T5 a[T4] = T3 goto B2 i=m-1 j=n T1=4*n v=a[T1] B1 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 a[T2] = v a[T1] =T3 B2 B3 B4 B5 B6 F T F F T T 4.代码外提:没有可外提到循环之外的不变运算。 5.强度削弱 观察图5–23的内循环B3,可以把循环中计算T4值的乘法运算变为在循环前进行一次乘法运算而在循环中进行减法运算。同样,对循环B2中的T2=4*i也可以进行强度削弱。经过强度削弱后的程序流图如图5-24所示。 6.删除归纳变量 由图5–24可知,B2中T2与i之间保持着T2=4*i的线性关系;而B3中T4与j之间保持着T4=4*j的线性关系。在对T2=4*i和T4=4*j进行了强度削弱后,i和j仅出现在条件句if I≥j goto B6中。因此,可以变换归纳变量而把此条件句变换为:if T2≥T4 goto B6。经过这种变换,我们又可以将无用赋值i=i+1和j=j–1删去。最后如图5–25所示。试与开始时比较 图5–24 强度削弱后的程序流图 图5–25 删除归纳变量后的程序流图 a[T2] = T5 a[T4] = T3 goto B2 i=m-1 j=n T1=4*n v=a[T1] i=i+1 T2=T2+4 T3=a[T2] if T3v goto B2 j=j-1 T4=T4-4 T5=a[T4] if T5v goto B3 if T2= T4 goto B6 a[T2] = v a[T1] =T3 T2=4*I T4=4*j T F F F T T B2 B1 B2’ B3 B4 B5 B6 王显荣:代码优化 王显荣:代码优化 第9章 代码优化 9.1 代码优化概述 9.2 局部优化 9.3 控制流程分析和循环优化 9.4 数据流分析 9.1 代码优化概述 代码优化 代码优化的层次 代码优化的评价 代码优化实例 代码优化:时空 寄存器、多处理器、特殊指令优化等 代码优化的层次 窥孔优化:目标代码级别,滑动窗口 局部优化:中间代码级别,以基本块为单位 循环优化:目标代码级别,针对循环 全局优化:中间代码级别,过程内 代码优化评价 优化效率: 优化前后代码性能的提高 基准测试程序,相同运行环境 优化开销: 优化所花费的代价:时间、存储空间等 不同方法对不同程序的优化效果不同 取决于程序本身的算法 不同优化方法同时使用可能有副作用 合并已知量 常数传播 代数化简 强度削弱 复写传播 删除多余运算 循环不变代码外提 变换循环控制条件 删除无用赋值 基本优化技术 常数合并 a = 10 * 5 - b; _tmp0 = 10 ; _tmp1 = 5 ; _tmp2 = _tmp0 * _tmp1 ; _tmp3 = _tmp2 – b; a = _tmp3 ; _tmp0 = 56 ; _tmp1 = _tmp0 – b ; a = _tmp1 ; 常数传播 _tmp3 = 0 ; f0 = _tmp3 ; f0 = 0 ; 代数化简 x+0 = x 0+x = x x*1 = x 1*x = x 0/x = 0 x-0 = x b true = b b false = false b || true = true b || false = b 削弱运算强度 a) i*2 = 2*i = i+i = i2 b) i/2 = (int)(i*0.5) c) f*2 = 2.0 * f = f + f 复写传播 tmp2 = tmp1 ; tmp3 = tmp2 * tmp1; tmp5 = tmp3 * tmp2 ; tmp3 = tmp1 * tmp1 ; tmp5 = tmp3 * tmp1 ; (1) P:=0 (2) I:=1 (3) T1:=4*I (4) T2:=addr(A)-4 (5) T3:=T2[T1] (6) T4:=4*I (7) T5:=addr(B)-4 (8) T6:=T5[T4] (9) T7:=T3*T6 (10) P:=P+T7 (11) I:=I+1 (12) if I=20 goto(3) 优化技术实例: P:=0 for I:=1 to 20 do P:=P+A[I]

文档评论(0)

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

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

1亿VIP精品文档

相关文档