feat(ir): 添加MIR中间表示层并重构LIR相关代码
- 新增mir库模块,包含scc_mir、scc_mir_module、scc_mir_dump等组件 - 添加LIR到MIR的转换接口scc_lir2mir - 定义MIR操作数类型和指令结构,支持虚拟寄存器、物理寄存器、立即数等 - 实现x86_64指令选择器,将LIR指令转换为MIR指令 - 重构LIR模块中函数参数命名,统一使用lir_module参数名 - 移除LIR中物理寄存器相关的代码和注释 - 更新cbuild.toml依赖配置,添加mir模块依赖
This commit is contained in:
60
libs/ir/mir/include/scc_mir.h
Normal file
60
libs/ir/mir/include/scc_mir.h
Normal file
@@ -0,0 +1,60 @@
|
||||
// scc_mir.h (示意)
|
||||
|
||||
#ifndef __SCC_MIR_H__
|
||||
#define __SCC_MIR_H__
|
||||
|
||||
#include <scc_lir.h> // 复用 VREG 概念和一些基础类型
|
||||
// #include "scc_target_desc.h" // 目标架构描述(寄存器文件、指令编码)
|
||||
|
||||
typedef enum {
|
||||
SCC_MIR_OP_NONE,
|
||||
SCC_MIR_OP_MEM, // 内存访问
|
||||
SCC_MIR_OP_VREG, // 虚拟寄存器
|
||||
SCC_MIR_OP_PREG, // 物理寄存器
|
||||
SCC_MIR_OP_IMM, // 立即数
|
||||
SCC_MIR_OP_SYMBOL, // 符号地址(用于重定位)
|
||||
SCC_MIR_OP_BLOCK // 基本块引用(label)
|
||||
} scc_mir_op_kind_t;
|
||||
|
||||
typedef struct scc_mir_operand {
|
||||
scc_mir_op_kind_t kind;
|
||||
union {
|
||||
int vreg; // 虚拟寄存器索引
|
||||
int preg; // 物理寄存器
|
||||
i64 imm; // 立即数
|
||||
const char *symbol; // 符号名
|
||||
int stack_slot; // 栈槽 ID (由 FrameLayout 分配)
|
||||
scc_lir_bblock_id_t block_id; // 目标基本块
|
||||
};
|
||||
} scc_mir_operand_t;
|
||||
|
||||
typedef enum {
|
||||
SCC_MIR_PSUEDO_ALLOCA = -1,
|
||||
} scc_mir_psuedo_op_t;
|
||||
|
||||
typedef struct scc_mir_instr {
|
||||
int opcode; // 目标特定的指令编码 (如 X86::ADD32rr)
|
||||
int num_operands; // 实际使用的操作数个数
|
||||
scc_mir_operand_t
|
||||
operands[8]; // 固定小数组,RISC 风格指令通常不超过 4 操作数
|
||||
scc_pos_t src_loc; // 调试信息 (继承自 LIR)
|
||||
} scc_mir_instr_t;
|
||||
typedef SCC_VEC(scc_mir_instr_t) scc_mir_instr_vec_t;
|
||||
|
||||
typedef scc_cfg_bblock_t scc_mir_bblock_t;
|
||||
typedef struct scc_mir_bblock_meta {
|
||||
} scc_mir_bblock_meta_t;
|
||||
#define SCC_MIR_BBLOCK_VALUES(bblock) \
|
||||
((scc_mir_instr_vec_t *)&((bblock)->values))
|
||||
|
||||
typedef scc_cfg_func_t scc_mir_func_t;
|
||||
typedef struct scc_mir_func_meta {
|
||||
// 栈帧信息 (由 FrameLayout Pass 填充)
|
||||
int frame_size;
|
||||
int stack_alignment;
|
||||
// 寄存器分配信息
|
||||
SCC_VEC(int) vreg_alloc; // vreg -> phys reg 映射
|
||||
} scc_mir_func_meta_t;
|
||||
#define SCC_MIR_FUNC_META(func) ((scc_mir_func_meta_t *)(func)->meta)
|
||||
|
||||
#endif /* __SCC_MIR_H__ */
|
||||
Reference in New Issue
Block a user