[llvm-commits] [llvm] r93633 - in /llvm/trunk: include/llvm/Analysis/DominatorInternals.h test/Analysis/PostDominators/pr6047_a.ll test/Analysis/PostDominators/pr6047_b.ll test/Analysis/PostDominators/pr6047_c.ll test/Analysis/PostDominators/pr6047_d.ll

Tobias Grosser grosser at fim.uni-passau.de
Sat Jan 16 05:38:07 PST 2010


Author: grosser
Date: Sat Jan 16 07:38:07 2010
New Revision: 93633

URL: http://llvm.org/viewvc/llvm-project?rev=93633&view=rev
Log:
Fix PR6047

Nodes that had children outside of the post dominator tree (infinite loops)
where removed from the post dominator tree. This seems to be wrong. Leave them
in the tree.

Added:
    llvm/trunk/test/Analysis/PostDominators/pr6047_a.ll
    llvm/trunk/test/Analysis/PostDominators/pr6047_b.ll
    llvm/trunk/test/Analysis/PostDominators/pr6047_c.ll
    llvm/trunk/test/Analysis/PostDominators/pr6047_d.ll
Modified:
    llvm/trunk/include/llvm/Analysis/DominatorInternals.h

Modified: llvm/trunk/include/llvm/Analysis/DominatorInternals.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DominatorInternals.h?rev=93633&r1=93632&r2=93633&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Analysis/DominatorInternals.h (original)
+++ llvm/trunk/include/llvm/Analysis/DominatorInternals.h Sat Jan 16 07:38:07 2010
@@ -262,29 +262,17 @@
                                                                      DT.Info[W];
 
     // Step #2: Calculate the semidominators of all vertices
-    bool HasChildOutsideDFS = false;
 
     // initialize the semi dominator to point to the parent node
     WInfo.Semi = WInfo.Parent;
     for (typename GraphTraits<Inverse<NodeT> >::ChildIteratorType CI =
          GraphTraits<Inverse<NodeT> >::child_begin(W),
-         E = GraphTraits<Inverse<NodeT> >::child_end(W); CI != E; ++CI) {
+         E = GraphTraits<Inverse<NodeT> >::child_end(W); CI != E; ++CI)
       if (DT.Info.count(*CI)) {  // Only if this predecessor is reachable!
         unsigned SemiU = DT.Info[Eval<GraphT>(DT, *CI)].Semi;
         if (SemiU < WInfo.Semi)
           WInfo.Semi = SemiU;
       }
-      else {
-        // if the child has no DFS number it is not post-dominated by any exit, 
-        // and so is the current block.
-        HasChildOutsideDFS = true;
-      }
-    }
-
-    // if some child has no DFS number it is not post-dominated by any exit, 
-    // and so is the current block.
-    if (DT.isPostDominator() && HasChildOutsideDFS)
-      WInfo.Semi = 0;
 
     DT.Info[DT.Vertex[WInfo.Semi]].Bucket.push_back(W);
 

Added: llvm/trunk/test/Analysis/PostDominators/pr6047_a.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/PostDominators/pr6047_a.ll?rev=93633&view=auto

==============================================================================
--- llvm/trunk/test/Analysis/PostDominators/pr6047_a.ll (added)
+++ llvm/trunk/test/Analysis/PostDominators/pr6047_a.ll Sat Jan 16 07:38:07 2010
@@ -0,0 +1,15 @@
+; RUN: opt < %s -postdomtree -analyze | FileCheck %s
+define internal void @f() {
+entry:
+  br i1 undef, label %bb35, label %bb3.i
+
+bb3.i:
+  br label %bb3.i
+
+bb35.loopexit3:
+  br label %bb35
+
+bb35:
+  ret void
+}
+; CHECK: [3] %entry

Added: llvm/trunk/test/Analysis/PostDominators/pr6047_b.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/PostDominators/pr6047_b.ll?rev=93633&view=auto

==============================================================================
--- llvm/trunk/test/Analysis/PostDominators/pr6047_b.ll (added)
+++ llvm/trunk/test/Analysis/PostDominators/pr6047_b.ll Sat Jan 16 07:38:07 2010
@@ -0,0 +1,19 @@
+; RUN: opt < %s -postdomtree -analyze | FileCheck %s
+define internal void @f() {
+entry:
+  br i1 undef, label %a, label %bb3.i
+
+a:
+  br i1 undef, label %bb35, label %bb3.i
+
+bb3.i:
+  br label %bb3.i
+
+
+bb35.loopexit3:
+  br label %bb35
+
+bb35:
+  ret void
+}
+; CHECK: [4] %entry

Added: llvm/trunk/test/Analysis/PostDominators/pr6047_c.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/PostDominators/pr6047_c.ll?rev=93633&view=auto

==============================================================================
--- llvm/trunk/test/Analysis/PostDominators/pr6047_c.ll (added)
+++ llvm/trunk/test/Analysis/PostDominators/pr6047_c.ll Sat Jan 16 07:38:07 2010
@@ -0,0 +1,147 @@
+; RUN: opt < %s -postdomtree -analyze | FileCheck %s
+define internal void @f() {
+entry:
+  br i1 undef, label %bb35, label %bb3.i
+
+bb3.i:
+  br label %bb3.i
+
+bb:
+  br label %bb35
+
+bb.i:
+  br label %bb35
+
+_float32_unpack.exit:
+  br label %bb35
+
+bb.i5:
+  br label %bb35
+
+_float32_unpack.exit8:
+  br label %bb35
+
+bb32.preheader:
+  br label %bb35
+
+bb3:
+  br label %bb35
+
+bb3.split.us:
+  br label %bb35
+
+bb.i4.us:
+  br label %bb35
+
+bb7.i.us:
+  br label %bb35
+
+bb.i4.us.backedge:
+  br label %bb35
+
+bb1.i.us:
+  br label %bb35
+
+bb6.i.us:
+  br label %bb35
+
+bb4.i.us:
+  br label %bb35
+
+bb8.i.us:
+  br label %bb35
+
+bb3.i.loopexit.us:
+  br label %bb35
+
+bb.nph21:
+  br label %bb35
+
+bb4:
+  br label %bb35
+
+bb5:
+  br label %bb35
+
+bb14.preheader:
+  br label %bb35
+
+bb.nph18:
+  br label %bb35
+
+bb8.us.preheader:
+  br label %bb35
+
+bb8.preheader:
+  br label %bb35
+
+bb8.us:
+  br label %bb35
+
+bb8:
+  br label %bb35
+
+bb15.loopexit:
+  br label %bb35
+
+bb15.loopexit2:
+  br label %bb35
+
+bb15:
+  br label %bb35
+
+bb16:
+  br label %bb35
+
+bb17.loopexit.split:
+  br label %bb35
+
+bb.nph14:
+  br label %bb35
+
+bb19:
+  br label %bb35
+
+bb20:
+  br label %bb35
+
+bb29.preheader:
+  br label %bb35
+
+bb.nph:
+  br label %bb35
+
+bb23.us.preheader:
+  br label %bb35
+
+bb23.preheader:
+  br label %bb35
+
+bb23.us:
+  br label %bb35
+
+bb23:
+  br label %bb35
+
+bb30.loopexit:
+  br label %bb35
+
+bb30.loopexit1:
+  br label %bb35
+
+bb30:
+  br label %bb35
+
+bb31:
+  br label %bb35
+
+bb35.loopexit:
+  br label %bb35
+
+bb35.loopexit3:
+  br label %bb35
+
+bb35:
+  ret void
+}
+; CHECK: [3] %entry

Added: llvm/trunk/test/Analysis/PostDominators/pr6047_d.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/PostDominators/pr6047_d.ll?rev=93633&view=auto

==============================================================================
--- llvm/trunk/test/Analysis/PostDominators/pr6047_d.ll (added)
+++ llvm/trunk/test/Analysis/PostDominators/pr6047_d.ll Sat Jan 16 07:38:07 2010
@@ -0,0 +1,24 @@
+; RUN: opt < %s -postdomtree -analyze | FileCheck %s
+define internal void @f() {
+entry:
+  br i1 1, label %a, label %b
+
+a:
+br label %c
+
+b:
+br label %c
+
+c:
+  br i1 undef, label %bb35, label %bb3.i
+
+bb3.i:
+  br label %bb3.i
+
+bb35.loopexit3:
+  br label %bb35
+
+bb35:
+  ret void
+}
+; CHECK: [4] %entry





More information about the llvm-commits mailing list