From 2f3877d16a0da4d3629fd6f06d944c328c151e4d Mon Sep 17 00:00:00 2001 From: Lane0218 Date: Thu, 12 Mar 2026 16:45:51 +0800 Subject: [PATCH] =?UTF-8?q?docs(doc):=20=E8=B0=83=E6=95=B4=20Lab4=20?= =?UTF-8?q?=E8=A6=81=E6=B1=82=E8=A1=A8=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/Lab4-寄存器分配.md | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/doc/Lab4-寄存器分配.md b/doc/Lab4-寄存器分配.md index 621af60..929e783 100644 --- a/doc/Lab4-寄存器分配.md +++ b/doc/Lab4-寄存器分配.md @@ -9,14 +9,12 @@ Lab4 的目标是在 Lab3 示例基础上,把“固定寄存器 + 栈槽”的 需要同学完成: -1. 熟悉 MIR 中寄存器、操作数、栈槽与机器函数之间的关系。 -2. 理解当前 IR -> MIR -> 汇编输出流程中寄存器相关部分的最小实现现状。 -3. 扩展当前 MIR 表达,使指令选择阶段能够产出虚拟寄存器,而不是继续固定使用 `w0`、`w8`、`w9`。 -4. 在现有框架上实现真实寄存器分配,并处理 spill/reload、栈槽管理、callee-saved 保存恢复等后续问题。 -5. 在寄存器分配结果基础上,补充后端局部优化流程,减少明显冗余机器指令与低效访存。 -6. 可实现的后端优化包括但不限于:窥孔优化、冗余 `move/copy` 消除、局部访存冗余消除,以及简单恒等指令消除(如 `add/sub ..., #0`)。 -7. 图着色寄存器分配与线性扫描寄存器分配均可作为实现路线,同学可自行选择其中一种完成;后端优化部分也不限定具体实现方式,只要求功能正确、收益明确。 -8. 在 `test/test_case` 提供的全部测试用例上验证正确性,并在保证功能正确的前提下尽量减少冗余 spill/reload、无效拷贝、冗余访存与低效机器指令,提升生成代码质量。 +1. 熟悉 MIR 中寄存器、操作数、栈槽与机器函数之间的关系,并理解当前 IR -> MIR -> 汇编输出流程中寄存器相关部分的最小实现现状。 +2. 扩展当前 MIR 表达,使指令选择阶段能够产出虚拟寄存器,而不是继续固定使用 `w0`、`w8`、`w9`。 +3. 在现有框架上实现真实寄存器分配,并处理 spill/reload、栈槽管理、callee-saved 保存恢复等后续问题。 +4. 图着色寄存器分配与线性扫描寄存器分配均可作为实现路线,同学可自行选择其中一种完成;后端优化部分也不限定具体实现方式,只要求功能正确、收益明确。 +5. 在寄存器分配结果基础上,补充后端局部优化流程,减少明显冗余机器指令与低效访存。可实现的优化包括但不限于:窥孔优化、冗余 `move/copy` 消除、局部访存冗余消除,以及简单恒等指令消除(如 `add/sub ..., #0`)。 +6. 在 `test/test_case` 提供的全部测试用例上验证正确性,并在保证功能正确的前提下尽量减少冗余 spill/reload、无效拷贝、冗余访存与低效机器指令,提升生成代码质量。 ## 3. 相关文件 @@ -39,7 +37,6 @@ Lab4 的目标是在 Lab3 示例基础上,把“固定寄存器 + 栈槽”的 5. `src/mir/passes/Peephole.cpp` 与 `src/mir/passes/PassManager.cpp` 当前仅保留了最小注释框架,尚未形成真实可运行的后端优化流程。 6. 因此,当前代码实际上**没有实现完整的寄存器分配与后端优化**,这一部分需要同学自行完成。 - 说明:本阶段不应继续沿用 Lab3 的“所有中间值统一写回栈槽 + 固定寄存器临时搬运”的做法,而应先把指令选择结果改造成带虚拟寄存器的 MIR,再进入寄存器分配阶段;在寄存器分配与栈帧落地完成后,再针对最终机器指令序列做局部后端优化。无论选择哪一种寄存器分配算法,都需要先解决几个共同前提:为机器指令补充 `use/def` 信息、能够遍历机器基本块与控制流关系、为虚拟寄存器维护分配状态,并在 spill 后为新引入的访存指令重新参与后续流程。 后端优化部分建议保持“局部、可验证、与当前框架贴合”的范围,典型可以包括: