]> granicus.if.org Git - llvm/commitdiff
Factor out buildMemorySSA from getWalker.
authorDaniel Berlin <dberlin@dberlin.org>
Mon, 27 Jun 2016 18:22:27 +0000 (18:22 +0000)
committerDaniel Berlin <dberlin@dberlin.org>
Mon, 27 Jun 2016 18:22:27 +0000 (18:22 +0000)
NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273901 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Transforms/Utils/MemorySSA.h
lib/Transforms/Utils/MemorySSA.cpp

index 5b3d40bc3e8d42823777e3c0656368d81e2c8487..cec36a8cc0bb96b3fbd21218693696df82bf9e82 100644 (file)
@@ -594,7 +594,7 @@ protected:
 
 private:
   class CachingWalker;
-
+  void buildMemorySSA();
   void verifyUseInDefs(MemoryAccess *, MemoryAccess *) const;
   using AccessMap = DenseMap<const BasicBlock *, std::unique_ptr<AccessList>>;
 
index f647f209ac954df5d1a694f256f5b6d5d9f938ad..289fff8292d31b25a852a807128ea6920bb1ae8d 100644 (file)
@@ -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 <algorithm>
 
 #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<CachingWalker>(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<BasicBlock *, 16> 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<CachingWalker>(this, AA, DT);
   return Walker.get();
 }