Verify MemorySSA after all updates.
authorAlina Sbirlea <asbirlea@google.com>
Fri, 12 Jun 2020 01:16:33 +0000 (18:16 -0700)
committerAlina Sbirlea <asbirlea@google.com>
Fri, 12 Jun 2020 01:48:41 +0000 (18:48 -0700)
Verify after completing all updates.
Resolves PR46275.

llvm/lib/Transforms/Utils/LoopUtils.cpp
llvm/test/Analysis/MemorySSA/pr46275.ll [new file with mode: 0644]

index d7ea992..16603bf 100644 (file)
@@ -622,11 +622,11 @@ void llvm::deleteDeadLoop(Loop *L, DominatorTree *DT, ScalarEvolution *SE,
     if (MSSA) {
       MSSAU->applyUpdates({{DominatorTree::Delete, Preheader, L->getHeader()}},
                           *DT);
-      if (VerifyMemorySSA)
-        MSSA->verifyMemorySSA();
       SmallSetVector<BasicBlock *, 8> DeadBlockSet(L->block_begin(),
                                                    L->block_end());
       MSSAU->removeBlocks(DeadBlockSet);
+      if (VerifyMemorySSA)
+        MSSA->verifyMemorySSA();
     }
   }
 
diff --git a/llvm/test/Analysis/MemorySSA/pr46275.ll b/llvm/test/Analysis/MemorySSA/pr46275.ll
new file mode 100644 (file)
index 0000000..01b71b6
--- /dev/null
@@ -0,0 +1,23 @@
+; RUN: opt -S -memoryssa -loop-deletion -loop-simplifycfg -verify-memoryssa < %s | FileCheck %s
+; REQUIRES: asserts
+
+; CHECK-LABEL: @foo()
+define void @foo() {
+entry:
+  br i1 false, label %for.body.lr.ph, label %for.end
+
+for.body.lr.ph:                                   ; preds = %entry
+  br label %for.body
+
+for.body:                                         ; preds = %for.body, %for.body.lr.ph
+  call void @foo()
+  call void @foo()
+  br i1 false, label %for.body, label %for.cond.for.end_crit_edge
+
+for.cond.for.end_crit_edge:                       ; preds = %for.body
+  unreachable
+
+for.end:                                          ; preds = %entry
+  ret void
+}
+