编译器笔记60-代码生成-寄存器的选择

三地址语句的目标代码生成

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

三地址语句的目标代码生成.png

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

  • 寄存器描述符(register descriptor)

记录每个寄存器当前存放的是哪些变量的值

  • 地址描述符(address descriptor)
  1. 记录运行时每个名字的当前值存放在哪个或哪些位置
  2. 该位置可能是寄存器、栈单元、内存地址或者是它们的某个集合
  3. 这些信息可以存放在该变量名对应的符号表条目中

基本块的收尾处理

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

管理寄存器和地址描述符

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

指令1.png
指令2.png
指令3.png
指令4.png

例1.png
例2.png
例3.png
例4.png
例5.png
例6.png

你可能感兴趣的:(编译器笔记60-代码生成-寄存器的选择)