编译原理第十章优化http://sei.nudt.edu.cn/cp网上教学系统:070606302:编译原理国防科技大学计算机系602教研室词法分析器语法分析器中间代码生成器优化段源程序单词符号语法单位四元式表格管理出错处理目标代码生成器四元式目标代码国防科技大学计算机系602教研室第十章优化优化:对程序进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。等价:指不改变程序的运行结果。有效:指目标代码运行时间短,占用的存储空间小。编译前端代码优化器编译后端控制流分析数据流分析代码变换国防科技大学计算机系602教研室10.1概述优化的目的是为了产生更高效的代码。由优化编译程序提供的对代码的各种变换必须遵循一定的原则:等价原则:经过优化后不应改变程序运行的结果;有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小;合算原则:应尽可能以较低的代价取得较好的优化效果。国防科技大学计算机系602教研室10.1概述优化的三个不同级别:局部优化循环优化全局优化优化的种类:删除多余运算(或称删除公用子表达式)代码外提强度消弱变换循环控制条件合并已知量复写传播删除无用赋值国防科技大学计算机系602教研室voidquicksort(m,n);intm,n;{inti,j;intv,x;if(n<=m)return;/*fragmentbeginshere*/i=m-1;j=n;v=a[n];while(1){doi=i+1;while(a[i]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;/*fragmentendshere*/quicksort(m,j);quicksort(i+1,n);}国防科技大学计算机系602教研室中间代码程序段i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]ifT3vgotoB3B3ifi>=jgotoB6B4T6:=4*ix:=a[T6]T7:=4*iT8:=4*jT9:=a[T8]a[T7]=T9T10:=4*ja[T10]=xgotoB2B5T11:=4*ix:=a[T11]T12:=4*iT13:=4*nT14:=a[T13]a[T12]=T14T15:=4*na[T15]=xB6国防科技大学计算机系602教研室中间代码程序段i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]ifT3vgotoB3B3ifi>=jgotoB6B4T6:=4*ix:=a[T6]T7:=4*iT8:=4*jT9:=a[T8]a[T7]=T9T10:=4*ja[T10]=xgotoB2B5T11:=4*ix:=a[T11]T12:=4*iT13:=4*nT14:=a[T13]a[T12]=T14T15:=4*na[T15]=xB6国防科技大学计算机系602教研室删除公用子表达式后i:=m-1j:=nT1:=4*nv:=a[T1]B1i:=i+1T2:=4*iT3:=a[T2]ifT3