页数:82页文件大小:330.2 KB来源: 编译原理ppt课件
本课件讲解代码优化,先给出优化的原则与级别,再介绍基本块划分、程序流图与基本块的 DAG 表示,实现合并已知量、删除公共子表达式等局部优化,最后展开必经结点与循环查找、代码外提、强度削弱等循环优化技术。
第十章优化
第十章优化(续)
第十章优化
10.1概述
10.1概述(续)
10.1概述
intm,n;{inti,j;intv,x;if(n<=m)return;i=m-1;j=n;v=a[n];while(1){doi=i+1;while(a[i]<v);doj=j-1;while(a[j]>v);if(i>=j)break;x=a[i];a[i]=a[j];a[j]=x;}x=a[i];a[i]=a[n];a[n]=x;quicksort(m,j);quicksort(i+1,n);}
10.1概述(续)
中间代码程序段i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]if T3<v goto B2B2j:=j-1T4:=4*jT5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4T6:=4*ix:=a [T6]T7:=4*iT8:=4*jT9:=a [T8]a [T7]=T9T10:= 4*ja [T10]=xgoto B2B5T11:=4*ix:=a [T11]T12:=4*iT13:=4*nT14:=a [T13]a [T12]=T14T15:= 4*na [T15]=xB6
10.1概述
中间代码程序段i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]if T3<v goto B2B2j:=j-1T4:=4*jT5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4T6:=4*ix:=a [T6]T7:=4*iT8:=4*jT9:=a [T8]a [T7]=T9T10:= 4*ja [T10]=xgoto B2B5T11:=4*ix:=a [T11]T12:=4*iT13:=4*nT14:=a [T13]a [T12]=T14T15:= 4*na [T15]=xB6
10.1概述(续)
删除公用子表达式后i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]if T3<v goto B2B2j:=j-1T4:=4*jT5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4T6:= T2x:=a [T6]T7:= T6T8:= T4T9:=a [T8]a [T7]=T9T10:= T8a [T10]=xgoto B2B5T11:= T2x:=a [T11]T12:= T11T13:= T1T14:=a [T13]a [T12]=T14T15:= T13a [T15]=xB6
10.1概述
复写传播i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]if T3<v goto B2B2j:=j-1T4:=4*jT5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4T6:= T2x:=a [T6]T7:= T6T8:= T4T9:=a [T8]a [T7]=T9T10:= T8a [T10]=xgoto B2B5T11:= T2x:=a [T11]T12:= T11T13:= T1T14:=a [T13]a [T12]=T14T15:= T13a [T15]=xB6
10.1概述(续)
复写传播(一)后i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]if T3<v goto B2B2j:=j-1T4:=4*jT5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4T6:= T2x:=a[T2]T7:= T2T8:= T4T9:=a [T4]a [T2]=T9T10:= T4a [T4]=xgoto B2B5T11:= T2x:=a [T2]T12:= T2T13:= T1T14:=a [T1]a [T2]=T14T15:= T1a [T1]=xB6
10.1概述
复写传播(一)后i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]if T3<v goto B2B2j:=j-1T4:=4*jT5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4T6:= T2x:=a[T2]T7:= T2T8:= T4T9:=a [T4]a [T2]=T9T10:= T4a [T4]=xgoto B2B5T11:= T2x:=a [T2]T12:= T2T13:= T1T14:=a [T1]a [T2]=T14T15:= T1a [T1]=xB6
10.1概述(续)
复写传播(二)后i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]if T3<v goto B2B2j:=j-1T4:=4*jT5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4T6:= T2x:=T3T7:= T2T8:= T4T9:=T5a [T2]=T5T10:= T4a [T4]= T3goto B2B5T11:= T2x:=T3T12:= T2T13:= T1T14:= va [T2]=vT15:= T1a [T1]= T3B6
10.1概述
删除无用赋值i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]if T3<v goto B2B2j:=j-1T4:=4*jT5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4T6:= T2x:=T3T7:= T2T8:= T4T9:=T5a [T2]=T5T10:= T4a [T4]= T3goto B2B5T11:= T2x:=T3T12:= T2T13:= T1T14:= va [T2]=vT15:= T1a [T1]= T3B6
10.1概述(续)
删除无用赋值后i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]if T3<v goto B2B2j:=j-1T4:=4*jT5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4a [T2]=T5a [T4]= T3goto B2B5a [T2]=va [T1]=T3B6
10.1概述
强度削弱i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]if T3<v goto B2B2j:=j-1T4:=4*jT5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4a [T2]=T5a [T4]= T3goto B2B5a [T2]=va [T1]=T3B6
10.1概述(续)
强度削弱后i:=m-1j:=nT1:=4*nv:=a[T1]T2:=4*iT4:=4*jB1i:=i+1T2:= T2+4T3:=a[T2]if T3<v goto B2B2j:=j-1T4:= T4-4T5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4a [T2]=T5a [T4]= T3goto B2B5a [T2]=va [T1]=T3B6
10.1概述
删除归纳变量i:=m-1j:=nT1:=4*nv:=a[T1]T2:=4*iT4:=4*jB1i:=i+1T2:= T2+4T3:=a[T2]if T3<v goto B2B2j:=j-1T4:= T4-4T5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4a [T2]=T5a [T4]= T3goto B2B5a [T2]=va [T1]=T3B6
10.1概述(续)
删除归纳变量后i:=m-1j:=nT1:=4*nv:=a[T1]T2:=4*iT4:=4*jB1T2:= T2+4T3:=a[T2]if T3<v goto B2B2T4:= T4-4T5:=a[T4]if T5>v goto B3B3if T2>=T4goto B6B4a [T2]=T5a [T4]= T3goto B2B5a [T2]=va [T1]=T3B6
10.1概述
中间代码程序段i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]if T3<v goto B2B2j:=j-1T4:=4*jT5:=a[T4]if T5>v goto B3B3if i>=j goto B6B4T6:=4*ix:=a [T6]T7:=4*iT8:=4*jT9:=a [T8]a [T7]=T9T10:= 4*ja [T10]=xgoto B2B5T11:=4*ix:=a [T11]T12:=4*iT13:=4*nT14:=a [T13]a [T12]=T14T15:= 4*na [T15]=xB6
10.1概述(续)
删除归纳变量后i:=m-1j:=nT1:=4*nv:=a[T1]T2:=4*iT4:=4*jB1T2:= T2+4T3:=a[T2]if T3<v goto B2B2T4:= T4-4T5:=a[T4]if T5>v goto B3B3if T2>=T4goto B6B4a [T2]=T5a [T4]= T3goto B2B5a [T2]=va [T1]=T3B6
10.2局部优化
10.2局部优化(续)
10.2局部优化
划分四元式程序为基本块的算法:1.求出四元式程序中各个基本块的入口语句:1)程序第一个语句,或2)能由条件转移语句或无条件转移语句转移到的语句,或3)紧跟在条件转移语句后面的语句。
10.2局部优化(续)
划分四元式程序为基本块的算法:2.对以上求出的每个入口语句,确定其所属的基本块。它是由该入口语句到下一入口语句(不包括该入口语句)之间的语句序列组成的。入口语句n……入口语句m
10.2局部优化
划分四元式程序为基本块的算法:2.对以上求出的每个入口语句,确定其所属的基本块。它是由该入口语句到下一入口语句(不包括该入口语句)、或到一转移语句(包括该转移语句)之间的语句序列组成的。入口语句n……入口语句m入口语句n……转移语句m
10.2局部优化(续)
划分四元式程序为基本块的算法:2.对以上求出的每个入口语句,确定其所属的基本块。它是由该入口语句到下一入口语句(不包括该入口语句)、或到一转移语句(包括该转移语句)、或一停语句(包括该停语句)之间的语句序列组成的。入口语句n……入口语句m入口语句n……转移语句m入口语句n……停语句m
10.2局部优化
划分四元式程序为基本块的算法:2.对以上求出的每个入口语句,确定其所属的基本块。它是由该入口语句到下一入口语句(不包括该入口语句)、或到一转移语句(包括该转移语句)、或一停语句(包括该停语句)之间的语句序列组成的。3.凡未被纳入某一基本块中的语句,可以从程序中删除。
10.2局部优化(续)
例:划分基本块(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)halt1.求出四元式程序中各个基本块的入口语句:1)程序第一个语句,或2)能由条件转移语句或无条件转移语句转移到的语句,或3)紧跟在条件转移语句后面的语句。
10.2局部优化
例:划分基本块(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)halt1.求出四元式程序中各个基本块的入口语句:1)程序第一个语句,或2)能由条件转移语句或无条件转移语句转移到的语句,或3)紧跟在条件转移语句后面的语句。
10.2局部优化(续)
例:划分基本块(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)halt1.求出四元式程序中各个基本块的入口语句:1)程序第一个语句,或2)能由条件转移语句或无条件转移语句转移到的语句,或3)紧跟在条件转移语句后面的语句。
10.2局部优化
例:划分基本块(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)halt1.求出四元式程序中各个基本块的入口语句:1)程序第一个语句,或2)能由条件转移语句或无条件转移语句转移到的语句,或3)紧跟在条件转移语句后面的语句。
10.2局部优化(续)
例:划分基本块(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)halt1.求出四元式程序中各个基本块的入口语句:1)程序第一个语句,或2)能由条件转移语句或无条件转移语句转移到的语句,或3)紧跟在条件转移语句后面的语句。
10.2局部优化
例:划分基本块(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)halt2.对以上求出的每个入口语句,确定其所属的基本块。它是由该入口语句到下一入口语句(不包括该入口语句)、或到一转移语句(包括该转移语句)、或一停语句(包括该停语句)之间的语句序列组成的。
优化措施
优化措施(续)
每个流图以基本块为结点
每个流图以基本块为结点(续)
10.2.2基本块的DAG表示
7.1.2图表示法
7.1.2图表示法(续)
抽象语法树对应的代码
DAG对应的代码
DAG对应的代码(续)
10.2.2基本块的DAG表示
10.2.2基本块的DAG表示(续)
10.2.2基本块的DAG表示
10.2.2基本块的DAG表示(续)
10.2.2基本块的DAG表示
假设DAG各结点信息将用某种适当的数据结构存放(如链表)。另设置一个标识符与结点的对应函数:
10.2.2基本块的DAG表示(续)
0,1,2型四元式的基本块的DAG构造算法对基本块中每一四元式,依次执行以下步骤:1.准备操作数的结点2.合并已知量3.删除公共子表达式4.删除无用赋值
1.准备操作数的结点
1.准备操作数的结点(续)
1.准备操作数的结点
1.准备操作数的结点(续)
1.准备操作数的结点
例10.4试构造以下基本块G的DAG(1)T0:=3.14(2)T1:=2*T0(3)T2:=R+r(4)A:=T1*T2(5)B:=A(6)T3:=2*T0(7)T4:=R+r(8)T5:=T3*T4(9)T6:=R-r(10)B:=T5*T6
1.准备操作数的结点(续)
1.准备操作数的结点
优化后的四元式(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*T6n13.14T0n26.28T1n3n4Rrn5+T2n6*A,B,T3,T4,T5n7T6-n8*BT6
1.准备操作数的结点(续)
优化后的四元式——若只有A和B是出基本块之后活跃的(1)T2:=R+r(2) A:=6.28*T2(3)T6:=R-r(4) B:=A*T6(1)S1:=R+r(2) A:=6.28*S1(3)S2:=R-r(4)B:=A*S2n13.14T0n26.28T1n3n4Rrn5+T2n6*A,B,T3,T4,T5n7T6-n8*BT6
1.准备操作数的结点
10.3循环优化
10.3.1代码外提
10.3.1代码外提(续)
入口结点循环L入口结点循环L前置结点
10.3.1代码外提
代码外提条件for I:=1 to 10 doA[I, 2*J] := A[I, 2*J] + 1
10.3.1代码外提(续)
10.3.1代码外提
10.3.1代码外提(续)
10.3.1代码外提
10.3.1代码外提(续)
10.3.1代码外提
10.3.1代码外提(续)
10.3.1代码外提
代码外提算法
代码外提算法(续)
10.3.2强度消弱
10.3.2强度消弱(续)
10.3.2强度消弱
10.3.2强度消弱(续)
10.3.3删除归纳变量
10.3.3删除归纳变量(续)
10.3.3删除归纳变量
删除归纳变量是在强度削弱以后进行的。强度削弱和删除归纳变量的统一算法框架,其步骤如下:1.利用循环不变运算信息,找出循环中所有基本归纳变量。2.找出所有其它归纳变量A,并找出A与已知基本归纳变量X的同族线性函数关系FA(X)。3.对2中找出的每一归纳变量A,进行强度削弱。4.删除对归纳变量的无用赋值。
5.删除基本归纳变量
5.删除基本归纳变量(续)
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}