Handle post dominance correctly in the case where blocks do not have a path to
authorChris Lattner <sabre@nondot.org>
Fri, 4 Oct 2002 14:50:20 +0000 (14:50 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 4 Oct 2002 14:50:20 +0000 (14:50 +0000)
the exit node.

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

lib/Analysis/PostDominators.cpp

index 8b66ff6cad12f38cb872aadc465e432c97e9c61e..f027949793f853e16c07c11d5839ce00f1635ce7 100644 (file)
@@ -59,6 +59,18 @@ bool PostDominatorSet::runOnFunction(Function &F) {
          if (PredSet.size())
            set_intersect(WorkingSet, PredSet);
        }
+      } else if (BB != Root) {
+        // If this isn't the root basic block and it has no successors, it must
+        // be an non-returning block.  Fib a bit by saying that the root node
+        // postdominates this unreachable node.  This isn't exactly true,
+        // because there is no path from this node to the root node, but it is
+        // sorta true because any paths to the exit node would have to go
+        // through this node.
+        //
+        // This allows for postdominator properties to be built for code that
+        // doesn't return in a reasonable manner.
+        //
+        WorkingSet = Doms[Root];
       }
        
       WorkingSet.insert(BB);           // A block always dominates itself