文档介绍:
语义分析、生成中间代码
目标代码生成
代码优化
语法分析程序
词法分析程序
错
误
处
理
符
号
表
管
理
第8章代码优化
要求明确代码优化的目的和分类
掌握基本块的划分方法,基本块内的三种优化方法
掌握程序流图的构造方法,循环优化的三种优化方法
教学目标
局部优化
循环优化
教学内容
代码优化
原则: 不能改变原有程序语义
时间效率(减少运行时间)
空间效率(减少内存容量)
目的:提高目标代码运行效率
优化实质上是对代码进行等价变换,变换后代码结构不同但运行结果相同。
代码优化分类
从优化的层次,与机器是否有关
与机器无关:与目标机无关,在中间代码上优化
与机器有关:充分利用系统资源,(指令系统,寄存器)
从优化涉及的范围
局部优化:在基本块内进行优化。
循环优化:对循环语句所生成的中间代码进行优化。
全局优化:跨越多个基本块的全局范围内的优化,复杂。
局部优化
基本块:程序中一个顺序执行的语句序列,即一个程序段,它只有一个入口和一个出口,入口是第一条语句,出口是最后一条语句。
在一个基本块上进行的优化
基本块划分方法
(1)确定各个基本块的的入口语句(基本块的第一个语句)
①语句序列的第一个语句是入口语句;
②能由条件转移语句或无条件转移语句转到的语句是入口语句;
③紧跟在条件转移语句或无条件转移语句后面的语句是入口语句。
基本块划分方法
(2)对于每个入口语句,构造其所属的基本块。它是以下三种情况之一:
①该入口语句到下一条入口语句(不包括该入口语句)之间的语句序列;
②该入口语句到一条转移语句(包括该转移语句)之间的语句序列;
③该入口语句到一条停语句(包括该停语句)之间的语句序列;
(3)凡未被纳入某一基本块的语句,都是程序中控制流程无法到达的语句,从而也是不会被执行到的语句,将其删除。
【】
(1)read X
(2)read Y
(3)R=X mod Y
(4)if R= =0 goto(8)
(5)X=Y
(6)Y=R
(7)goto(3)
(8)write Y
(9)halt
1
3
4
5
6
20
10
11
21
⊕
FACTOR=2
EXP 1=…
IF ( )GOTO 10
BASE=
FACTOR=FACTOR**2
GOTO 20
10. BASE=…
11. FACTOR…
20. Q=
21. RETURN
基本块
基本块
基本块
基本块
练习: