summaryrefslogtreecommitdiff
path: root/lib/Analysis/PostDominators.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-10-04 14:50:20 +0000
committerChris Lattner <sabre@nondot.org>2002-10-04 14:50:20 +0000
commit7d821db9586dfcd8301957c768c68c58b1ead34a (patch)
tree3f3ab68f75f59ec5e51f8f75cf6c096c0ec22e6c /lib/Analysis/PostDominators.cpp
parent4e4caeffbdf3da85b980386131f6fd364a981153 (diff)
downloadllvm-7d821db9586dfcd8301957c768c68c58b1ead34a.tar.gz
llvm-7d821db9586dfcd8301957c768c68c58b1ead34a.tar.bz2
llvm-7d821db9586dfcd8301957c768c68c58b1ead34a.tar.xz
Handle post dominance correctly in the case where blocks do not have a path to
the exit node. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4038 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/PostDominators.cpp')
-rw-r--r--lib/Analysis/PostDominators.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/Analysis/PostDominators.cpp b/lib/Analysis/PostDominators.cpp
index 8b66ff6cad..f027949793 100644
--- a/lib/Analysis/PostDominators.cpp
+++ b/lib/Analysis/PostDominators.cpp
@@ -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