编译原理代码优化

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(1)P:=0 (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)
(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)
25.11.2020
(1)P:=0
(2)I:=1
(4)T2:=addr(A)-4 (7)T5:=addr(B)-4
(12)if I<=20 goto(3)
(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)
25.11.2020
.
7
(1)P:=0 (2)I:=1 (4)T2:=addr(A)-4 (7)T5:=addr(B)-4 (3)T1:=4*I
25.11.2020
.
6
第八章 优化
(1)P:=0 (2)I:=1 (4)T2:=addr(A)-4 (7)T5:=addr(B)-4
(1)P:=0
(2)I:=1
(4)T2:=addr(A)-4 (7)T5:=addr(B)-4
(3)T1:=4*I
(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:=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)
.
8
第八章 优化
(1)P:=0 (2)I:=1 (4)T2:=addr(A)-4 (7)T5:=addr(B)-4 (3)T1:=4
第八章 代码优化
8.1 什么是代码优化 8.2 局部优化 8.3 循环优化 8.4 数据流分析
第八章 优化
8.1 什么是代码优化
1、优化: 对程序进行各种等价变换,使变换后的程序
能生成更有效的目标代码。 优化可在编译的任何阶段进行,但最主要的
一类优化是对中间代码进行优化。 2、常见的优化方式
①删除多余运算(又称删除公共子表达式) ②代码外提:循环体中不变的运算提到循环体外 ③强度削弱:把乘法变成加法
25.11.2020
.
2
第八章 优化
④变换循环控制条件:目的是删除那些纯粹为控 制循环而设立的语句,因此又称删除归纳变量。 ⑤合并已知量:对于那些编译时便可静态确定的 运算结果事先运算出来,不必等到运行程序时再 执行。 ⑥复写传播:某些变量的值并未被改变,便赋给 其他变量,则可直接引用原值本身。 ⑦删除无用赋值:有些变量在赋值后并未引用, 却又被重新赋值了,称为无用赋值(前面的赋值)
例:
P:=0 for I:=1 to 20 do
P:=P+A[I]*B[I]
25.11.2020
.
第八章 优化
5
第八章 优化
(1)P:=0 (2)I:=1
(1)P:=0
(2)I:=1
(4)T2:=addr(A)-4
(3)T1:=4*I
(7)T5:=addr(B)-4
(4)T2:=addr(A)-4 (5)T3:=T2[T1] (6)T4:=4*I
优化工作 数据流分析(control-flow analysis) 控制流分析(data-flow analysis) 变换(transformations)
25.11.2020
.
wk.baidu.com
4
4、优化技术简介 1.删除多余运算 2.循环不变代码外提 3.强度削弱 4.变换循环控制条件 5.合并已知量与复写传播 6.删除无用赋值
(5)T3:=T2[T1] (8)T6:=T5[T1] (9)T7:=T3*T6 (10)P:=P+T7 (3’)T1:=T1+4 (12)if T1<=80
goto(5)
25.11.2020
.
9
第八章 优化
8.2 局部优化:基本块内的优化
对程序以基本块为范围来讨论的优化,称为局部优化。 基本块:指程序中一顺序执行的语句序列,它只有一
(3)T1:=4*I (5)T3:=T2[T1]
(7)T5:=addr(B)-4 (8)T6:=T5[T4] (9)T7:=T3*T6 (10)P:=P+T7 (11)I:=I+1
(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)(12)if I<=20 goto(3)
个入口语句和一个出口语句。 基本块的入口语句:
1.程序的第一个语句;或者, 2.条件转移语句或无条件转移语句的转移目标语 句;或者 3.紧跟在条件转移语句后面的语句。
25.11.2020
.
10
第八章 优化
基本块的划分 1、求基本块入口语句 2、寻找基本块
⑴从入口语句到下一入口语句(不包括该入口); ⑵从入口语句到下一转移语句(包括转移语句); ⑶从入口语句到下一停止语句(包括该停止语句)。 3、基本块的整理
25.11.2020
.
3
第八章 优化
3、优化分类 按阶段分:
与机器无关的优化---对中间代码进行 依赖于机器的优化--对目标代码进行
根据优化所涉及的程序范围分成: (1)局部优化:在程序基本块内进行的优化。 (2)循环优化:在程序循环体内进行的优化。 (3)全局优化:在整个程序范围内进行的优化。
程序中所有基本块之外的语句为无用语句,应 删除。 基本块优化
在一个基本块内通常可实行三种优化:合并已知 量、删除无用赋值(难判断)以及删除多余运算。
25.11.2020
.
11
例:
(1) (2) (3) (4) (5) (6) (7) (8) (9)
相关文档
最新文档