《编译原理实践及应用》第7章代码优化课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《编译原理实践及应用》第7章代码优化课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理实践及应用 编译 原理 实践 应用 代码 优化 课件
- 资源描述:
-
1、代码优化代码优化第七章第七章 本章要求本章要求 主要内容主要内容:代码优化的主要功能,局代码优化的主要功能,局部优化、全局优化和循环优化的相关部优化、全局优化和循环优化的相关概念,各种优化技术概念,各种优化技术 重点掌握:重点掌握:代码优化技术,基本块、代码优化技术,基本块、流图、流图、DAG的概念,必经结点、回边、的概念,必经结点、回边、循环的概念,各种优化技术。循环的概念,各种优化技术。代码优代码优化化所地所地位和作位和作用:用:7.1 概述概述实际上很多地方可以对代码的执行效率进行改进,主要讲对中间代码的优化 代码优化:对程序进行等价变换,使得从变换后的程代码优化:对程序进行等价变换,使
2、得从变换后的程序出发,能够生成更有效的目标代码。序出发,能够生成更有效的目标代码。优化分类优化分类 按阶段分按阶段分:与机器无关的优化与机器无关的优化-对中间代码进行对中间代码进行 依赖于机器的优化依赖于机器的优化-对目标代码进行对目标代码进行 根据优化所涉及的程序范围分成根据优化所涉及的程序范围分成:(1)(1)局部优化局部优化:(:(基本块基本块)(2)(2)循环优化循环优化:对循环中的代码进行优化对循环中的代码进行优化 (3)(3)全局优化全局优化:大范围的优化大范围的优化 优化的原则优化的原则等价原则:不改变运行结果等价原则:不改变运行结果有效原则:优化后时间更短,占用空间更少有效原则
3、:优化后时间更短,占用空间更少合算原则:应用较低的代价取得较好的优化效果合算原则:应用较低的代价取得较好的优化效果 宗旨:宗旨:获得较好性能的代码(时间,空间)获得较好性能的代码(时间,空间)等价等价意图、结果之间要权衡意图、结果之间要权衡中间代码优化技术中间代码优化技术 优化工作 数据流分析(data-flow analysis)控制流分析(control-flow analysis)变换(transformations)快速排序程序快速排序程序void quicksort(int m,int n)int i,j,v,x;if(nm)return;i=m-1;j=n;v=an;while(1
4、)do i=i+1;while(aiv);if(i=j)break;x=ai;ai=aj;aj=x;x=ai;ai=an;an=x;quicksort(m,j);quicksort(i+1,n);(1)i=m 1(2)j=n(3)T1=4*n(4)v=aT1(5)i=i+1(6)T2=4*i(7)T3=aT2(8)if T3 v goto(9)(13)if i=j goto(23)(14)T6=4*i(15)x=aT6(16)T7=4*i(17)T8=4*j(18)T9=aT8(19)aT7=T9(20)T10=4*j(21)aT10=x(22)goto(5)(23)T11=4*j(24)x=
5、aT11(25)T12=4*i(26)T13=4*n(27)T14=aT13(28)aT12=T14(29)T15=4*n(30)aT15=x中间代码7.2 基本块的优化基本块的优化 基本块基本块:是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句,入口是其第一个语句,出口是其最后一个语句 如果x:=y+z 则称对x定值定值,引用引用y和z 在一个基本块内的一个名字,在程序中的某个给定点是活跃活跃的,是指如果在程序中它的值在该点之后被引用.入口语句:入口语句:1程序的第一个语句;或者,程序的第一个语句;或者,2条件转移语句或无条件转移语句的转移目标条件转移语句或无条件转移语句的
6、转移目标语句(语句(此处的转移语句包括各种控制的转向,如此处的转移语句包括各种控制的转向,如call,return,end,stop等)等);或者;或者 3紧跟在条件转移语句后面的语句。紧跟在条件转移语句后面的语句。执行:执行:对于一个基本块,执行时只能从其入口进入,对于一个基本块,执行时只能从其入口进入,从其出口退出从其出口退出划分基本块的算法划分基本块的算法求出四元式程序之中各个基本块的入口语句求出四元式程序之中各个基本块的入口语句对每一入口语句,构造其所属的基本块。它对每一入口语句,构造其所属的基本块。它是由该语句到下一入口语句(不包括下一入口是由该语句到下一入口语句(不包括下一入口语句
7、),或到一转移语句(包括该转移语句),语句),或到一转移语句(包括该转移语句),或到一停语句(包括该停语句)之间的语句序或到一停语句(包括该停语句)之间的语句序列组成的。列组成的。凡未被纳入某一基本块的语句,都是程序中凡未被纳入某一基本块的语句,都是程序中控制流程无法到达的语句,因而也是不会被执控制流程无法到达的语句,因而也是不会被执行到的语句,可以把它们删除。行到的语句,可以把它们删除。一般把过程调用语句作为一个单独的基本块一般把过程调用语句作为一个单独的基本块*(1)read x (2)read yB1*(3)r=x mod y (4)if r=0 goto(8)B2*(5)x=y (6)
8、y=r (7)goto(3)B3*(8)write y (9)haltB4例:例:*(1)read x (2)read y*(3)r=x mod y (4)if r=0 goto(8)*(5)x=y (6)y=r (7)goto(3)*(8)write y (9)halt 流图:有向图。将控制流的信息增加到基本块的集合上来表示一个程序。流图以基本块为单位。如果按顺序执行,就画一条有向边。基本块间的关系:(前驱,后继)B1是B2的前驱前驱,B2是B1的后继后继:有一个条件或无条件转移语句从B1的最后一条语句转移到B2的第一条语句;或者 在程序的序列中,B2紧接在B1的后面,并且B1的最后一条语句
9、不是一个无条件转移语句。B1 B2 B4 B3*(1)read x (2)read y*(3)r=x mod y (4)if r=0 goto(8)*(5)x=y (6)y=r (7)goto(3)*(8)write y (9)halt练习练习 f0=0 f1=1 if m=1 goto L3 i=2L1:if i=m goto L3L2:f2=f0+f1 f0=f1 f1=f2 i=i+1 goto L1L3:return m12345f0=0f1=1if m=1 goto L3i=2L1:if i=m goto L3L2:f2=f0+f1f0=f1f1=f2i=i+1goto L1L3:r
10、eturn m1234512345f0=0f1=1if m=1 goto L3i=2L1:if i=m goto L3L2:f2=f0+f1f0=f1f1=f2i=i+1goto L1L3:return m12345快速排序算法中间代码的基本块和流图(1)i=m 1(2)j=n(3)T1=4*n(4)v=aT1(5)i=i+1(6)T2=4*i(7)T3=aT2(8)if T3 v goto(9)(13)if i=j goto(23)(14)T6=4*i(15)x=aT6(16)T7=4*i(17)T8=4*j(18)T9=aT8(19)aT7=T9(20)T10=4*j(21)aT10=x(
11、22)goto(5)(23)T11=4*j(24)x=aT11(25)T12=4*i(26)T13=4*n(27)T14=aT13(28)aT12=T14(29)T15=4*n(30)aT15=x优化技术优化技术1删除公共子表达式删除公共子表达式 如果表达式E已经在前面计算过,并在计算之后E的值没有改变,则称该表达式为公共子表达式。可以避免重复计算。T6=4T6=4*i ix=aT6x=aT6T7=T7=4 4*i iT8=4T8=4*j jT9=aT8T9=aT8aT7=T9aT7=T9T10=T10=4 4*j jaT10=xaT10=xgoto B2goto B2T6=4T6=4*i i
12、x=aT6x=aT6T7=T7=T6T6T8=4T8=4*j jT9=aT8T9=aT8aT7=T9aT7=T9T10=T10=T8T8aT10=xaT10=xgoto B2goto B24*i,4*j重复计算 在更大的范围内删除4*i,4*j的计算,得到:优化技术优化技术2复写传播复写传播T6=T2T6=T2x=Tx=T3 3T7=TT7=T2 2T8=T4T8=T4T9=T9=T5T5aTaT2 2=T=T5 5T10=TT10=T4 4aTaT4 4=T3T3goto B2goto B2T6=T2T6=T2x=aT6x=aT6T7=T6T7=T6T8=T4T8=T4T9=aT8T9=aT
13、8aT7=T9aT7=T9T10=T8T10=T8aT10=xaT10=xgoto B2goto B2T6=T2,x=aT6,之间没有改变T6,因此,可以直接写x=aT2在B2中T3=aT2因此,x=T3优化技术优化技术3删除无用代码删除无用代码aTaT2 2=T=T5 5aTaT4 4=T3T3goto B2goto B2T6=T2T6=T2x=Tx=T3 3T7=TT7=T2 2T8=T4T8=T4T9=T9=T5T5aTaT2 2=T=T5 5T10=TT10=T4 4aTaT4 4=T3T3goto B2goto B2某些变量的赋值无用,在后面的程序中不再有用aTaT2 2=v vaT
展开阅读全文