Fix broken logic in DominatorTreeBase::Split. Part of PR4238.
authorEli Friedman <eli.friedman@gmail.com>
Thu, 21 May 2009 21:47:54 +0000 (21:47 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Thu, 21 May 2009 21:47:54 +0000 (21:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72231 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/Dominators.h
test/DebugInfo/2009-01-15-RecordVariableCrash.ll
test/Transforms/LCSSA/2006-10-31-UnreachableBlock-2.ll

index b9ac2805c9f09fbf7fd0a0119a6818166c884942..b405f5b71ed7c23c570a7cce8bdea73b730f882d 100644 (file)
@@ -251,49 +251,16 @@ protected:
 
     assert(!PredBlocks.empty() && "No predblocks??");
 
-    // The newly inserted basic block will dominate existing basic blocks iff the
-    // PredBlocks dominate all of the non-pred blocks.  If all predblocks dominate
-    // the non-pred blocks, then they all must be the same block!
-    //
     bool NewBBDominatesNewBBSucc = true;
-    {
-      typename GraphT::NodeType* OnePred = PredBlocks[0];
-      size_t i = 1, e = PredBlocks.size();
-      for (i = 1; !DT.isReachableFromEntry(OnePred); ++i) {
-        assert(i != e && "Didn't find reachable pred?");
-        OnePred = PredBlocks[i];
+    for (typename GraphTraits<Inverse<N> >::ChildIteratorType PI =
+         GraphTraits<Inverse<N> >::child_begin(NewBBSucc),
+         E = GraphTraits<Inverse<N> >::child_end(NewBBSucc); PI != E; ++PI)
+      if (*PI != NewBB && !DT.dominates(NewBBSucc, *PI) &&
+          DT.isReachableFromEntry(*PI)) {
+        NewBBDominatesNewBBSucc = false;
+        break;
       }
 
-      for (; i != e; ++i)
-        if (PredBlocks[i] != OnePred && DT.isReachableFromEntry(OnePred)) {
-          NewBBDominatesNewBBSucc = false;
-          break;
-        }
-
-      if (NewBBDominatesNewBBSucc)
-        for (typename GraphTraits<Inverse<N> >::ChildIteratorType PI =
-             GraphTraits<Inverse<N> >::child_begin(NewBBSucc),
-             E = GraphTraits<Inverse<N> >::child_end(NewBBSucc); PI != E; ++PI)
-          if (*PI != NewBB && !DT.dominates(NewBBSucc, *PI)) {
-            NewBBDominatesNewBBSucc = false;
-            break;
-          }
-    }
-
-    // The other scenario where the new block can dominate its successors are when
-    // all predecessors of NewBBSucc that are not NewBB are dominated by NewBBSucc
-    // already.
-    if (!NewBBDominatesNewBBSucc) {
-      NewBBDominatesNewBBSucc = true;
-      for (typename GraphTraits<Inverse<N> >::ChildIteratorType PI = 
-           GraphTraits<Inverse<N> >::child_begin(NewBBSucc),
-           E = GraphTraits<Inverse<N> >::child_end(NewBBSucc); PI != E; ++PI)
-        if (*PI != NewBB && !DT.dominates(NewBBSucc, *PI)) {
-          NewBBDominatesNewBBSucc = false;
-          break;
-        }
-    }
-
     // Find NewBB's immediate dominator and create new dominator tree node for
     // NewBB.
     NodeT *NewBBIDom = 0;
index 0fa216700dc9b3e005a4c66cd332c6e0d05a40f7..68268bac49fcbab8b446ff46d2db4f1be956d8e0 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | llc -f -o /dev/null
+; RUN: llvm-as < %s | llc -f -o /dev/null -verify-dom-info
        %llvm.dbg.anchor.type = type { i32, i32 }
        %llvm.dbg.basictype.type = type { i32, { }*, i8*, { }*, i32, i64, i64, i64, i32, i32, i8*, i8* }
        %llvm.dbg.compile_unit.type = type { i32, { }*, i32, i8*, i8*, i8* }
index b85e6c36028b2bc366b1eb949bbab896339273f7..bececb1876417f8455368dd2da99edb4d21f0a74 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | opt -lcssa -disable-output
+; RUN: llvm-as < %s | opt -lcssa -disable-output -verify-dom-info
 ; PR977
 ; END.
 declare i32 @opost_block()