style(doc): 简化实验文档文件指引
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user