- 修改x86_64_isel.h接口,将func_meta替换为func指针,并添加新的isel函数原型 - 添加x86_64_reg_alloc.h头文件,提供架构特定的寄存器分配操作填充函数 - 更新frame_layout.h定义frame_layout上下文结构 - 重构reg_alloc.h中的寄存器分配操作结构体,将ops从指针改为值类型, 并将mark_reg_unused重命名为clean_mark_regs - 扩展scc_mir.h中的函数元数据,添加vregs_count字段和虚拟寄存器管理函数 - 重新定义MIR pass阶段枚举,添加FRAME_LAYOUT和PROLOGUE_EPILOGUE阶段 - 添加win64目标相关头文件和实现,提供Windows x64 ABI降低和寄存器分配填充 - 更新虚拟寄存器表示格式从$到%,修复alloca指令处理 - 重构寄存器分配算法,改进虚拟寄存器到物理寄存器/栈槽的映射机制 - 完善MIR pass调度,支持多阶段处理流程
31 lines
1.1 KiB
C
31 lines
1.1 KiB
C
#ifndef __SCC_MIR_PASS_H__
|
|
#define __SCC_MIR_PASS_H__
|
|
|
|
#include "scc_mir_module.h"
|
|
|
|
/** Pass 的唯一标识符 (枚举) */
|
|
typedef enum {
|
|
SCC_MIR_PASS_ABI_LOWERING, // ABI 物理化 (核心)
|
|
SCC_MIR_PASS_REG_ALLOC, // 寄存器分配 (核心)
|
|
SCC_MIR_PASS_FRAME_LAYOUT, // 栈帧布局 (核心)
|
|
SCC_MIR_PASS_PROLOGUE_EPILOGUE, // 序言/尾声插入 (核心)
|
|
SCC_MIR_PASS_DEAD_CODE_ELIM, // 死代码消除 (优化)
|
|
SCC_MIR_PASS_CONST_PROP, // 常量传播 (优化)
|
|
SCC_MIR_PASS_PEEPHOLE, // 窥孔优化 (优化)
|
|
SCC_MIR_PASS_CFG_SIMPLIFY, // CFG 简化 (优化)
|
|
SCC_MIR_PASS_COPY_PROP, // 复制传播 (优化)
|
|
SCC_MIR_PASS_COUNT
|
|
} scc_mir_pass_id_t;
|
|
|
|
/** Pass 运行阶段 (用于自动排序) */
|
|
typedef enum {
|
|
SCC_MIR_STAGE_ANY, // 无特殊阶段要求
|
|
SCC_MIR_STAGE_REGALLOC, // 寄存器分配本身
|
|
SCC_MIR_STAGE_FRAME_LAYOUT, // 帧布局
|
|
SCC_MIR_STAGE_PROLOGUE_EPILOGUE, // 函数头尾处理
|
|
} scc_mir_pass_stage_t;
|
|
|
|
void scc_mir_pass(scc_mir_module_t *mir_module, scc_mir_pass_stage_t stage);
|
|
|
|
#endif /* __SCC_LIR_PASS_H__ */
|