编译原理 第七章代码优化 上海交通大学 张冬茉 Email:Zhang-dm@cssjtu.edu.cn 2004年6月
1 编译原理 第七章 代码优化 上海交通大学 张冬茉 Email:zhang-dm@cs.sjtu.edu.cn 2004年6月
本章目的 代码优化是从生成的目标代码中识 别出那些可以经过变换而提高效率的部 分,并实施这种变换。这种优化并不是 极值理论中的那种求极值点的优化,它 只追求变换后的代码要比变换前的效率 要高些
2 本章目的 代码优化是从生成的目标代码中识 别出那些可以经过变换而提高效率的部 分,并实施这种变换。这种优化并不是 极值理论中的那种求极值点的优化,它 只追求变换后的代码要比变换前的效率 要高些
第七章代码优化 §7.1优化概述 、优化定义 优化是一种等价、有效的程序变换。等价是指不改变 程序运行结果,即对变换前后的程序给以相同的输入, 应有相同的输出,即变换是安全的。 而有效是指经变换后的程序与变换前的程序相比运行 速度更快,所占空间更少,也即所谓时空效益要高。 时间短空间省,这两个要求可以是相容的,并行不悖 的。数据不相关的两个循环,经循环合并构成一个循 环,循环控制的开销节省了,代码长度也因此缩短了。 但有时,时间短空间省的要求可能会不可兼得,这时 就有牺牲时间换取空间或牺牲空间换取时间两种策略, 需要有个综合分析和实事求是的取舍
3 第七章 代码优化 §7.1 优化概述 一、优化定义 优化是一种等价、有效的程序变换。等价是指不改变 程序运行结果,即对变换前后的程序给以相同的输入, 应有相同的输出,即变换是安全的。 而有效是指经变换后的程序与变换前的程序相比运行 速度更快,所占空间更少,也即所谓时空效益要高。 时间短空间省,这两个要求可以是相容的,并行不悖 的。数据不相关的两个循环,经循环合并构成一个循 环,循环控制的开销节省了,代码长度也因此缩短了。 但有时,时间短空间省的要求可能会不可兼得,这时 就有牺牲时间换取空间或牺牲空间换取时间两种策略, 需要有个综合分析和实事求是的取舍。
二、不同阶段的优化 (1)优化可以在源程序阶段也可以在编译阶段进行 (2)编译优化又可分成两个阶段,即中间代码优化与目 标代码优化:编译优化工作中有一部分与目标机 有关,有效而合理地使用机器资源便是目标代码优 化阶段要实现的 (3)中间代码的优化有局部化与非局部优化之分。局 部优化是指基本块内的优化,非局部优化是指超越 基本块的优化,因此对中间代码划分基本块,是优 化所必需的 (4)非局部优化也有循环优化与全书局优化之分,将 中间代码以基本块为结点,构造出程序流图,从中 识别出循环结构
4 二、不同阶段的优化 (1)优化可以在源程序阶段也可以在编译阶段进行 (2)编译优化又可分成两个阶段,即中间代码优化与目 标代码优化 :编译优化工作中有一部分与目标机 有关,有效而合理地使用机器资源便是目标代码优 化阶段要实现的 (3) 中间代码的优化有局部化与非局部优化之分。局 部优化是指基本块内的优化,非局部优化是指超越 基本块的优化,因此对中间代码划分基本块,是优 化所必需的。 (4) 非局部优化也有循环优化与全书局优化之分,将 中间代码以基本块为结点,构造出程序流图,从中 识别出循环结构
优化 源程序优编译优化 中间代码目标代码 优化 局部优化非局部优 循环优化全局优化 图71在各个阶段的优化
5 优化 源程序优 化 编译优化 中间代码 优化 目标代码 优化 非局部优 化 局部优化 循环优化 全局优化 图7.1 在各个阶段的优化