哈工大 编译原理rcomch81.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:52 大小:271KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

哈工大 编译原理rcomch81.ppt

哈工大编译原理rcomch81.ppt

预览

免费试读已结束,剩余 42 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第八章代码优化1、源程序级:局部优化、循环优化、全局优化Voidquicksort(a,m,n);Intm,n,a[];{intI,j;intv,x;if(n<=m)return;I=m-1;j=n;v=a[n]While(1){Do{I=I+1;}while(a[I]<v);Do{j=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);}i=m-1j=nt1=4*nv=a[t1]如果一个表达式E在前面已经定义过,t6=4*ix=a[t6]t7=4*it8=4*jt9=a[t8]a[t7]=t9t10=4*ja[t10]=xgotob2t11=t2x=a[t11]t12=t11t13=t1t14=a[t13]a[12]=t14t14=t13a[15]=x在B5中t6=t2,而x=a[t6]中引用了t6,i=m-1j=nt1=4*nv=a[t1]复写传播的目的是使某些变量的赋值变为无用i=m-1j=nt1=4*nv=a[t1]i=m-1j=nt1=4*nv=a[t1]我们称这些变量为归纳变量。i=m-1j=nt1=4*nv=a[t1]t2=4*it4=4*j8.2局部优化R=10;Pi=3.14C=2*r*pi2、出口语句①readx②ready③r=xmody④ifr=0goto⑧⑤x=y⑥y=r⑦goto③⑧writey⑨end入口语句:上例的程序流图为:8.2.3基本块的DAG表示及其应用①T0=3.14②T1=2*T0③T2=R+r④A=T1*T2⑤B=A⑥T3=2*T0⑦T4=R+r⑧T5=T3*T4⑨T6=R-r⑩B=T5*T6n1二。约定3、A=B如果NODE(B)没有定义,则建立叶结点,并设置标记B,且让NODE(B)=n等于该结点;4、A=opB如果NODE(B)没有定义,则建立叶结点,并设置标记B,且让NODE(B)=n等于该结点;如果A无定义,则把A附加到结点n上并令NODE(A)=n;否则先把A从NODE(A)结点上的附加标识符集中删除,再把A附加到新结点n上并令NODE(A)=n如果不存在,则建立这样的结点,让n等于建立该结点5.对于A=BopC型中间代码,若存在,且其左右子结点为NODE(B),NODE(c),让n等于找到的结点;n1n1①T0=3.14②T1=6.28③T3=6.28④T2=R+r⑤T4=T2⑥A=6.28*T2⑦T5=A⑧T6=R-r⑨B=A*T6假设T0、T1、T2、T3、T4、T5、T6在后面的基本块中都不使用,8.3循环优化对下面程序段:Inta[10,10]ForI=1to10doA[I,2*j]=A[I,2*j]+1其生成的中间代码为:(1)I=1(1)I=18.3.2强度削弱(1)I=1如果在循环中对变量i只有形如:i=i+C或i=i-C的赋值,且C为循环不变量,则称i为循环中的基本归纳量(1)I=1(1)I=18.4窥孔优化8.4.1冗余加载与保存8.4.2不可达代码删除gotoL1,代码改写后:即然debug在程序的开始被置成0,常量传播会将上式替换为:8.4.3控制流优化如果没有转移到L1的语句,例: