style(doc): 简化实验文档文件指引

This commit is contained in:
Lane0218
2026-03-12 16:40:22 +08:00
parent 422a30e5a8
commit 9b8fcf60eb
6 changed files with 68 additions and 202 deletions

View File

@@ -18,52 +18,17 @@ Lab4 的目标是在 Lab3 示例基础上,把“固定寄存器 + 栈槽”的
7. 图着色寄存器分配与线性扫描寄存器分配均可作为实现路线,同学可自行选择其中一种完成;后端优化部分也不限定具体实现方式,只要求功能正确、收益明确。
8.`test/test_case` 提供的全部测试用例上验证正确性,并在保证功能正确的前提下尽量减少冗余 spill/reload、无效拷贝、冗余访存与低效机器指令提升生成代码质量。
## 3. 当前代码框架
## 3. 相关文件
1. MIR 定义与寄存器相关抽象
- `include/mir/MIR.h`
- `src/mir/MIRContext.cpp`
- `src/mir/MIRFunction.cpp`
- `src/mir/MIRBasicBlock.cpp`
- `src/mir/MIRInstr.cpp`
- `src/mir/Register.cpp`
以下文件与本实验内容相关,建议优先阅读。
2. IR -> MIR、寄存器分配与后续落地
- `src/mir/Lowering.cpp`
- `src/mir/RegAlloc.cpp`
- `src/mir/FrameLowering.cpp`
- `src/mir/AsmPrinter.cpp`
- `include/mir/MIR.h`
- `src/mir/Lowering.cpp`
- `src/mir/RegAlloc.cpp`
- `src/mir/FrameLowering.cpp`
- `src/mir/passes/Peephole.cpp`
3. 后端优化 Pass
- `src/mir/passes/PassManager.cpp`
- `src/mir/passes/Peephole.cpp`
4. 入口流程
- `src/main.cpp`
- `include/utils/CLI.h`
- `src/utils/CLI.cpp`
## 4. Lab4 需要补充的内容
1. 必须修改的文件
- `include/mir/MIR.h`(扩展寄存器、操作数、机器函数等数据结构,使其能够表示虚拟寄存器与分配结果)
- `src/mir/Register.cpp`(补充物理/虚拟寄存器表示、可分配寄存器集合等)
- `src/mir/MIRInstr.cpp`(当需要扩展机器指令或操作数表达时)
- `src/mir/MIRFunction.cpp`当需要维护虚拟寄存器、spill 栈槽、callee-saved 等状态时)
- `src/mir/Lowering.cpp`(将当前固定寄存器写法改造为生成虚拟寄存器形式的 MIR
- `src/mir/RegAlloc.cpp`(实现真实寄存器分配主逻辑,可选择图着色或线性扫描)
- `src/mir/FrameLowering.cpp`根据寄存器分配结果完成栈帧布局、spill 栈槽计算与保存恢复)
- `src/mir/AsmPrinter.cpp`(保证寄存器分配后的 MIR 能正确打印为最终汇编)
- `src/mir/passes/PassManager.cpp`(组织寄存器分配后相关优化 pass 的运行顺序)
- `src/mir/passes/Peephole.cpp`(实现窥孔优化与其他局部后端优化规则)
2. 视实现需要可能修改
- `src/mir/MIRBasicBlock.cpp`(当需要扩展基本块级活跃性或辅助接口时)
- `src/main.cpp`(当需要调整后端阶段行为时)
- `src/utils/CLI.cpp`(当需要扩展后端调试相关命令行选项时)
- `scripts/verify_asm.sh`(当需要扩展统一验证脚本时)
## 5. 当前最小示例实现说明
## 4. 当前最小示例实现说明
当前后端中的寄存器分配与后端优化相关实现仍停留在最小示例阶段:
@@ -120,14 +85,14 @@ Lab4 的目标是在 Lab3 示例基础上,把“固定寄存器 + 栈槽”的
无论采用图着色还是线性扫描,都不应把寄存器分配理解为“把虚拟寄存器简单替换成物理寄存器名字”。真正完整的实现还需要和 spill/reload、栈帧布局、callee-saved 保存恢复以及最终汇编输出联动,否则后端仍然无法支撑完整 SysY 程序。
## 6. 构建与运行
## 5. 构建与运行
```bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j "$(nproc)"
```
## 7. Lab4 验证方式
## 6. Lab4 验证方式
项目编译后可先用当前示例用例检查后端链路是否仍能运行: