[backend-O1-1]修复了寄存器分配器在处理函数参数时不健壮的问题

This commit is contained in:
Lixuanwang
2025-08-20 01:37:59 +08:00
parent ef68235446
commit dd2725796a
4 changed files with 147 additions and 32 deletions

View File

@@ -129,11 +129,11 @@ void RISCv64ISel::select() {
mv->addOperand(std::make_unique<RegOperand>(original_vreg));
CurMBB->addInstruction(std::move(mv));
MFunc->addProtectedArgumentVReg(saved_vreg);
// 4.【关键】更新vreg映射表将arg的vreg指向新的、安全的vreg
// 这样,后续所有对该参数的 getVReg(arg) 调用都会自动获得 saved_vreg
// 使得函数体内的代码都使用这个被保存过的值。
vreg_map[arg] = saved_vreg;
int_arg_idx++;
}
// --- 处理浮点参数 ---
@@ -147,9 +147,8 @@ void RISCv64ISel::select() {
fmv->addOperand(std::make_unique<RegOperand>(original_vreg));
CurMBB->addInstruction(std::move(fmv));
// 同样更新映射
MFunc->addProtectedArgumentVReg(saved_vreg);
vreg_map[arg] = saved_vreg;
fp_arg_idx++;
}
// 对于栈传递的参数,则无需处理