diff --git a/src/mapleall/maple_be/src/cg/aarch64/aarch64_abi.cpp b/src/mapleall/maple_be/src/cg/aarch64/aarch64_abi.cpp index 3fdf9579056b6cfef590e1b61a08fba0a7bb7e94..8a142df215960921c8183b88c9c645f52a02c1d2 100644 --- a/src/mapleall/maple_be/src/cg/aarch64/aarch64_abi.cpp +++ b/src/mapleall/maple_be/src/cg/aarch64/aarch64_abi.cpp @@ -212,7 +212,7 @@ bool IsAvailableReg(AArch64reg reg) { } bool IsCallerSaveReg(AArch64reg regNO) { - return (R0 <= regNO && regNO <= R18) || (V0 <= regNO && regNO <= V7) || (V16 <= regNO && regNO <= V31); + return (R0 <= regNO && regNO <= R18) || (V0 <= regNO && regNO <= V7) || (V16 <= regNO && regNO <= V31) || (regNO == kRFLAG); } bool IsCalleeSavedReg(AArch64reg reg) { diff --git a/src/mapleall/maple_be/src/cg/aarch64/aarch64_reaching.cpp b/src/mapleall/maple_be/src/cg/aarch64/aarch64_reaching.cpp index 1bc4de2ab4981ef60b24d7936359963d0e386c5f..6a01337457a34072a84d6643296ac806764fe36c 100644 --- a/src/mapleall/maple_be/src/cg/aarch64/aarch64_reaching.cpp +++ b/src/mapleall/maple_be/src/cg/aarch64/aarch64_reaching.cpp @@ -542,7 +542,7 @@ void AArch64ReachingDefinition::DFSFindDefForRegOpnd(const BB &startBB, uint32 r continue; } visitedBB[predBB->GetId()] = kNormalVisited; - if (regGen[predBB->GetId()]->TestBit(regNO)) { + if (regGen[predBB->GetId()]->TestBit(regNO) || (regNO == kRFLAG && predBB->HasCall())) { defInsnVec.clear(); defInsnVec = FindRegDefBetweenInsn(regNO, predBB->GetFirstInsn(), predBB->GetLastInsn()); defInsnSet.insert(defInsnVec.begin(), defInsnVec.end()); @@ -556,7 +556,7 @@ void AArch64ReachingDefinition::DFSFindDefForRegOpnd(const BB &startBB, uint32 r continue; } visitedBB[predEhBB->GetId()] = kEHVisited; - if (regGen[predEhBB->GetId()]->TestBit(regNO)) { + if (regGen[predEhBB->GetId()]->TestBit(regNO) || (regNO == kRFLAG && predEhBB->HasCall())) { FindRegDefInBB(regNO, *predEhBB, defInsnSet); }