compiler-construction – 图形着色寄存器分配器

对于我的编译器课程,我正在构建一个基于MIPS架构的图着色的寄存器分配器.我正在遵循Muchnick对我的实施的同样的待遇.

关于如何在这些分配器中处理函数的参数,Muchnick有点模糊.

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

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

对这些假设的反馈/想法非常受欢迎.

最佳答案 我认为您不希望在寄存器分配之前将参数传递从虚拟寄存器到参数寄存器的参数传递从函数调用实际参数(或者,对于函数调用复制的函数调用形式参数,反之亦然)进行寄存器合并.

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

(当然,你可能会发现不止一个这样的提示,所以你选择最适合的一个,大多数(通常是所有)它们将被排除在其他干扰之外:同一个寄存器传递给多个呼叫;在一个循环中调用,等等..)

(*恰当地表示在虚拟寄存器的生命周期内,参数(实际)寄存器不会被其他方式使用或删除,例如通过嵌套函数调用或其他方式.(识别这可能就像检查虚拟干扰一样简单)寄存器.))

点赞