From d25e3854b1c6bcf374ea1267294a34b86f92c1dc Mon Sep 17 00:00:00 2001 From: Alfred Huang Date: Tue, 18 Oct 2022 10:05:12 -0700 Subject: [PATCH] Cleanup unneeded functions in regsaves --- .../include/cg/aarch64/aarch64_regsaves.h | 48 ----- .../src/cg/aarch64/aarch64_regsaves.cpp | 165 ------------------ 2 files changed, 213 deletions(-) diff --git a/src/mapleall/maple_be/include/cg/aarch64/aarch64_regsaves.h b/src/mapleall/maple_be/include/cg/aarch64/aarch64_regsaves.h index 516e323679..604d87af03 100644 --- a/src/mapleall/maple_be/include/cg/aarch64/aarch64_regsaves.h +++ b/src/mapleall/maple_be/include/cg/aarch64/aarch64_regsaves.h @@ -111,28 +111,6 @@ class SavedBBInfo { MapleSet bbList; }; -#ifdef REMOVE_DOM_REDUNDANCY -/* Info for BBs reachable from current BB */ -class ReachInfo { - public: - explicit ReachInfo(MapleAllocator &alloc) : bbList (alloc.Adapter()) {} - - MapleSet &GetBBList() { - return bbList; - } - - bool ContainInReachingBBs(BBID bid) { - if (bbList.find(bid) != bbList.end()) { - return true; - } - return false; - } - - private: - MapleSet bbList; -}; -#endif - class AArch64RegSavesOpt : public RegSavesOpt { public: AArch64RegSavesOpt(CGFunc &func, MemPool &pool, DomAnalysis &dom, PostDomAnalysis &pdom) @@ -141,9 +119,6 @@ class AArch64RegSavesOpt : public RegSavesOpt { pDomInfo(&pdom), bbSavedRegs(alloc.Adapter()), regSavedBBs(alloc.Adapter()), -#ifdef REMOVE_DOM_REDUNDANCY - reachingBBs(alloc.Adapter()), -#endif regOffset(alloc.Adapter()), visited(alloc.Adapter()), id2bb(alloc.Adapter()) { @@ -155,12 +130,6 @@ class AArch64RegSavesOpt : public RegSavesOpt { for (size_t i = 0; i < regSavedBBs.size(); ++i) { regSavedBBs[i] = nullptr; } -#ifdef REMOVE_DOM_REDUNDANCY - reachingBBs.resize(func.NumBBs()); - for (size_t i = 0; i < bbSavedRegs.size(); ++i) { - reachingBBs[i] = nullptr; - } -#endif } ~AArch64RegSavesOpt() override = default; @@ -192,12 +161,7 @@ class AArch64RegSavesOpt : public RegSavesOpt { void AdjustRegOffsets(); void InsertCalleeSaveCode(); void InsertCalleeRestoreCode(); -#ifdef REMOVE_DOM_REDUNDANCY - void CreateReachingBBs(ReachInfo &rp, const BB &bb); - BB* RemoveRedundancy(BB *startbb, regno_t reg); -#endif void PrintSaveLocs(AArch64reg reg); - void Verify(regno_t reg, BB* bb, std::set *visited, uint32 *s, uint32 *r); void Run() override; DomAnalysis *GetDomInfo() const { @@ -277,15 +241,6 @@ class AArch64RegSavesOpt : public RegSavesOpt { return bbSavedRegs[bid]; } -#ifdef REMOVE_DOM_REDUNDANCY - ReachInfo *GetReachingEntry(BBID bid) { - if (reachingBBs[bid] == nullptr) { - reachingBBs[bid] = memPool->New(alloc); - } - return reachingBBs[bid]; - } -#endif - void SetId2bb(BB *bb) { id2bb[bb->GetId()] = bb; } @@ -303,9 +258,6 @@ class AArch64RegSavesOpt : public RegSavesOpt { CalleeBitsType *calleeBitsAcc = nullptr; MapleVector bbSavedRegs; /* set of regs to be saved in a BB */ MapleVector regSavedBBs; /* set of BBs to be saved for a reg */ -#ifdef REMOVE_DOM_REDUNDANCY - MapleVector reachingBBs; /* set of BBs reachable from a BB */ -#endif MapleMap regOffset; /* save offset of each register */ MapleSet visited; /* temp */ MapleMap id2bb; /* bbid to bb* mapping */ diff --git a/src/mapleall/maple_be/src/cg/aarch64/aarch64_regsaves.cpp b/src/mapleall/maple_be/src/cg/aarch64/aarch64_regsaves.cpp index 2c1b694e29..f9ea314678 100644 --- a/src/mapleall/maple_be/src/cg/aarch64/aarch64_regsaves.cpp +++ b/src/mapleall/maple_be/src/cg/aarch64/aarch64_regsaves.cpp @@ -31,21 +31,6 @@ namespace maplebe { continue; \ } -#ifdef REMOVE_DOM_REDUNDANCY -void AArch64RegSavesOpt::CreateReachingBBs(ReachInfo &rp, const BB &bb) { - (void)visited.insert(bb.GetId()); - (void)rp.GetBBList().insert(bb.GetId()); - for (auto succ : bb.GetSuccs()) { - if (visited.count(succ->GetId()) == 0) { - CreateReachingBBs(rp, *succ); - } - } -#if RS_DUMP - M_LOG << " --ReachingBBs for BB " << bb.GetId() << " created\n"; -#endif -} -#endif - void AArch64RegSavesOpt::InitData() { calleeBitsDef = cgFunc->GetMemoryPool()->NewArray(cgFunc->NumBBs()); errno_t retDef = memset_s(calleeBitsDef, cgFunc->NumBBs() * sizeof(CalleeBitsType), @@ -346,71 +331,6 @@ bool AArch64RegSavesOpt::AlreadySavedInDominatorList(const BB *bb, regno_t reg) return false; /* not previously saved, to save at bb */ } -#ifdef REMOVE_DOM_REDUNDANCY -/* Return true if reg is already to be saved in all paths to target - from already saved BBs */ -BB* AArch64RegSavesOpt::RemoveRedundancy(BB *target, regno_t reg) { - uint32 cbit = RegBitMap(reg); - if (regSavedBBs[cbit] == nullptr) { - return target; /* no previously save */ - } - MapleSet &saveSet = regSavedBBs[cbit]->GetBBList(); - BB *targ = target; - while (true) { - if (targ->GetPreds().empty()) { - break; /* entry node */ - } - BBID tbid = targ->GetId(); - bool change = false; - for (BB *from : saveSet) { - BBID fbid = from->GetId(); - if (tbid == fbid) { - continue; - } - ReachInfo *rp = GetReachingEntry(fbid); - if (rp->GetBBList().empty()) { - (void)visited.clear(); - CreateReachingBBs(rp, from); - } - if (rp->ContainInReachingBBs(tbid)) { /* BB reaches curbb */ - change = true; - targ = GetDomInfo()->GetDom(tbid); - break; - } - } - if (!change) { - break; /* targ is dest */ - } - } - - /* If the newly found blk reaches any already previously saved blocks, - remove these blks from bbSavedRegs */ - ReachInfo *rp = GetReachingEntry(targ->GetId()); - if (rp->GetBBList().empty()) { - CreateReachingBBs(rp, targ); - } - for (BB *bb : saveSet) { - if (bb->GetId() == targ->GetId()) { -#if RS_DUMP - M_LOG << " --R" << (reg - 1) << " already saved in BB" << targ->GetId()<< "\n"; -#endif - continue; - } else if (bb->GetPreds().empty()) { - continue; - } - if (rp->ContainInReachingBBs(bb->GetId())) { - saveSet.erase(bb); - bbSavedRegs[bb->GetId()]->RemoveSaveReg(reg); -#if RS_DUMP - M_LOG << " --R" << (reg - 1) << " save removed from BB" << bb->GetId() << "\n"; -#endif - } - } - - return targ; -} -#endif - BB* AArch64RegSavesOpt::FindLoopDominator(BB *bb, regno_t reg, bool *done) { BB *bbDom = bb; while (bbDom->GetLoop() != nullptr) { @@ -471,14 +391,6 @@ void AArch64RegSavesOpt::DetermineCalleeSaveLocationsDoms() { continue; } -#ifdef REMOVE_DOM_REDUNDANCY - bbDom = RemoveRedundancy(bbDom, reg); - if (regSavedBBs[i] == nullptr) { - regSavedBBs[i] = memPool->New(alloc); - } - regSavedBBs[i]->InsertBB(bbDom); -#endif - /* Check if a dominator of bbDom was already a location to save */ if (AlreadySavedInDominatorList(bbDom, reg)) { mask <<= 1; @@ -813,83 +725,6 @@ void AArch64RegSavesOpt::PrintSaveLocs(AArch64reg reg) { M_LOG << "]\n"; } -/* DFS to verify the save/restore are in pair(s) within a path */ -#ifdef VERIFY -void AArch64RegSavesOpt::Verify(regno_t reg, BB *bb, std::set *visited, uint32 *s, uint32 *r) { - (void)visited->insert(bb); - BBId bid = bb->GetId(); - M_LOG << bid << ","; /* path trace can be long */ - - if (bbSavedRegs[bid] != nullptr) { - bool entryRestoreMet = false; - if (bbSavedRegs[bid]->ContainEntryReg(reg)) { - M_LOG << "[^" << bid << "],"; // entry restore found - if (*s == 0) { - M_LOG << "Alert: nR@" << bid << " found w/o save\n"; - return; - } - /* complete s/xR found, continue */ - M_LOG << "(" << *s << "," << bid << ") "; - *r = bid; - entryRestoreMet = true; - } - if (bbSavedRegs[bid]->ContainSaveReg(reg)) { - M_LOG << "[" << bid << "],"; // save found - if (*s != 0 && !entryRestoreMet) { - /* another save found before last save restored */ - M_LOG << "Alert: save@" << bid << " found after save@" << *s << "\n"; - return; - } - if (entryRestoreMet) { - *r = 0; - } - *s = bid; - } - if (bbSavedRegs[bid]->ContainExitReg(reg)) { - M_LOG << "[" << bid << "$],"; // exit restore found - if (*s == 0) { - M_LOG << "Alert: xR@" << bid << " found w/o save\n"; - return; - } - /* complete s/xR found, continue */ - M_LOG << "(" << *s << "," << bid << ") "; - *r = bid; - } - } - - if (bb->GetSuccs().size() == 0) { - if (*s != 0 && *r == 0) { - M_LOG << "Alert: save@" << *s << " w/o restore reaches end"; - } - M_LOG << " " << bid << " ended>\n"; - *r = 0; - } - for (BB *sBB : bb->GetSuccs()) { - if (visited->count(sBB) == 0) { - Verify(reg, sBB, visited, s, r); - } - } - if (*s == bid) { - /* clear only when returned from previous calls to the orig save site */ - /* clear savebid since all of its succs already visited */ - *s = 0; - } - if (*r == bid) { - /* clear restorebid if all of its preds already visited */ - bool clear = true; - for (BB *pBB : bb->GetPreds()) { - if (visited->count(pBB) == 0) { - clear = false; - break; - } - } - if (clear) { - *r = 0; - } - } -} -#endif - void AArch64RegSavesOpt::InsertCalleeRestoreCode() { BBID bid = 0; BB *saveBB = cgFunc->GetCurBB(); -- Gitee