]> granicus.if.org Git - llvm/commitdiff
[MemorySSA] LoopSimplify preserves MemorySSA only when flag is flipped.
authorAlina Sbirlea <asbirlea@google.com>
Tue, 14 May 2019 18:07:18 +0000 (18:07 +0000)
committerAlina Sbirlea <asbirlea@google.com>
Tue, 14 May 2019 18:07:18 +0000 (18:07 +0000)
LoopSimplify can preserve MemorySSA after r360270.
But the MemorySSA analysis is retrieved and preserved only when the
EnableMSSALoopDependency is set to true. Use the same conditional to
mark the pass as preserved, otherwise subsequent passes will get an
invalid analysis.
Resolves PR41853.

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

lib/Transforms/Utils/LoopSimplify.cpp
test/Analysis/MemorySSA/pr41853.ll [new file with mode: 0644]

index 4fa04d473e13032cbcb18bee708d90a13d54304f..5ec12aafff05b069ba1ddf7979b1d1e011db5413 100644 (file)
@@ -768,7 +768,8 @@ namespace {
       AU.addPreserved<DependenceAnalysisWrapperPass>();
       AU.addPreservedID(BreakCriticalEdgesID);  // No critical edges added.
       AU.addPreserved<BranchProbabilityInfoWrapperPass>();
-      AU.addPreserved<MemorySSAWrapperPass>();
+      if (EnableMSSALoopDependency)
+        AU.addPreserved<MemorySSAWrapperPass>();
     }
 
     /// verifyAnalysis() - Verify LoopSimplifyForm's guarantees.
diff --git a/test/Analysis/MemorySSA/pr41853.ll b/test/Analysis/MemorySSA/pr41853.ll
new file mode 100644 (file)
index 0000000..6dbc9d7
--- /dev/null
@@ -0,0 +1,16 @@
+; RUN: opt -S -memoryssa -loop-simplify -early-cse-memssa -verify-memoryssa %s | FileCheck %s
+; RUN: opt -S -memoryssa -loop-simplify -early-cse-memssa -enable-mssa-loop-dependency -verify-memoryssa %s | FileCheck %s
+; REQUIRES: asserts
+target triple = "x86_64-unknown-linux-gnu"
+
+; CHECK-LABEL: @func()
+define void @func() {
+  br i1 undef, label %bb5, label %bb3
+
+bb5:                                              ; preds = %bb5, %0
+  store i16 undef, i16* undef
+  br i1 undef, label %bb5, label %bb3
+
+bb3:                                              ; preds = %bb5, %0
+  ret void
+}