文档详情

编译原理--代码优化.ppt

发布:2018-02-16约7.86千字共59页下载文档
文本预览下载声明
中南大学软件学院 陈志刚 第八章 代码优化 8.1 什么是代码优化 8.2 局部优化 8.3 循环优化 8.4 数据流分析 1、优化: 对程序进行各种等价变换,使变换后的程序能生成更有效的目标代码。 优化可在编译的任何阶段进行,但最主要的一类优化是对中间代码进行优化。 2、常见的优化方式 ①删除多余运算(又称删除公共子表达式) ②代码外提:循环体中不变的运算提到循环体外 ③强度削弱:把乘法变成加法 ④变换循环控制条件:目的是删除那些纯粹为控制循环而设立的语句,因此又称删除归纳变量。 ⑤合并已知量:对于那些编译时便可静态确定的运算结果事先运算出来,不必等到运行程序时再执行。 ⑥复写传播:某些变量的值并未被改变,便赋给其他变量,则可直接引用原值本身。 ⑦删除无用赋值:有些变量在赋值后并未引用,却又被重新赋值了,称为无用赋值(前面的赋值) 3、优化分类 按阶段分: 与机器无关的优化---对中间代码进行 依赖于机器的优化--对目标代码进行 根据优化所涉及的程序范围分成: (1)局部优化:在程序基本块内进行的优化。 (2)循环优化:在程序循环体内进行的优化。 (3)全局优化:在整个程序范围内进行的优化。 优化工作 数据流分析(control-flow analysis) 控制流分析(data-flow analysis) 变换(transformations) 4、优化技术简介 1.删除多余运算 2.循环不变代码外提 3.强度削弱 4.变换循环控制条件 5.合并已知量与复写传播 6.删除无用赋值 例: 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) (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) (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 (5)T3:=T2[T1] (6)T4:=T1 (8)T6:=T5[ ] (9)T7:=T3*T6 (10)P:=P+T7 (11)I:=I+1 (3’)T1:=T1+4 (12)if =80 goto(5) (1)P:=0 (2)I:=1 (4)T2:=addr(A)-4 (7)T5:=addr(B)-4 (3)T1:=4 (5)T3:=T2[T1] (6)T4:=T1 (8)T6:=T5[T1] (9)T7:=T3*T6 (10)P:=P+T7 (11)I:=I+1 (3’)T1:=T1+4 (12)if T1=80 goto(5) (1)P:=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)P:=P+T7 (3’)
显示全部
相似文档