pass-linearize
Pass:Linearize
1. 目标与位置
- 位置:
backend/Linearize.v - 输入/输出:
LTL.program→Linear.program - 目标:将 CFG 线性化为指令序列,并插入必要的标签与跳转。
2. 核心思想
- 先求可达性,再枚举基本块顺序。
- 对枚举进行验证,确保完整覆盖可达节点。
- 线性化时为每个块插入标签与显式分支。
3. 关键数据结构与函数
reachable/enumerate:计算并验证节点顺序。linearize_node/linearize_body:将 CFG 转为线性代码。transf_program:程序入口。
4. 与前后 pass 的接口
- 前:
Tunneling - 后:
CleanupLabels
5. 常见边界与约束
- 枚举必须覆盖所有可达节点,否则返回错误。
- 线性化需保持原 CFG 的控制流语义。