Fix a bug introduced in my last commit.
authorOwen Anderson <resistor@mac.com>
Thu, 26 Jul 2007 18:57:04 +0000 (18:57 +0000)
committerOwen Anderson <resistor@mac.com>
Thu, 26 Jul 2007 18:57:04 +0000 (18:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40542 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/MemoryDependenceAnalysis.cpp
test/Transforms/GVN/2007-07-25-InfiniteLoop.ll
test/Transforms/GVN/2007-07-26-NonRedundant.ll [new file with mode: 0644]

index 064a0872bb0c34990934af7303dc9e304aa5efeb..4bd877142a2ba99213b59cd259ec0656cae838a8 100644 (file)
@@ -117,12 +117,18 @@ bool MemoryDependenceAnalysis::nonLocalHelper(Instruction* query,
   visited.insert(block);
   
   bool inserted = false;
+  bool predOnStack = false;
   for (pred_iterator PI = pred_begin(block), PE = pred_end(block);
        PI != PE; ++PI)
     if (!visited.count(*PI))
       inserted |= nonLocalHelper(query, *PI, resp, visited);
-  
+    else
+      predOnStack = true;
+
   visited.erase(block);
+
+  if (!inserted && !predOnStack)
+    resp.insert(std::make_pair(block, None));
   
   return inserted;
 }
index 50eaf2f8c0c362f6d4c4636945708a281444a2bf..442ba083749f7b8db87a84725c6751ce838ad722 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | opt -gvn | llvm-dis
+; RUN: llvm-as < %s | opt -gvn | llvm-dis | not grep {tmp10 =}
 
        %struct.INT2 = type { i32, i32 }
 @blkshifts = external global %struct.INT2*             ; <%struct.INT2**> [#uses=2]
diff --git a/test/Transforms/GVN/2007-07-26-NonRedundant.ll b/test/Transforms/GVN/2007-07-26-NonRedundant.ll
new file mode 100644 (file)
index 0000000..204803a
--- /dev/null
@@ -0,0 +1,16 @@
+; RUN: llvm-as < %s | opt -gvn | llvm-dis
+
+@bsLive = external global i32          ; <i32*> [#uses=2]
+
+define i32 @bsR(i32 %n) {
+entry:
+       br i1 false, label %cond_next, label %bb19
+
+cond_next:             ; preds = %entry
+       store i32 0, i32* @bsLive, align 4
+       br label %bb19
+
+bb19:          ; preds = %cond_next, %entry
+       %tmp29 = load i32* @bsLive, align 4             ; <i32> [#uses=0]
+       ret i32 0
+}