From 88974f4625efcb5ba3b108014ee9d6ded5ddc25f Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 9 Apr 2011 07:25:58 +0000 Subject: fix PR9523, a crash in looprotate on a non-canonical loop made out of indirectbr. llvm-svn: 129203 --- llvm/lib/Transforms/Scalar/LoopRotation.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'llvm/lib/Transforms/Scalar/LoopRotation.cpp') diff --git a/llvm/lib/Transforms/Scalar/LoopRotation.cpp b/llvm/lib/Transforms/Scalar/LoopRotation.cpp index 95e15784df2..e7b1a031f84 100644 --- a/llvm/lib/Transforms/Scalar/LoopRotation.cpp +++ b/llvm/lib/Transforms/Scalar/LoopRotation.cpp @@ -184,7 +184,11 @@ bool LoopRotate::rotateLoop(Loop *L) { // Now, this loop is suitable for rotation. BasicBlock *OrigPreheader = L->getLoopPreheader(); BasicBlock *OrigLatch = L->getLoopLatch(); - assert(OrigPreheader && OrigLatch && "Loop not in canonical form?"); + + // If the loop could not be converted to canonical form, it must have an + // indirectbr in it, just give up. + if (OrigPreheader == 0 || OrigLatch == 0) + return false; // Anything ScalarEvolution may know about this loop or the PHI nodes // in its header will soon be invalidated. -- cgit v1.2.3