图着色寄存器分配器

时间:2012-11-11 23:21:10

标签: compiler-construction compiler-optimization register-allocation

对于我的编译器课程,我正在构建基于MIPS架构的图着色的寄存器分配器。我正在遵循Muchnick对待我的实施的处理方法。

Muchnick对如何处理这些分配器中的函数参数有点模糊。

我做了一些假设,并认为我会澄清相同的。

  1. 此步骤可从中级IR转换为较低级别的IR。尚未处理嵌套函数调用。我的想法是从右到左扫描函数调用,并向外放置最内层调用的IR。通过这种方式,我可以使用MIPS调用约定,将前几个参数分配给参数寄存器,剩余部分用最少量的溢出进行堆叠(只需1)。
  2. 本书中的寄存器合并处理对我来说并不直观,因为它没有解决如何处理移动函数参数到固定参数寄存器的LIR代码。经过深思熟虑后,我得出的结论是,我不应该为参数传递动作注册合并。
  3. 对这些假设的反馈/想法非常受欢迎。

1 个答案:

答案 0 :(得分:2)

我认为你不希望为寄存器分配之前的参数传递从虚拟寄存器到参数寄存器的函数调用实际参数(或者,对于在函数入口上复制的函数调用形式参数)进行寄存器合并。

但是,当您看到这样的移动时,您可以向分配器标记一个提示,即该移动目标参数寄存器是首选。如果首选项没有适当干扰*,您可以将其用于分配,结果是在分配后您将拥有move rx,rx,以后可以轻松消除。

(当然,你可能会发现不止一个这样的提示,所以你选择了最合适的一个,其中大多数(通常是全部)将被排除在其他干扰之外:同一个寄存器传递给多个电话;打电话给循环等。)

(*恰当地意味着在虚拟寄存器的生命周期内,参数(实际)寄存器不会被使用或者被破坏,例如通过嵌套函数调用或其他一些。(识别这可以像检查干扰一样简单)虚拟寄存器。))