编译原理 (3)

complier-staticlink


complier-displaytable

静态链

指向直接外层函数的首地址

动态链

指向上一层函数的首地址

display表

所有外层函数的首地址

优化 局部优化

基于基本块范围内的优化

删除公共子表达式

删除无用代码

合并已知变量

交换语句位置

代数变换/强度削弱

DAG优化

三地址码转换为DAG


2. DAG重写三地址码

complier-dagrewritethree


3. 删除无用变量

complier-removeunused

循环优化 代码外提

求出循环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在循环的控制,以减少对循环变量的计算

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsjsf.html