【编译原理】第十章 优化
目录
概述
局部优化
1. 基本块及流图
2. 基本块的DAG表示及其应用
循环优化
1. 删除公共子表达式(多余运算)
2. 复写传播
3. 删除无用代码
4. 代码外提
5. 强度削弱
6. 删除归纳变量
7. 合并已知量
数据流分析
概述
优化对代码进行的变换必须遵守以下原则:
1. 等价原则: 经优化的代码执行结果不变;
2. 有效原则: 优化后确实执行时间短、占用空间少;
3. 合算原则: 以较低的代价,换取较好的优化效果。
优化主要为两类:
中间代码的优化(不依赖硬件)
目标代码的优化(依赖硬件)
局部优化
1. 基本块及流图
基本块:程序中一顺序执行的语句系列,其中只有一个入口和一个出口,第一个语句为入口,最后一个语句为出口。
对于给定的一个程序,可以将其划分为一系列的 基本块,分别在块内进行局部优化(基本块内的优化)。
2. 基本块的DAG表示及其应用
循环优化
对循环中的代码可以实行代码外提、强度削弱和 删除归纳变量等优化。
1. 删除公共子表达式(多余运算)
2. 复写传播
3. 删除无用代码
4. 代码外提
对循环中的有些代码,若它的结果在循环中不变, 可将这些代码提到循环外,以避免循环执行。
5. 强度削弱
6. 删除归纳变量
7. 合并已知量
经前述各种优化处理后,最终的中间代码如下: