pass-tunneling
Pass:Tunneling
1. 目标与位置
- 位置:
backend/Tunneling.v - 输入/输出:
LTL.program→LTL.program - 目标:分支隧穿(branch tunneling),去除“跳转到跳转”的链条。
2. 核心思想
- 使用并查集(Union-Find)记录等价跳转目标。
- 把
goto/branch的目标重写为最终落点。 - 对条件分支进行保守合并,避免破坏语义。
3. 关键数据结构与函数
record_branches/record_conds_1:构建等价关系。tunnel_instr/tunnel_block:按并查集重写跳转。tunnel_program:程序入口。
4. 与前后 pass 的接口
- 前:
Allocation - 后:
Linearize
5. 常见边界与约束
- 必须保证不会引入不可达或循环破坏。
- 条件分支合并需谨慎,避免错误短路。