静态链
指向直接外层函数的首地址
动态链指向上一层函数的首地址
display表所有外层函数的首地址
优化 局部优化基于基本块范围内的优化
删除公共子表达式
删除无用代码
合并已知变量
交换语句位置
代数变换/强度削弱
DAG优化三地址码转换为DAG
2. DAG重写三地址码
3. 删除无用变量 循环优化 代码外提
求出循环L的所有不变运算
检查步骤1的不变运算A=const是否满足:
s是否是L的所有出口必经节点,或者A在离开L后不再活跃
A在L的其他地方没有再赋值
对S涉及的A的引用都是在此A赋值后才到达
对满足以上条件的A=const进行外提
强度消弱对于循环L有I = I+C,且有T=K*I+C2,其中C,K,C2为不变量,则T可以进行强度削弱,把乘法转换为加法
削弱后,循环中会出现无用赋值,可删除
下标变量的地址计算很耗时,可以使用强度削弱
删除归纳变量对于循环变量i,由于L中有其他变量A是跟I有线性关系的,可以用A来代替i在循环的控制,以减少对循环变量的计算