第十章 代码优化
重点:代码优化的任务,局部优化、循环优化、全局优化的基本方法。
难点:控制流分析,数据流分析。
10.1 优化的种类
n 机器相关性
机器相关优化:寄存器优化,多处理器优化,特殊指令优化,无用指令消除等。
机器无关优化:
n 优化范围
局部优化:单个基本块范围内的优化,常量合并优化,公共子表达式删除,计算强度削弱和无用代码删除。
全局优化:主要是基于循环的优化:循环不变优化,归纳变量删除,计算强度削减。
n 优化语言级
优化语言级:针对中间代码,针对机器语言。
公共子表达式删除
复制传播
无用代码删除
代码外提
强度削弱
10.2 控制流分析
10.3 数据流分析
10.4 局部优化
利用dag进行的基本块变换
⑴ 局部公共子表达式删除。
⑵ 无用代码删除。
⑶ 交换两个独立的相邻语句的次序,以便减少某个临时值需要保存在寄存器中的时间。
⑷ 使用代数规则重新排列三地址码的运算对象的顺序,以便简化计算过程。
10.5 循环优化
循环不变计算的检测
代码外提
归纳变量删除和强度削弱
10.6 全局优化
全局公共子表达式的删除
复制传播
10.7 本章小结
n 代码优化就是对程序进行等价变换,以提高目标程序的效率,通常只对中间代码进行优化。通常包括控制流分析、数据流分析和变换三部分。
n 以程序的基本块为基础,基本块内的优化叫局部优化,跨基本块的优化为全局优化,循环优化是针对循环进行的优化,是全局优化的一部分。
n 公共子表达式的删除、复制传播、无用代码删除、代码外提、强度削弱和归纳变量删除等都是一些常用的针对局部或者全局的代码优化方法。