From c98bfb118b9d328cb5b25e92f5a689eace551713 Mon Sep 17 00:00:00 2001 From: Lane0218 Date: Thu, 12 Mar 2026 16:50:26 +0800 Subject: [PATCH] =?UTF-8?q?docs(doc):=20=E8=B0=83=E6=95=B4=20Lab4=20?= =?UTF-8?q?=E5=9B=BE=E7=9D=80=E8=89=B2=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/Lab4-寄存器分配.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Lab4-寄存器分配.md b/doc/Lab4-寄存器分配.md index 909c0ac..3068ee4 100644 --- a/doc/Lab4-寄存器分配.md +++ b/doc/Lab4-寄存器分配.md @@ -53,7 +53,7 @@ Lab4 的目标是在 Lab3 示例基础上,把“固定寄存器 + 栈槽”的 3. 按照可分配寄存器数 `K` 对图执行 simplify/select,必要时结合启发式选择 spill 候选。 4. 若图可以着色,则回填每个虚拟寄存器对应的物理寄存器;若不能着色,则把选中的虚拟寄存器重写为 spill/reload 形式,并重新进行分析与分配。 5. 分配完成后,把使用到的 callee-saved 寄存器、额外 spill 栈槽等信息交给 `FrameLowering.cpp` 与 `AsmPrinter.cpp` 继续处理。 - - 说明:图着色方法更接近经典教材中的完整后端流程,适合面向完整 SysY 后端逐步扩展;但实现成本通常更高,需要同学自己补齐活跃性分析、干涉图维护与 spill 重试机制。 + - 说明:图着色方法可以参考课堂 PPT 中介绍的基本思路来实现。实际工程里这类方法有很多变体,你也可以在这个大方向下结合自己的实现继续调整和优化具体细节;但无论采用哪种变体,都需要补齐活跃性分析、干涉图维护与 spill 重试机制等关键环节。 2. 线性扫描寄存器分配 - 整体思路:先把每个虚拟寄存器的活跃范围抽象为一个区间,再按照区间起点顺序扫描程序,动态维护当前正在占用物理寄存器的活跃区间集合;若出现寄存器不够用,再选择某个区间 spill。