
第10章(1)代码优化 ■简介 ■10.1基本块、流图和循环 ■10.3代码优化技术 ■10.3.2局部优化(重点) ■10.3.3循环优化(难点) ■作业 2025/4/2 课程目录国2125
2025/4/2 第10章(1)代码优化 ◼ 简介 ◼ 10.1 基本块、流图和循环 ◼ 10.3 代码优化技术 ◼ 10.3.2 局部优化(重点) ◼ 10.3.3 循环优化(难点) ◼ 作业 课程目录 1/25

什么是代码优化 p255 ■含义 ◆是指对程序进行各种等价变换,使得从变换 后的程序出发,能生成更有效的目标代码 ■ 编译的优化工作阶段 源代码前端.中间代码 代码产生 目标代码 中间代码优化 目标代码优化 ◆优化可在编译的各个阶段进行 :Y ◆最主要的一类优化是在目标代码生成之前,对 语义分析后的中间代码进行 2025/4/2 2/25
2025/4/2 什么是代码优化 p255 ◼ 含义 ◆是指对程序进行各种等价变换,使得从变换 后的程序出发,能生成更有效的目标代码 ◼ 编译的优化工作阶段 ◆优化可在编译的各个阶段进行 ◆最主要的一类优化是在目标代码生成之前,对 语义分析后的中间代码进行 前端 中间代码 代码产生 中间代码优化 目标代码优化 源代码 目标代码 2/25

优化的目的和原则 ■优化目的 ◆产生更高效的目标代码 ◆合理利用计算机资源 ■优化原则 ◆等价 不改变程序的运行结果 ◆高效 运行时间较短,占用存储空间较小 ◆合算—以较低的代价取得较好的优化效果 ◆例如优化算法虽然使最后生成的目标代码的 运行时间缩短,占用空间减少,但是若优化算 本身运行是浪费了过多的时间和空间,则从总 上说就不一定合算 2025/4/2 ☒D 3/25
2025/4/2 优化的目的和原则 ◼ 优化目的 ◼ 优化原则 ◆产生更高效的目标代码 ◆合理利用计算机资源 ◆等价——不改变程序的运行结果 ◆高效——运行时间较短,占用存储空间较小 ◆合算——以较低的代价取得较好的优化效果 ◆例如 优化算法虽然使最后生成的目标代码的 运行时间缩短,占用空间减少,但是若优化算 本身运行是浪费了过多的时间和空间,则从总 上说就不一定合算 3/25

■按阶段分成 优化的分类 ◆与机器无关的优化,对中间代码进行 ◆依赖于机器的优化,生成目标代码时进行 ■根据优化时所涉及的程序范围分成 ◆局部优化在基本块内部进行优化 ◆循环优化对循环中的代码进行优化 ◆全局优化大范围的优化,涉及整个程序 ■优化工作的基础 ◆控制流分析(data-flow analysis) ◆数据流分析(control-flow analysis) ◆变换(transformations) 2025/4/2 章节目录国区425
2025/4/2 ◼ 按阶段分成 优化的分类 ◼ 根据优化时所涉及的程序范围分成 ◆与机器无关的优化,对中间代码进行 ◆依赖于机器的优化,生成目标代码时进行 ◆局部优化 在基本块内部进行优化 ◆循环优化 对循环中的代码进行优化 ◆全局优化 大范围的优化,涉及整个程序 ◼ 优化工作的基础 ◆控制流分析(data-flow analysis) ◆数据流分析(control-flow analysis) ◆变换(transformations) 章节目录 4/25

10.1基本块、流图和循环p255 ■定义 ◆局限于基本块范围内的优化 ■主要内容 ◆基本块及流图 2025/4/2 章节目绿☒ 5/25
2025/4/2 10.1 基本块、流图和循环 p255 ◼定义 ◆局限于基本块范围内的优化 ◼主要内容 ◆基本块及流图 章节目录 5/25

基本块的定义和性质p255 例如下基本块 (1)T1:=A*B ■基本块的定义 (2)T2:=3/2 ◆是指程序中一顺序执行的 语句 (3)T3:=T1-T2 语句序列,其中只有一个 (4)X:=T3 入口语句和一个出口语句 (5)C:=2 基本块的性质 (6)T4:=AB ■有唯一入口和唯一出口 (7)T5:=18+C ■块内各个操作按序执行, 出口 (8)T6:=T4*T5 不出现任何分叉 语句 (9)Y:=T6 基本块内的语句要么全执行, 要么全不执行,而不能只执行一部分 2025/4/2 6/25
2025/4/2 基本块的定义和性质 p255 ◼ 基本块的定义 ◆是指程序中一顺序执行的 语句序列,其中只有一个 入口语句和一个出口语句 例如下基本块 (1)T1:=A*B (2)T2:=3/2 (3)T3:=T1-T2 (4)X:=T3 (5)C:=2 (6)T4:=A*B (7)T5:=18+C (8)T6:=T4*T5 (9)Y:=T6 入口 语句 出口 语句 ◼ 基本块的性质 ◼ 有唯一入口和唯一出口 ◼ 块内各个操作按序执行, 不出现任何分叉 基本块内的语句要么全执行, 要么全不执行,而不能只执行一部分 6/25

基本块入口语句的确定 ■确定规则 规则1 1.程序的第一条语 9 句;或者 规则2 2.能由条件转移语 @或图t0o goto(8) 句或无条件转移 规则3 语句转移到的语 @5X:= (6)Y:=R 句;或者 (7)goto(3) 3.紧跟在条件转移 语句后面的语句 规则2@8)ite (9)halt ■ 举例 共4个入口语句,对应4个基本块 2025/4/2 7/25
2025/4/2 基本块入口语句的确定 ◼ 确定规则 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 共4个入口语句 规则2 规则1 规则2 规则3 ① ② ③ ④ ,对应4个基本块 7/25

划分基本块的算法p256 ■1.求出四元式程序中各个基本块的入口语句 ■2.对以上求出的每一个入口语句,构造其所 属的基本块。由该入口语句 (1)到另一入口语句(不包括该入口语句)或者 (2)到一转移语句(包括该转移语句);或者 (3)到一停语句(包括该停语句) 之间的语句序列组成 ■3.凡未被纳入某一基本块的语句,都是程序 中控制流程无法到达的语句,从而也是不会 被执行到的语句,可把它们从程序中删除 2025/4/2 8/25
2025/4/2 划分基本块的算法 p256 ◼ 1.求出四元式程序中各个基本块的入口语句 ◼ 2.对以上求出的每一个入口语句,构造其所 属的基本块。由该入口语句 (1)到另一入口语句(不包括该入口语句)或者 (2)到一转移语句(包括该转移语句);或者 (3)到一停语句(包括该停语句) 之间的语句序列组成 ◼ 3.凡未被纳入某一基本块的语句,都是程序 中控制流程无法到达的语句,从而也是不会 被执行到的语句,可把它们从程序中删除 8/25

划分基本块课堂练习 BEGIN 规则1)read C (2)A:=0 (3)B:=1 规则2 @4)A:=A+B (5)if B=C goto(8) 规则3 9 规则 2 (8)write A (9)halt 共4个入口语句,对应4个基本块 2025/4/2 D 9/25
2025/4/2 划分基本块课堂练习 (1)read C (2)A:=0 (3)B:=1 (4)A:=A+B (5)if B=C goto(8) (6)B:=B+1 (7)goto(4) (8)write A (9)halt 共4个入口语句 规则2 规则1 规则2 规则3 ① ② ③ ④ ,对应4个基本块 BEGIN 9/25

程序流图构造举例 以基本块为结点,、以程序控制流为有向边的一张 有向图,用来描述程序 B1 B1(1)read x (1)read X (2)read Y (2)read Y B2f(3)R:=X mod Y B2 L(4)if R=0 goto(8) (3)R:=X mod Y B35)X:=Y (4)if R=0 goto(8) (6)Y:=R B3 B4 (7)goto(3) (5)X:=Y (8)write(Y) B4r(8)write Y (6)Y:=R (9)halt (9)halt (7)g0to(3) 对应的程序流图 2025/4/2 节目录 <D 10/25
2025/4/2 程序流图构造举例 ◼ 以基本块为结点,以程序控制流为有向边的一张 有向图,用来描述程序 (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 B1 (1)read X (2)read Y B2 (3)R:=X mod Y (4)if R=0 goto(8) B3 (5)X:=Y (6)Y:=R (7)goto(3) B4 (8)write(Y) (9)halt 对应的程序流图 B1 B2 B3 B4 节目录 10/25