From d307256276b5b05f6ffee9cd1c36f2a7a29f8cd3 Mon Sep 17 00:00:00 2001 From: William Chen Date: Fri, 11 Feb 2022 13:29:19 -0800 Subject: [PATCH] Update pregTable when mapping new preg --- src/mapleall/maple_be/include/cg/cg_phi_elimination.h | 2 +- .../maple_be/src/cg/aarch64/aarch64_phi_elimination.cpp | 2 +- src/mapleall/maple_be/src/cg/cg_phi_elimination.cpp | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/mapleall/maple_be/include/cg/cg_phi_elimination.h b/src/mapleall/maple_be/include/cg/cg_phi_elimination.h index 2a0369afdb..cda5b5b92b 100644 --- a/src/mapleall/maple_be/include/cg/cg_phi_elimination.h +++ b/src/mapleall/maple_be/include/cg/cg_phi_elimination.h @@ -45,7 +45,7 @@ class PhiEliminate { void UpdateRematInfo(); regno_t GetAndIncreaseTempRegNO(); RegOperand *MakeRoomForNoDefVreg(RegOperand &conflictReg); - void RecordRematInfo(regno_t vRegNO, PregIdx pIdx); + void RecordRematInfo(regno_t vRegNO, PregIdx pIdx, PrimType primType = kPtyInvalid, MIRType *mirType = nullptr); PregIdx FindRematInfo(regno_t vRegNO) { return remateInfoAfterSSA.count(vRegNO) ? remateInfoAfterSSA[vRegNO] : -1; } diff --git a/src/mapleall/maple_be/src/cg/aarch64/aarch64_phi_elimination.cpp b/src/mapleall/maple_be/src/cg/aarch64/aarch64_phi_elimination.cpp index c4724bb74c..26452dcbac 100644 --- a/src/mapleall/maple_be/src/cg/aarch64/aarch64_phi_elimination.cpp +++ b/src/mapleall/maple_be/src/cg/aarch64/aarch64_phi_elimination.cpp @@ -138,7 +138,7 @@ void AArch64PhiEliminate::MaintainRematInfo(RegOperand &destOpnd, RegOperand &fr regno_t rematRegNO = fromSSAVersion->GetOriginalRegNO(); MIRPreg *fPreg = static_cast(cgFunc)->GetPseudoRegFromVirtualRegNO(rematRegNO); if (fPreg != nullptr) { - RecordRematInfo(destOpnd.GetRegisterNumber(), fPreg->GetPregNo()); + RecordRematInfo(destOpnd.GetRegisterNumber(), fPreg->GetPregNo(), fPreg->GetPrimType(), fPreg->GetMIRType()); } } else { regno_t rematRegNO = fromOpnd.GetRegisterNumber(); diff --git a/src/mapleall/maple_be/src/cg/cg_phi_elimination.cpp b/src/mapleall/maple_be/src/cg/cg_phi_elimination.cpp index c3a3676eac..73d29e42c9 100644 --- a/src/mapleall/maple_be/src/cg/cg_phi_elimination.cpp +++ b/src/mapleall/maple_be/src/cg/cg_phi_elimination.cpp @@ -94,12 +94,15 @@ RegOperand *PhiEliminate::MakeRoomForNoDefVreg(RegOperand &conflictReg) { } } -void PhiEliminate::RecordRematInfo(regno_t vRegNO, PregIdx pIdx) { +void PhiEliminate::RecordRematInfo(regno_t vRegNO, PregIdx pIdx, PrimType primType, MIRType *mirType) { if (remateInfoAfterSSA.count(vRegNO)) { if (remateInfoAfterSSA[vRegNO] != pIdx) { remateInfoAfterSSA.erase(vRegNO); } } else { + if (cgFunc->GetFunction().GetPregTab()->GetPregIdxFromPregno(vRegNO) == 0) { + cgFunc->GetFunction().GetPregTab()->EnterPregNo(vRegNO, primType, mirType); + } (void)remateInfoAfterSSA.emplace(std::pair(vRegNO, pIdx)); } } -- Gitee