中间语言模型特点(概览)
1. Csyntax(CompCert C)
- 表达式可含副作用(赋值、短路、逗号等)。
- 仍保留接近源语言的结构与语义。
- 后续通过
SimplExpr 抽离副作用。
2. Clight
- 语句级语言:表达式“无副作用”。
- 适合形式化语义与证明,便于结构化控制流分析。
SimplLocals 对局部变量做进一步规整。
3. Csharpminor
- 更低层、接近机器的表达式与语句形式。
- 显式的内存访问与类型转换、bitfield 操作等。
- 仍保留结构化控制流。
4. Cminor
- 更靠近中间表示的“无类型”语义(弱类型)。
- 栈/地址计算更显式。
- 便于后端指令选择与控制流转换。
5. CminorSel
- 在 Cminor 基础上引入目标相关操作与寻址模式。
- 指令选择后的 IR,表达式更贴近目标 ISA。
6. RTL
- 控制流图(CFG)形式:基本块 + 显式跳转。
- 伪寄存器 + 三地址指令风格。
- 适合数据流分析(常量传播、CSE、死代码等)。
7. LTL
- 接近机器寄存器分配后的 RTL。
- 使用“位置(loc)”代替纯伪寄存器:寄存器/栈槽/组合位置。
- 体现调用约定与机器约束。
8. Linear
- 线性化后的指令序列(非 CFG)。
- 保留标签与显式跳转。
- 适合最终栈布局与汇编生成。
9. Mach
- 更贴近目标机器语义的 IR。
- 显式栈帧、调用约定与保存/恢复。
- 作为
Asmgen 的输入。
10. Asm
- 目标汇编 IR(各架构不同)。
- 具有伪指令与 builtin(由
Asmexpand 展开)。
- 最终由
PrintAsm 输出为目标汇编文本。