From a0483d2c615eddeb234f0377fb0194a07797b40a Mon Sep 17 00:00:00 2001 From: William Chen Date: Tue, 18 Jan 2022 10:45:02 -0800 Subject: [PATCH] Fix globalopt treating cc reg as caller save and call writes it. --- src/mapleall/maple_be/src/cg/aarch64/aarch64_abi.cpp | 2 +- src/mapleall/maple_be/src/cg/aarch64/aarch64_reaching.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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 3fdf957905..8a142df215 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 1bc4de2ab4..6a01337457 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); } -- Gitee