aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/LoopInfo.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-02-27 21:51:38 +0000
committerChris Lattner <sabre@nondot.org>2003-02-27 21:51:38 +0000
commit5a8a2912d506a55010a44b0dc6aabc178ce34ef1 (patch)
tree795ca9b2d4dc2a53500fbb8476b0c05bc72d6b12 /lib/Analysis/LoopInfo.cpp
parent69269ac203156ae8512c9513b75e5c7217c9ac4e (diff)
Fix bug: LICM/2003-02-27-PreheaderProblem.ll
There may be a single outside predecessor and still need a new loop-preheader if the predecessor has multiple successors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5656 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/LoopInfo.cpp')
-rw-r--r--lib/Analysis/LoopInfo.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/Analysis/LoopInfo.cpp b/lib/Analysis/LoopInfo.cpp
index a361e629e1..035f92c33c 100644
--- a/lib/Analysis/LoopInfo.cpp
+++ b/lib/Analysis/LoopInfo.cpp
@@ -200,6 +200,13 @@ BasicBlock *Loop::getLoopPreheader() const {
return 0; // Multiple predecessors outside the loop
Out = *PI;
}
+
+ // Make sure there is only one exit out of the preheader...
+ succ_iterator SI = succ_begin(Out);
+ ++SI;
+ if (SI != succ_end(Out))
+ return 0; // Multiple exits from the block, must not be a preheader.
+
// If there is exactly one preheader, return it. If there was zero, then Out
// is still null.