资源描述:
《《中间代码优化》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、局部优化循环优化优化目的:提高运行速度,减少存储空间.第五章中间代码优化内容:第一节优化概述右面为for循环的中间代码:PROD:=0;forI:=1to20doPROD:=PROD+A[I]*B[I]对该段中间代码,可以进行如下优化: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:=T2[T1](6)T4:=4*I(7)T5:=addr(B)-4(8)T6:=T5[T4](9
2、)T7:=T3*T6(10)PROD:=PROD+T7(11)I:=I+1(12)ifI<=20goto(3)2(1)PROD:=0(2)I:=1(3)T1:=4*I(4)T2:=addr(A)-4(5)T3:=T2[T1](6)T4:=T1(7)T5:=addr(B)-4(8)T6:=T5[T4](9)T7:=T3*T6(10)PROD:=PROD+T7(11)I:=I+1(12)ifI<=20goto(3)2>代码外提(4)与(7)每次循环其值都不变,称为循环不变量.可以放到循环前,减少循环中的运算.参见下页四元式表3(1)PROD:=0
3、(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4*I(5)T3:=T2[T1](6)T4:=T1(8)T6:=T5[T4](9)T7:=T3*T6(10)PROD:=PROD+T7(11)I:=I+1(12)ifI<=20goto(3)3>强度削弱由于每次循环I都增加1,因此,T1递增4,可把(3)改为T1:=T1+4,放在(11)之后,并在循环前对I赋初值T1:=4*I.(12)改为goto(5).参见下页四元式表4(1)PROD:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=
4、addr(B)-4(3)T1:=4*I(5)T3:=T2[T1](6)T4:=T1(8)T6:=T5[T4](9)T7:=T3*T6(10)PROD:=PROD+T7(11)I:=I+1(3’)T1:=T1+4(12)ifI<=20goto(5)4>变换控制条件由于I只用作循环控制,而T1=4*I,因此,可用T1替换I,I<=20等价于T1<=80,把(12)改为ifT1<=80goto(5)这样,可以删掉无用的I.参见下页四元式表5(1)PROD:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:
5、=4*I(5)T3:=T2[T1](6)T4:=T1(8)T6:=T5[T4](9)T7:=T3*T6(10)PROD:=PROD+T7(3’)T1:=T1+4(12)ifT1<=80goto(5)5>合并已知量由于(3)中的I在(2)赋值后仍然为1,因此可改为:T1:=46>复写(6)中T1复制到T4,而(6)到(8)之间没有改变T1和T4,因此(8)可以改为:T6:=T5[T1],从而使(6)式无用.参见下页四元式表6(1)PROD:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4(5)T
6、3:=T2[T1](6)T4:=T1(8)T6:=T5[T1](9)T7:=T3*T6(10)PROD:=PROD+T7(3’)T1:=T1+4(12)ifT1<=80goto(5)7>删除无用赋值(2)和(6)两四元式为无用四元式,可以删除.最终优化后,得到下页四元式表7(1)PROD:=0(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4(5)T3:=T2[T1](8)T6:=T5[T1](9)T7:=T3*T6(10)PROD:=PROD+T7(3’)T1:=T1+4(12)ifT1<=80goto(5)(
7、1)PROD:=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)PROD:=PROD+T7(11)I:=I+1(12)ifI<=20goto(3)优化前优化后8第二节局部优化局部优化是指局限于基本块内的优化.一基本块1>定义:基本块是一顺序执行的中间代码序列,仅包含一个入口四元式和一个出口四元式,第一条四元式为入口四元式,最后一条四元式为出口四元式.中间部分不含转移四元式.2>基本块的划分
8、给定一四元式程序,可以通过如下算法,划分基本块:9基本块划分算法:1)求四元式程序中所有基本入口四元式,包括:a)程序的第一条四元式;b)转移语句转移到的四元式;c