编译原理PPT课件第六章中间代码优化.ppt
《编译原理PPT课件第六章中间代码优化.ppt》由会员分享,可在线阅读,更多相关《编译原理PPT课件第六章中间代码优化.ppt(43页珍藏版)》请在三一办公上搜索。
1、局部优化 循环优化,优化目的:提高运行速度,减少存储空间.,第六章 中间代码优化,内容:,第一节 优化概述,薯写霓变头麻奔闹氨恢夫嚼抡黎覆围虑昼靠晚呢缆以储糊婆岔挫峦望购脑编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,2,右面为循环的中间代码:对该段中间代码,可以进行如下优化:1 删除多余运算 见(3),(6)两四元式的 4*I,(6)可以改写为:T4:=T1,从而减少了一次乘法.参见下页四元式表,(1)PROD:=0(2)I:=1,(3)T1:=4*I(4)T2:=addr(A)-4(5)T3:=T2T1(6)T4:=4*I(7)T5:=addr(B)-4(8
2、)T6:=T5T4(9)T7:=T3*T6(10)PROD:=PROD+T7(11)I:=I+1(12)if I=20 goto(3),缕架奸丰镣糙笼瞒疗姆赡稗话货崎品丑犹刮宋向召脱疚邦酿魏冤哭桨没催编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,3,(1)PROD:=0(2)I:=1,(3)T1:=4*I(4)T2:=addr(A)-4(5)T3:=T2T1(6)T4:=T1(7)T5:=addr(B)-4(8)T6:=T5T4(9)T7:=T3*T6(10)PROD:=PROD+T7(11)I:=I+1(12)if I=20 goto(3),2代码外提(4)与
3、(7)每次循环其值都不变,称为循环不变量.可以放到循环前,减少循环中的运算.参见下页四元式表,宇抛尝他耍凌燎蚤徐早哄庙蛛藏涤靶位索祖魁对垫挟漱椭踞棵腊姐冉蜘寻编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,4,(1)PROD:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4,(3)T1:=4*I(5)T3:=T2T1(6)T4:=T1(8)T6:=T5T4(9)T7:=T3*T6(10)PROD:=PROD+T7(11)I:=I+1(12)if I=20 goto(3),3强度削弱 由于每次循环 I 都增加 1,因此,T1递增 4
4、,可把(3)改为T1:=T1+4,放在(11)之后,并在循环前对 I 赋初值 T1:=4*I.(12)改为 goto(5).参见下页四元式表,谤爱听希厉倾晴组掸阎肪磁乙腔定宝听挑笛昏侠禾毋琴天遏购走雄槐佬依编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,5,(1)PROD:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4*I,(5)T3:=T2T1(6)T4:=T1(8)T6:=T5T4(9)T7:=T3*T6(10)PROD:=PROD+T7(11)I:=I+1(3)T1:=T1+4(12)if I=20 got
5、o(5),4变换控制条件 由于 I 只用作循环控制,而 T1=4*I,因此,可用 T1 替换 I,I=20 等价于 T1=80,把(12)改为 if T1=80 goto(5)这样,可以删掉无用的 I.参见下页四元式表,佑字豹授熄橡鞭劝铸泼援兴啊逞公竞蛮嵌厅期嫡窗铆石撰股障梨淘龋悲具编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,6,(1)PROD:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4*I,(5)T3:=T2T1(6)T4:=T1(8)T6:=T5T4(9)T7:=T3*T6(10)PROD:=PROD
6、+T7(3)T1:=T1+4(12)if T1=80 goto(5),5合并已知量 由于(3)中的 I 在(2)赋值后仍然为 1,因此可改为:T1:=46 复写(6)中 T1 复制到 T4,而(6)到(8)之间没有改变T1 和 T4,因此(8)可以改为:T6:=T5T1,从而使(6)式无用.参见下页四元式表,托揩才咙历孤鞭烛诀默峪近酿谋居屈匪笼卧迟矢啊害苔清双筛响菲嵌一若编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,7,(1)PROD:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4,(5)T3:=T2T1(6)
7、T4:=T1(8)T6:=T5T1(9)T7:=T3*T6(10)PROD:=PROD+T7(3)T1:=T1+4(12)if T1=80 goto(5),7删除无用赋值(2)和(6)两四元式为无用四元式,可以删除.最终优化后,得到下页四元式表,竟蹲过挫痒萝钥趟堤禽彝靳受狭竹团涩绳蝇沿闰轰袭玉谁城他濒斩再烽尹编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,8,(1)PROD:=0(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4,(5)T3:=T2T1(8)T6:=T5T1(9)T7:=T3*T6(10)PROD:=PROD+T7(3
8、)T1:=T1+4(12)if T1=80 goto(5),(1)PROD:=0(2)I:=1,(3)T1:=4*I(4)T2:=addr(A)-4(5)T3:=T2T1(6)T4:=4*I(7)T5:=addr(B)-4(8)T6:=T5T4(9)T7:=T3*T6(10)PROD:=PROD+T7(11)I:=I+1(12)if I=20 goto(3),优化前优化后,阀阻隋啤绳饼港笛矽薯尉提崇策付里敖腻定耳迁厢栅私称逊长阁窘跳术掀编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,9,第二节 局部优化,局部优化是指局限于基本块内的优化.一 基本块1 定义:基本块
9、是一顺序执行的中间代码序列,仅包含一个入口 四元式 和一个出口四元式,第一条四元式为入口四元式,最后 一条四元式为出口四元式.中间部分不含转移四元式.2 基本块的划分 给定一四元式程序,可以通过如下算法,划分基本块:,浅瞩辞距箱贯泞桅查祈堪忘齿掘径秽慌虫碴粪北履醒搅呸阴烬叭隆兴毕辉编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,10,基本块划分算法:1)求四元式程序中所有基本入口四元式,包括:a)程序的第一条四元式;b)转移语句转移到的四元式;c)条件语句之后的第一条四元式.2)对每一入口四元式,构造一个基本块:从该入口四元式到下一入口四元式之前的一条四元式,或到
10、一转移语句,或到一停止语句之间的四元式序列 组成.3)凡未纳入这些基本块的四元式,为无用四元式,可以删除.,琳喇寓缀契未寺蹲迹煎九窘苦沪宙稍喻辗闯劣首缴胳桐讯叮分伐斧畏跳碱编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,11,示例:设四元式程序如下:(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,基本入口四元式包括:(1)程序第一条四元式(3)转移语句转移到的四元式(5)条件语句之后的第一条四元式(8)转移语句转移到的四元式由此
11、可以得到四个基本块.(见下页),憾介励锚情碴谗匙粘规勤窘汪炳敛绣合洱满术违燎钠缀安灰俗罐遥币游是编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,12,(8)write(Y)(9)halt,(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),B1,B2,B3,B4,掷胖潍逮目籽符狭早址踊编盒瓷援昂劲涟胰啮步懊氢悯光券纳泥拣脊纵衬编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,13,二 基本块内的优化 基本块内可以进行以下几种优化:合并已
12、知量,删除多余运算(公共子表达式)删除无用赋值 优化手段:DAG 1 DAG 的定义 DAG 是有向无环路图的简称,结点的基本形式如右图:n i 为结点名,val 为结点值标记,op 为结点的运算.,n i,ni1,ni2,op,val,笺动能挛抚蹲晦持暗傅鸟矽描遥垂耘管掺目抠腑帐葫擂捂归民姨斩疏嗡葵编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,14,2 四元式的 DAG 表示 考虑下面三种类型的四元式,DAG表示如右所示0 型:(:=,B,A)1 型:(op,B,A)2 型:(op,B,C,A),n i,B,A,n i,n k,A,B,op,A,n i,ni1
13、,ni2,B,C,op,店据瘸扁奄芭湛嗽敬耗爱悦巫占售验吸晃氰闭擞蒸彝袍奴恐贰铡引樱虹钡编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,15,3 基本块的 DAG 构造算法及优化令 NODE(A)=若 DAG 中存在值标记为 A 的结点 n,则返回 n;否则 返回 null.基本块的 DAG 构造算法如下:(1)令 DAG=null(2)for 基本块的 每一四元式 do 若 NODE(A)未被引用,或有多个值标记,则 删除 值标记 A;/(删除无用赋值)根据四元式类型,分别转到 T0,T1,T2 处 T0:/(:=,B,A)若NODE(B)=null 生成值标记
14、为 B 的叶结点 n否则 令 n=NODE(B);把 A 添加在 n 结点的右侧;返回(2),味生背仲垛宋福慕本驼构氰奔融樱基腻篡炎橇惦老妓叙轮柞拔孜黍真锹坍编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,16,T1:/(op,B,A)若 B 为已知量/合并已知量 执行 op B,得到一新常数 p,若NODE(p)=null 生成值标记为 p 的叶结点 n 否则 令 n=NODE(p);把 A 添加在 n 结点的右侧;返回(2)否则 若 DAG 中存在型如右式的子图 则把 A 添加在 n 结点的右侧;返回(2)/合并多余运算 否则 若NODE(B)=null 生成
15、值标记为 B 的叶结点 n1 否则 令 n1=NODE(B);建立一运算为 op,值标记为 A 的结点 n,从 n 连一边到 n1,返回(2),挎治怎绿糖朗药磷描到绷眨唾贮蜀坞补池每罩匆官苍收亮侯溉偿嚣途障像编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,17,T2:/(op,B,C,A)若 B,C为已知量/合并已知量 执行 op B,得到一新常数 p,若NODE(p)=null 生成值标记为 p 的叶结点 n 否则 令 n=NODE(p);把 A 添加在 n 结点的右侧;返回(2)否则 若 DAG 中存在型如右式的子图 则把 A 添加在 n 结点的右侧;返回(2
16、)/合并多余运算 否则 若NODE(B)=null 生成值标记为 B 的叶结点 n1 否则 令 n1=NODE(B);若NODE(C)=null 生成值标记为 C 的叶结点 n2 否则 令 n2=NODE(C);建立一运算为 op,值标记为 A 的结点 n,从 n 分别连边到 n1,n2,返回(2),授矩梆嘲炎费戳殖涨啪洒寝钉显芹邵棠仗阀曝憨败缸账籽恳窒哄颁利苍谴编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,18,4 示例:设基本块如下:(1)A:=x+y(2)T0:=3.14(3)T1:=2*T0(4)T2:=R+r(5)A:=T1*T2(6)B:=A(7)T
17、3:=2*T0(8)T4:=R+r(9)T5:=T3*T4(10)T6:=R-r(11)B:=T5*T6,兆湘老膀淫毖扎霖忱皮公识档了韶陪碾溯洗蚕叛盛铃效活义籽诸灾炔仓腹编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,19,DAG 如下,3,1,2,x,y,+,A,4,3.14,T0,5,6.28,T1,T3,6,R,7,r,8,T2,T4,10,T6,9,A,B,T5,11,B,+,-,*,*,览艾宏恤户腻赁吓滥额挽帖旭痛球聋磺仟锑闲包流备抗系相榔炮去记糙蝗编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,20,生成DAG 后,实质上
18、已经进行了局部优化,再把 DAG 还原得到如下四元式:(1)T0:=3.14(2)T1:=6.28(3)T3:=6.28(4)T2:=R+r(5)T4:=T2(6)A:=6.28*T2(7)T5:=A(8)T6:=R-r(9)B:=A*T6,稍沥册叔寝戌眷兆绿聊宠启育绵颗疗耍晃新俯纽崇顷喉村肇拂津籽锭俘匠编译原理PPT课件第六章 中间代码优化编译原理PPT课件第六章 中间代码优化,21,第三节 循环优化,循环是由循环语句,if 及 goto 语句构成.为了找出中间代码程序中的所有循环,就要对程序的流程进行分析,流程是以基本块为单位的,因为基本块内无循环.一 控制流程图与循环的定义1控制流程图的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 PPT 课件 第六 中间 代码 优化
链接地址:https://www.31ppt.com/p-4806063.html