From: Daniel Berlin Date: Tue, 4 Apr 2017 23:43:04 +0000 (+0000) Subject: Revert "MemorySSA: Add support for caching clobbering access in stores" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d8050a7d38c84893e6d29d47ab3af7172c3cef61;p=llvm Revert "MemorySSA: Add support for caching clobbering access in stores" This reverts revision r299322. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299485 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Transforms/Utils/MemorySSA.h b/include/llvm/Transforms/Utils/MemorySSA.h index abacfc69e7c..ac3c1cd0d7a 100644 --- a/include/llvm/Transforms/Utils/MemorySSA.h +++ b/include/llvm/Transforms/Utils/MemorySSA.h @@ -246,16 +246,6 @@ public: return MA->getValueID() == MemoryUseVal || MA->getValueID() == MemoryDefVal; } - // Sadly, these have to be public because they are needed in some of the iterators. - virtual bool isOptimized() const = 0; - virtual MemoryAccess *getOptimized() const = 0; - virtual void setOptimized(MemoryAccess *) = 0; - - /// \brief Reset the ID of what this MemoryUse was optimized to, causing it to - /// be rewalked by the walker if necessary. - /// This really should only be called by tests. - virtual void resetOptimized() = 0; - protected: friend class MemorySSA; friend class MemorySSAUpdater; @@ -264,12 +254,8 @@ protected: : MemoryAccess(C, Vty, BB, 1), MemoryInst(MI) { setDefiningAccess(DMA); } - void setDefiningAccess(MemoryAccess *DMA, bool Optimized = false) { - setOperand(0, DMA); - if (!Optimized) - return; - setOptimized(DMA); - } + + void setDefiningAccess(MemoryAccess *DMA) { setOperand(0, DMA); } private: Instruction *MemoryInst; @@ -302,18 +288,20 @@ public: void print(raw_ostream &OS) const override; - virtual void setOptimized(MemoryAccess *DMA) override { - OptimizedID = DMA->getID(); + void setDefiningAccess(MemoryAccess *DMA, bool Optimized = false) { + if (Optimized) + OptimizedID = DMA->getID(); + MemoryUseOrDef::setDefiningAccess(DMA); } - virtual bool isOptimized() const override { + bool isOptimized() const { return getDefiningAccess() && OptimizedID == getDefiningAccess()->getID(); } - virtual MemoryAccess *getOptimized() const override { - return getDefiningAccess(); - } - virtual void resetOptimized() override { OptimizedID = INVALID_MEMORYACCESS_ID; } + /// \brief Reset the ID of what this MemoryUse was optimized to, causing it to + /// be rewalked by the walker if necessary. + /// This really should only be called by tests. + void resetOptimized() { OptimizedID = INVALID_MEMORYACCESS_ID; } protected: friend class MemorySSA; @@ -345,8 +333,7 @@ public: MemoryDef(LLVMContext &C, MemoryAccess *DMA, Instruction *MI, BasicBlock *BB, unsigned Ver) - : MemoryUseOrDef(C, DMA, MemoryDefVal, MI, BB), ID(Ver), - Optimized(nullptr), OptimizedID(INVALID_MEMORYACCESS_ID) {} + : MemoryUseOrDef(C, DMA, MemoryDefVal, MI, BB), ID(Ver) {} // allocate space for exactly one operand void *operator new(size_t s) { return User::operator new(s, 1); } @@ -356,17 +343,6 @@ public: return MA->getValueID() == MemoryDefVal; } - virtual void setOptimized(MemoryAccess *MA) override { - Optimized = MA; - OptimizedID = getDefiningAccess()->getID(); - } - virtual MemoryAccess *getOptimized() const override { return Optimized; } - virtual bool isOptimized() const override { - return getOptimized() && OptimizedID == getDefiningAccess()->getID(); - } - virtual void resetOptimized() override { OptimizedID = INVALID_MEMORYACCESS_ID; } - - void print(raw_ostream &OS) const override; protected: @@ -376,8 +352,6 @@ protected: private: const unsigned ID; - MemoryAccess *Optimized; - unsigned int OptimizedID; }; template <> @@ -1101,15 +1075,10 @@ struct def_chain_iterator def_chain_iterator &operator++() { // N.B. liveOnEntry has a null defining access. - if (auto *MUD = dyn_cast(MA)) { - if (MUD->isOptimized()) - MA = MUD->getOptimized(); - else - MA = MUD->getDefiningAccess(); - } else { + if (auto *MUD = dyn_cast(MA)) + MA = MUD->getDefiningAccess(); + else MA = nullptr; - } - return *this; } diff --git a/lib/Transforms/Utils/MemorySSA.cpp b/lib/Transforms/Utils/MemorySSA.cpp index 8ceec2e2ac8..5a3b163992e 100644 --- a/lib/Transforms/Utils/MemorySSA.cpp +++ b/lib/Transforms/Utils/MemorySSA.cpp @@ -2181,9 +2181,9 @@ MemorySSA::CachingWalker::getClobberingMemoryAccess(MemoryAccess *MA) { // If this is an already optimized use or def, return the optimized result. // Note: Currently, we do not store the optimized def result because we'd need // a separate field, since we can't use it as the defining access. - if (auto *MUD = dyn_cast(StartingAccess)) - if (MUD->isOptimized()) - return MUD->getOptimized(); + if (MemoryUse *MU = dyn_cast(StartingAccess)) + if (MU->isOptimized()) + return MU->getDefiningAccess(); const Instruction *I = StartingAccess->getMemoryInst(); UpwardsMemoryQuery Q(I, StartingAccess); @@ -2199,8 +2199,8 @@ MemorySSA::CachingWalker::getClobberingMemoryAccess(MemoryAccess *MA) { if (isUseTriviallyOptimizableToLiveOnEntry(*MSSA->AA, I)) { MemoryAccess *LiveOnEntry = MSSA->getLiveOnEntryDef(); Cache.insert(StartingAccess, LiveOnEntry, Q.StartingLoc, Q.IsCall); - if (auto *MUD = dyn_cast(StartingAccess)) - MUD->setDefiningAccess(LiveOnEntry, true); + if (MemoryUse *MU = dyn_cast(StartingAccess)) + MU->setDefiningAccess(LiveOnEntry, true); return LiveOnEntry; } @@ -2217,8 +2217,8 @@ MemorySSA::CachingWalker::getClobberingMemoryAccess(MemoryAccess *MA) { DEBUG(dbgs() << *DefiningAccess << "\n"); DEBUG(dbgs() << "Final Memory SSA clobber for " << *I << " is "); DEBUG(dbgs() << *Result << "\n"); - if (auto *MUD = dyn_cast(StartingAccess)) - MUD->setDefiningAccess(Result, true); + if (MemoryUse *MU = dyn_cast(StartingAccess)) + MU->setDefiningAccess(Result, true); return Result; } diff --git a/lib/Transforms/Utils/MemorySSAUpdater.cpp b/lib/Transforms/Utils/MemorySSAUpdater.cpp index c396bd73504..7e043956171 100644 --- a/lib/Transforms/Utils/MemorySSAUpdater.cpp +++ b/lib/Transforms/Utils/MemorySSAUpdater.cpp @@ -451,8 +451,8 @@ void MemorySSAUpdater::removeMemoryAccess(MemoryAccess *MA) { while (!MA->use_empty()) { Use &U = *MA->use_begin(); - if (auto *MUD = dyn_cast(U.getUser())) - MUD->resetOptimized(); + if (MemoryUse *MU = dyn_cast(U.getUser())) + MU->resetOptimized(); U.set(NewDefTarget); } }