Pass:Deadcode
1. 目标与位置
- 位置:
backend/Deadcode.v
- 输入/输出:
RTL.program → RTL.program
- 目标:删除不影响可观察语义的冗余计算与赋值。
2. 核心思想
- 基于“需要性”分析(need
analysis),计算哪些寄存器/结果是必要的。
- 对不需要的计算结果,删除指令或转成空操作。
3. 关键数据结构与函数
NE/NA:寄存器需求环境与分析域。
transfer /
analyze:后向数据流分析,得到每个节点的需求信息。
transf_instr:按需求信息重写指令。
transf_program:程序入口。
4. 具体变换要点
- 结果不使用的计算:
- builtin/内存:
- 对有副作用的 builtin 或 store 保守处理。
- 条件/分支:
5. 与前后 pass 的接口
6. 常见边界与约束
- 需精确区分“纯计算”与“有副作用”指令。
- 依赖
ValueAnalysis 的近似信息时必须保守。