Pass:Constprop
1. 目标与位置
- 位置:
backend/Constprop.v
- 输入/输出:
RTL.program → RTL.program
- 目标:对 RTL 执行常量传播与强度削弱,提升后续优化与代码质量。
2. 核心思想
- 基于
ValueAnalysis
的抽象解释,获得寄存器/内存的近似值信息。
- 结合 ROM 只读内存信息 (
romem) 做进一步常量折叠。
- 对
builtin 进行强度削弱和常量折叠。
3. 关键函数
transf_instr:按分析结果重写指令。
transf_function /
transf_program:函数/程序入口。
builtin_strength_reduction:builtin
参数与结果优化。
4. 具体变换要点
- 常量替换:
- 强度削弱:
- 对部分运算和 builtin 替换为更低成本形式。
- 迭代分析:
- 使用有限迭代(如
num_iter)控制分析收敛时间。
5. 与前后 pass 的接口
- 前:
Renumber
- 后:
CSE / Deadcode
6. 常见边界与约束
- 仅在分析信息足够可靠时替换,避免破坏语义。
- 对内存相关指令必须保守处理。