【问题标题】:Precolored nodes in register allocation - max one of each color?寄存器分配中的预着色节点-每种颜色最多一种?
【发布时间】:2012-11-20 12:57:50
【问题描述】:

我正在研究有关编译器中的寄存器分配的主题。一种广泛使用的寄存器分配算法是通过简化的迭代图着色。在 Andrew W. Appel 所著的 Modern Compiler Implementation in Java 一书中,关于寄存器分配状态的第 11 章:

干扰图中的每个节点代表一个临时值。

[...]

一些临时对象是预着色的 - 它们代表机器寄存器。例如,当跨模块边界与标准调用约定接口时,前端会生成这些。对于用于某些特定目的的每个实际寄存器,例如帧指针、标准参数 1 寄存器、标准参数 2 寄存器等,CodegenFrame 模块应使用永久绑定到该寄存器的特定临时文件。 对于任何给定的颜色(即对于任何给定的机器寄存器)应该只有一个该颜色的预着色节点。

我不完全理解上面引用中的指示行。我可以想象有多个临时对象将使用相同的寄存器预着色的情况。例如,x86 mul 指令将结果存储在EDX:EAX 寄存器对中,但函数也会在EAX 寄存器中返回值。所以我有不同的临时工有相同的颜色。我会认为EAX的那些不同用途一定是不同的节点,还是我错了?

有人能解释一下突出显示的句子吗,可以举一些例子吗?

【问题讨论】:

    标签: java assembly compiler-construction x86 register-allocation


    【解决方案1】:

    在本书中,想法是,您将拥有一个临时 EAX,您可以将其用于 mul 和返回值。当某个值需要在给定寄存器中时,您会生成从包含该值的临时值到表示该寄存器的临时值的移动;类似地,一旦一个值到达特定寄存器(例如,一个函数返回),您将生成从寄存器的临时到将从此保存该值的临时的移动。参见书中的图 11.7。

    【讨论】:

    • 所以,概括地说:在一个方法中用于多种不同目的的同一个变量(虚拟临时或机器寄存器)将只能由干扰图中的一个节点表示?
    • 我不认为你的概括是有效的。它适用于代表特定寄存器的临时对象,用于预着色。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    相关资源
    最近更新 更多