Note7- 代码生成

终于来到了最后一部分,就是根据中间代码生成目标代码

代码生成器的主要任务:

寄存器的选择

对于每个形如 x=y op z 的三地址指令 I,执行如下动作

寄存器描述符和地址描述符

基本块的收尾处理

对于一个在基本块的出口处可能活跃的变量 x,如果它的地址描述符表明它的值没有存放在 x 的内存位置上,则生成指令 ST x, R

管理寄存器和地址描述符

当代码生成算法生成加载、保存其他指令时,必须同时更新寄存去和地址描述符

getReg 函数设计

如何计算费用呢?

窥孔优化

窥孔是指程序上的一个小的滑动窗口。窥孔优化是指在优化时,检查目标指令的一个滑动窗口,并且只要有可能就在这个窗口内使用更快更短的指令来替换指令序列。

冗余指令删除

控制流优化

代数优化

消除窥孔中类似于 x=x+0 或 x=x*1 的运算指令

强度削弱

比如用移位进行乘除法

使用特殊指令

比如用 INC 指令替代加 1 操作