gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:01:19 25 4
gpt4 key购买 nike

对于我的编译器类(class),我正在为 MIPS 架构构建一个基于图形着色的寄存器分配器。对于我的实现,我正在遵循穆奇尼克的处理方法。

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

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

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

  • 非常感谢对这些假设的反馈/想法。

    最佳答案

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

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

    (当然,你可能会发现不止一个这样的提示,那么你就取最适用的一个,其中大部分(通常是全部)会被其他干扰排除:同一个寄存器传递给多个调用;循环调用,等等..)

    (* 适本地意味着参数(真实)寄存器在虚拟寄存器的生命周期内不会以其他方式使用或丢弃,例如通过嵌套函数调用或其他一些。(识别这可以像检查虚拟寄存器的干扰一样简单登记。))

    关于compiler-construction - 图着色寄存器分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13336544/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com