docs(doc): 调整 Lab4 要求表述

master
Lane0218 7 days ago
parent 9b8fcf60eb
commit 2f3877d16a

@ -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 后为新引入的访存指令重新参与后续流程。
后端优化部分建议保持“局部、可验证、与当前框架贴合”的范围,典型可以包括:

Loading…
Cancel
Save