From: Daniel Berlin Date: Mon, 27 Jun 2016 18:22:27 +0000 (+0000) Subject: Factor out buildMemorySSA from getWalker. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9577f286d41d1219f79a115a7a87086588c1a7af;p=llvm Factor out buildMemorySSA from getWalker. NFC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273901 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Transforms/Utils/MemorySSA.h b/include/llvm/Transforms/Utils/MemorySSA.h index 5b3d40bc3e8..cec36a8cc0b 100644 --- a/include/llvm/Transforms/Utils/MemorySSA.h +++ b/include/llvm/Transforms/Utils/MemorySSA.h @@ -594,7 +594,7 @@ protected: private: class CachingWalker; - + void buildMemorySSA(); void verifyUseInDefs(MemoryAccess *, MemoryAccess *) const; using AccessMap = DenseMap>; diff --git a/lib/Transforms/Utils/MemorySSA.cpp b/lib/Transforms/Utils/MemorySSA.cpp index f647f209ac9..289fff8292d 100644 --- a/lib/Transforms/Utils/MemorySSA.cpp +++ b/lib/Transforms/Utils/MemorySSA.cpp @@ -10,6 +10,7 @@ // This file implements the MemorySSA class. // //===----------------------------------------------------------------===// +#include "llvm/Transforms/Utils/MemorySSA.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/DepthFirstIterator.h" @@ -38,7 +39,6 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/FormattedStream.h" #include "llvm/Transforms/Scalar.h" -#include "llvm/Transforms/Utils/MemorySSA.h" #include #define DEBUG_TYPE "memoryssa" @@ -272,7 +272,7 @@ void MemorySSA::markUnreachableAsLiveOnEntry(BasicBlock *BB) { MemorySSA::MemorySSA(Function &Func, AliasAnalysis *AA, DominatorTree *DT) : AA(AA), DT(DT), F(Func), LiveOnEntryDef(nullptr), Walker(nullptr), NextID(0) { - getWalker(); // Ensure MemorySSA has been built. + buildMemorySSA(); } MemorySSA::MemorySSA(MemorySSA &&MSSA) @@ -301,12 +301,7 @@ MemorySSA::AccessList *MemorySSA::getOrCreateAccessList(const BasicBlock *BB) { return Res.first->second.get(); } -MemorySSAWalker *MemorySSA::getWalker() { - if (Walker) - return Walker.get(); - - Walker = make_unique(this, AA, DT); - +void MemorySSA::buildMemorySSA() { // We create an access to represent "live on entry", for things like // arguments or users of globals, where the memory they use is defined before // the beginning of the function. We do not actually insert it into the IR. @@ -398,6 +393,8 @@ MemorySSAWalker *MemorySSA::getWalker() { SmallPtrSet Visited; renamePass(DT->getRootNode(), LiveOnEntryDef.get(), Visited); + MemorySSAWalker *Walker = getWalker(); + // Now optimize the MemoryUse's defining access to point to the nearest // dominating clobbering def. // This ensures that MemoryUse's that are killed by the same store are @@ -421,7 +418,13 @@ MemorySSAWalker *MemorySSA::getWalker() { for (auto &BB : F) if (!Visited.count(&BB)) markUnreachableAsLiveOnEntry(&BB); +} +MemorySSAWalker *MemorySSA::getWalker() { + if (Walker) + return Walker.get(); + + Walker = make_unique(this, AA, DT); return Walker.get(); }