- 中间代码优化
- 局部优化
- 非局部优化
- 全局
- 循环
- 目标代码优化
常用技术
- 删除多余运算
- 使生成的目标代码减少而执行速度较快
- 也叫删除公共子表达式
- 循环不变代码外提
- 减少循环中代码总数
- 把循环不变运算(结果独立于循环执行次数的表达式)提到循环的前面,使之在循环外计算一次
- 强度削弱
- 把强度大的运算换算成强度小的运算 eg.乘法运算换算成加法运算
- 变换循环控制条件
- 合并已知量
- 某变量可以被看作是已知量的时候,将其替换为已知量
- 复写传播
- 删除无用赋值
- 某变量被赋值,但未被引用,我们把这种赋值称为无用赋值
- 无用赋值可以从程序中删除
局部优化
指的是基本块内的优化
基本块:程序中顺序执行的语句序列,其中只有一个入口一个出口语句。
控制流只能从其入口语句进入,从前出口语句退出,没有中途停止或者分支。