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

@@ -109,52 +109,21 @@ use-def或 def-use描述的是“值在哪里被定义、又在哪里被
---
## 5. 当前代码框架
## 5. 相关文件
1. IR 核心
- `include/ir/IR.h`
- `src/ir/Instruction.cpp`
- `src/ir/BasicBlock.cpp`
- `src/ir/Function.cpp`
- `src/ir/Module.cpp`
- `src/ir/IRPrinter.cpp`
以下文件与本实验内容相关,建议优先阅读。
2. 分析与优化
- `src/ir/analysis/DominatorTree.cpp`
- `src/ir/analysis/LoopInfo.cpp`
- `src/ir/passes/Mem2Reg.cpp`
- `src/ir/passes/ConstFold.cpp`
- `src/ir/passes/CSE.cpp`
- `src/ir/passes/DCE.cpp`
- `src/ir/passes/CFGSimplify.cpp`
- `src/ir/passes/PassManager.cpp`
3. 入口
- `src/main.cpp`
- `include/ir/IR.h`
- `src/ir/passes/Mem2Reg.cpp`
- `src/ir/passes/ConstFold.cpp`
- `src/ir/passes/DCE.cpp`
- `src/ir/passes/PassManager.cpp`
---
## 6. 需要修改的文件
## 6. 算法说明
1. 核心优化实现
- `src/ir/passes/Mem2Reg.cpp`(建议先完成,作为后续标量优化前置)
- `src/ir/passes/ConstFold.cpp`
- `src/ir/passes/CSE.cpp`
- `src/ir/passes/DCE.cpp`
- `src/ir/passes/CFGSimplify.cpp`
- `src/ir/passes/PassManager.cpp`
2. 视实现需要可能修改
- `include/ir/IR.h``src/ir/Instruction.cpp`(补充副作用/可删除性信息)
- `src/ir/IRPrinter.cpp`(调试输出增强)
- `src/ir/analysis/DominatorTree.cpp``src/ir/analysis/LoopInfo.cpp`(辅助分析)
- `src/ir/Value.cpp`(若补充 use-def 关系)
---
## 7. 算法说明
### 7.1 Dead无用代码删除
### 6.1 Dead无用代码删除
可以采用“标记 + 清扫”思路:
@@ -164,7 +133,7 @@ use-def或 def-use描述的是“值在哪里被定义、又在哪里被
> 本实验不限定具体思路,实现可自由设计。
### 7.2 Clean
### 6.2 Clean
在 DCE 后对 CFG 做结构化清理,常见包括:
@@ -173,7 +142,7 @@ use-def或 def-use描述的是“值在哪里被定义、又在哪里被
3. 线性可合并块合并
4. 不可达块删除
### 7.3 优化顺序建议
### 6.3 优化顺序建议
建议仅约束一条:
@@ -181,7 +150,7 @@ use-def或 def-use描述的是“值在哪里被定义、又在哪里被
其余优化遍(如 `ConstFold``CSE``DCE``CFGSimplify`)的组织顺序不做硬性规定,可根据你的实现自由设计;必要时可采用迭代方式直到 IR 不再变化。
### 7.4 公共子表达式消除Common Subexpression Elimination
### 6.4 公共子表达式消除Common Subexpression Elimination
原理:
如果同一个表达式在程序中被多次计算,并且其操作数在计算之间没有改变,则可以只计算一次,并复用计算结果。
@@ -194,14 +163,14 @@ use-def或 def-use描述的是“值在哪里被定义、又在哪里被
---
## 8. 构建与验证
## 7. 构建与验证
```bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j "$(nproc)"
```
### 8.1 观察 IR
### 7.1 观察 IR
```bash
./build/bin/compiler --emit-ir test/test_case/simple_add.sy
@@ -209,7 +178,7 @@ cmake --build build -j "$(nproc)"
这条命令只适合先观察单个样例的 IR 形态。完成 Lab5 后,不能只检查 `simple_add`,还应覆盖 `test/test_case` 下全部测试用例。
### 8.2 语义回归
### 7.2 语义回归
```bash
./scripts/verify_ir.sh test/test_case/simple_add.sy test/test_result/ir --run