[midend][backend-GEP]解决了一个32/64位宽的错误问题

This commit is contained in:
Lixuanwang
2025-07-25 22:23:26 +08:00
parent 04c5c6b44d
commit 14fb3dbe48
6 changed files with 272 additions and 77 deletions

View File

@@ -44,9 +44,11 @@ enum class RVOpcodes {
// 特殊标记,非指令
LABEL,
// 新增伪指令,用于解耦栈帧处理
FRAME_LOAD, // 从栈帧加载 (AllocaInst)
FRAME_STORE, // 保存到栈帧 (AllocaInst)
FRAME_ADDR, // [新] 获取栈帧变量的地址
FRAME_LOAD_W, // 从栈帧加载 32位 Word (对应 lw)
FRAME_LOAD_D, // 从栈帧加载 64位 Doubleword (对应 ld)
FRAME_STORE_W, // 保存 32位 Word 到栈帧 (对应 sw)
FRAME_STORE_D, // 保存 64位 Doubleword 到栈帧 (对应 sd)
FRAME_ADDR, // 获取栈帧变量的地址
};
class MachineOperand;

View File

@@ -49,6 +49,13 @@ private:
// 可用的物理寄存器池
std::vector<PhysicalReg> allocable_int_regs;
// 存储vreg到IR Value*的反向映射
// 这个map将在run()函数开始时被填充并在rewriteFunction()中使用。
std::map<unsigned, Value*> vreg_to_value_map;
// 用于计算类型大小的辅助函数
unsigned getTypeSizeInBytes(Type* type);
};
} // namespace sysy