编译第11章.pptVIP

  • 4
  • 0
  • 约1.54万字
  • 约 107页
  • 2018-02-26 发布于河南
  • 举报
编译第11章

第十一章 代码优化 1.掌握:代码优化的概念,划分基本块,用DAG来优化基本块,可归约流图的概念 2.理解:循环优化 目录 11.1 优化技术简介 11.2 局部优化 11.3 控制流分析和循环优化 11.1 优化技术简介 一、代码优化的目的 提高目标代码的运行效率。 注:效率是指目标代码运行时间较短,占有空间较少。 二、代码优化的实质 代码优化实际上是对代码进行等价变换,由一组代码变成运行结果相同的另一组代码。 四、优化分类 根据优化所涉及的程序范围分成: (1)局部优化:(基本块) (2)循环优化:对循环中的代码进行优化 (3)全局优化:在整个程序范围内的优化 五、常用优化技术简介 1.删除多余运算 2.循环不变代码外提 3.强度削弱 4.变换循环控制条件 5.合并已知量与复写传播 6.删除无用赋值 1.删除多余运算(删除公共子表达式): 目的:提高目标代码速度。 例如: P:=0 for I:=1 to 20 do P:=P+A[I]*B[I] (1)P:=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)P:=P+T7 (11)I:=I+1 (12)if I=20 goto(3) 2、代码外提 减少循环中代码总数的重要办法。 方法:把循环不变运算,即其结果独立于循环执行次数的表达式提到循环的前面,使之只在循环外计算一次。 例如: P:=0 for I:=1 to 20 do P:=P+A[I]*B[I] (1)P:=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)P:=P+T7 (11)I:=I+1 (12)if I=20 goto(3) (1)P:=0 (2)I:=1 (3)T1:=4*I (5)T3:=T2[T1] (8)T6:=T5[T4] (9)T7:=T3*T6 (10)P:=P+T7 (11)I:=I+1 (12)if I=20 goto(3) (1)P:=0 (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)P:=P+T7 (11)I:=I+1 (12)if I=20 goto(3) (1)P:=0 (2)I:=1 (4)T2:=addr(A)-4 (7)T5:=addr(B)-4 (5)T3:=T2[T1] (6)T4:=T1 (8)T6:=T5[T4] (9)T7:=T3*T6 (10)P:=P+T7 (11)I:=I+1 (12)if I=20 goto(5) 4、变换循环控制条件 经过变换后,有些变量不被引用,可以从循环中删除! (1)P:=0 (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)P:=P+T7 (11)I:=I+1 (3’)T1:=T1+4 (12)if I=20 goto(5) (1)P:=0 (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)P:=P+T7 (3’)T1:=T1+4 (12)if T1 =80 goto(5) 5、合并已知量与复写传播 编码时的已知量—常数,可在编译时计算出它的值,这种变换称为合并已知量或常数合并。 通过复制后没有再改变的值可以互相替换,不会改变程序的结果,这种变换称为复写传播。 (1)P:=0 (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)P:=P+T7 (3’)T1:=T1+4 (12)if T1=80 goto(5) (1)P:=0 (2)I:=1 (4)T2:=addr(A)-4 (7)T5:=ad

文档评论(0)

1亿VIP精品文档

相关文档