对于我的编译器课程,我正在构建基于MIPS架构的图着色的寄存器分配器。我正在遵循Muchnick对待我的实施的处理方法。
Muchnick对如何处理这些分配器中的函数参数有点模糊。
我做了一些假设,并认为我会澄清相同的。
对这些假设的反馈/想法非常受欢迎。
答案 0 :(得分:2)
我认为你不希望为寄存器分配之前的参数传递从虚拟寄存器到参数寄存器的函数调用实际参数(或者,对于在函数入口上复制的函数调用形式参数)进行寄存器合并。
但是,当您看到这样的移动时,您可以向分配器标记一个提示,即该移动目标参数寄存器是首选。如果首选项没有适当干扰*,您可以将其用于分配,结果是在分配后您将拥有move rx,rx
,以后可以轻松消除。
(当然,你可能会发现不止一个这样的提示,所以你选择了最合适的一个,其中大多数(通常是全部)将被排除在其他干扰之外:同一个寄存器传递给多个电话;打电话给循环等。)
(*恰当地意味着在虚拟寄存器的生命周期内,参数(实际)寄存器不会被使用或者被破坏,例如通过嵌套函数调用或其他一些。(识别这可以像检查干扰一样简单)虚拟寄存器。))