compile-functions
编译函数层级分析(Compiler.v)
1. 入口与层级
核心编译链条在 driver/Compiler.v 中以函数组合定义:
transf_c_program:Csyntax → Asmtransf_clight_program:Clight → Asmtransf_cminor_program:Cminor → Asmtransf_rtl_program:RTL → Asm
这些函数通过 apply_total / apply_partial
的单子化组合把各 pass 串联。
2. 具体层级与职责
2.1 transf_c_program
- 输入:
Csyntax.program - 执行:
SimplExpr.transl_program→transf_clight_program - 作用:把 CompCert C 转为 Clight,并进入后续链条。
2.2
transf_clight_program
- 输入:
Clight.program - 执行:
SimplLocals→Cshmgen→Cminorgen→transf_cminor_program - 作用:完成前端规整与显式化内存/类型语义。
2.3
transf_cminor_program
- 输入:
Cminor.program - 执行:
Selection→RTLgen→transf_rtl_program - 作用:进入目标相关指令选择与 CFG 生成。
2.4 transf_rtl_program
- 输入:
RTL.program - 执行:
Tailcall→Inlining→RenumberConstprop→RenumberCSE→Deadcode→UnusedglobAllocation→Tunneling→Linearize→CleanupLabelsDebugvar(可选)→Stacking→Asmgen
- 作用:后端优化、寄存器分配、线性化、栈布局、汇编生成。
3. 组织方式
print/time/total_if/partial_if用于可选输出和优化开关控制。print_RTL、print_LTL等钩子在 OCaml 侧实现,用于调试输出。
4. 重要约束
- pass 顺序固定以满足语义保持证明与 IR 期望不变式。
- 每一步都在
res/Errors中处理失败情况。