ch10--代码优化

ch10--代码优化

ID:34510581

大小:402.07 KB

页数:39页

时间:2019-03-07

ch10--代码优化_第1页
ch10--代码优化_第2页
ch10--代码优化_第3页
ch10--代码优化_第4页
ch10--代码优化_第5页
资源描述:

《ch10--代码优化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第10章代码优化LIWensheng,SCST,BUPT知识点:基本块优化循环优化窥孔优化代码优化10.1优化概述10.2基本块优化10.3循环优化10.4窥孔优化小结WenshengLiBUPT210.1优化概述代码优化程序的任务将前端产生的中间代码转换为等价的目标代码代码优化程序的要求等价变换提高目标代码的执行速度减少目标代码占用的空间代码优化程序的地位目标代码生成之前的中间代码优化WenshengLiBUPT目标代码生成之后的目标代码优化3代码优化程序的位置源程序中间中间目标前端中间代码优化程序代码生成程序目标代码优化程序代码代码代码目标代码

2、控制流分析数据流分析代码变换WenshengLiBUPT4优化的主要种类基本块优化基本块内进行的优化常数合并与传播、冗余子表达式的删除、复制传播、削弱计算强度、死代码的删除等循环优化在循环语句所生成的中间代码序列上进行的优化循环展开、代码外提、削弱计算强度、删除归纳变量等全局优化在非线性程序段上(含多个基本块)进行的优化窥孔优化WenshengLiBUPT在目标代码上进行的优化删除冗余的传送指令、删除死代码、控制流优化、强度削弱及代数化简等510.2基本块优化一、常数合并及常数传播二、删除冗余的公共表达式三、复制传播四、削弱计算强度五、改变计算

3、次序WenshengLiBUPT6一、常数合并及常数传播常数合并:将能在编译时计算出值的表达式用其相应的值替代x=2+3+y可代之以:x=5+y常数传播:用在编译时已知的变量值代替程序正文中对这些变量的引用PI:=3.14;D-to-R:=PI/180.0;3.14/180.00.01744i:=0i:=0...WenshengLiBUPT10:i:=i+110:i:=0+1a[i]:=9.0.........?ifi<10goto10ifi<10goto10a[j]:=3.0b:=a[i]7常数合并的实现在符号表中增加两个信息域标志域:指示当前是否存在与该

4、变量相关的常数。常数域:如果常数存在,则该域存放的即是与该变量相应的当前常数值。常数合并时,注意事项:不能将结合律与交换律用于浮点表达式,因为浮点运算的精度有限,这两条定律并非是恒真的。不应将任何附加的错误引入WenshengLiBUPT8二、删除冗余的公共表达式在一个基本块中,当第一次对表达式E求值之后,如果E中的变量都没有改变,再次对E求值,则除E的第一次出现之外,其余的E都是冗余的公共表达式。删除冗余的公共表达式,用第一次出现时的求值结果代替重复求值的结果。(1)a:=b+cWenshengLiBUPT(2)b:=a-d(3)c:=b+c(4)d:

5、=ab-d9举例B4(4)t1:=4*i(4)t1:=4*i(5)t2:=a-4(5)t2:=a-4(6)t3:=4*i(6’)t3:=t1(7)t4:=a-4(7’)t4:=t2(8)t5:=t4[t3](8)t5:=t4[t3](9)t6:=4*i(9’)t6:=t1(10)t7:=b-4(10)t7:=b-4(11)t8:=t7[t6](11)t8:=t7[t6](12)t9:=t5+t8(12)t9:=t5+t8(13)t2[t1]:=t9(13)t2[t1]:=t9WenshengLiBUPT(14)t10:=i+1(14)t10:=i+1(15)i:=t

6、10(15)i:=t10(16)gotoB2(16)gotoB210三、复制传播为减少重复计算,可以利用复制传播来删除公共表达式思想:在复制语句f:=g之后,尽可能用g代替f(4)t:=4*i(4)t:=4*i11(5)t:=a-4(5)t:=a-422(6’)t:=t(6’)t:=t3131(7’)t:=t(7’)t:=t4242(8)t:=t[t](8’)t:=t[t]543521(9’)t:=t(9’)t:=t6161(10)t:=b-4(10)t:=b-477(11)t:=t[t](11’)t:=t[t]876871(12)t:=t+t(12)t:=t+

7、t958958WenshengLiBUPT(13)t[t]:=t(13)t[t]:=t219219(14)t:=i+1(14)t:=i+11010(15)i:=t(15)i:=t1010(16)gotoB(16)gotoB2211删除死代码死代码:如果对一个变量x求值之后却不引用它的值,则称对x求值的代码为死代码。死块:控制流不可到达的块称为死块。如果一个基本块是在某一条件为真时进入执行的,经数据流分析的结果知该条件恒为假,则此块是死块。如果一个基本块是在某个条件为假时才进入执行,而该条件却恒为真,则这个块也是死块。在确定一个基本块是死块之前,需要检查

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。