pass-tailcall
Pass:Tailcall
1. 目标与位置
- 位置:
backend/Tailcall.v - 输入/输出:
RTL.program→RTL.program - 目标:识别并转换为尾调用,减少栈开销。
2. 核心思想
- 将满足条件的
Icall/Itailcall机会转换为Itailcall。 - 仅在函数栈块为空时做转换(避免破坏栈布局)。
- 变换迭代次数有上限(
niter = 5)以保证终止。
3. 关键函数
transf_instr:识别单条指令中的尾调用机会。transf_function/transf_program:函数/程序级变换入口。
4. 与前后 pass 的接口
- 前:
RTLgen生成的 RTL - 后:
Inlining(更大尺度优化)
5. 常见边界与约束
- 若函数包含栈帧分配,则不做 tailcall 转换。
- 只对严格满足语义等价的调用位置进行替换。