Pass:Cshmgen
1. 目标与位置
- 位置:
cfrontend/Cshmgen.v
- 输入/输出:
Clight.program →
Csharpminor.program
- 目标:从语句级 Clight 生成更低层、显式内存访问与运算语义的
Csharpminor。
2. 核心思想
- 明确所有类型转换、算术/逻辑运算、load/store 语义。
- 将 Clight 的结构体/联合体访问转为显式 bitfield/内存操作。
- 对函数调用、builtin、memcpy 等操作进行规范化生成。
3. 关键组件
make_* 系列:构造 Csharpminor
表达式(常量、转换、算术、比较)。
make_load / make_store:生成类型/bitfield
相关的访问指令。
make_memcpy:结构体/联合体赋值转成 builtin
memcpy。
transl_expr /
transl_lvalue:表达式/左值转换。
transl_statement:语句转换(含 break/continue
处理)。
signature_of_function /
make_funcall:构造调用签名与调用指令。
- 程序入口:
transl_program。
4. 具体变换要点
- 类型与转换:
make_cast 生成一致的数值转换。
make_boolean/make_notbool
生成布尔语义。
- bitfield 支持:
make_extract_bitfield /
make_store_bitfield 处理 bitfield。
- 结构体/数组:
- 函数调用:
- 精确构造
signature,并生成 Csharpminor
的调用表达式。
5. 与前后 pass 的接口
- 前:
SimplLocals 的 Clight
- 后:
Cminorgen(转为 Cminor)
6. 常见边界与约束
- 类型不完整或非法 bitfield 会触发
res 错误。
- 复杂地址计算必须显式化为 Csharpminor 的表达式树。