summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2016-06-15 00:19:56 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2016-06-15 00:19:56 +0000
commit4a697c312f901a3a1ec92e24c91cefd64f6b4346 (patch)
treefe31b6f1dc9a8e0035d4f76c30e0f9ef0466d375 /llvm/lib
parent577be0fed36f4d26e767a39a7838c63e90574e13 (diff)
downloadbcm5719-llvm-4a697c312f901a3a1ec92e24c91cefd64f6b4346.tar.gz
bcm5719-llvm-4a697c312f901a3a1ec92e24c91cefd64f6b4346.zip
[LoopUnroll] Don't crash trying to unroll loop with EH pad exit
We do not support splitting cleanuppad or catchswitches. This is problematic for passes which assume that a loop is in loop simplify form (the loop would have a dedicated exit block instead of sharing it). While it isn't great that we don't support this for cleanups, we still cannot make loop-simplify form an assertable precondition because indirectbr will also disable these sorts of CFG cleanups. This fixes PR28132. llvm-svn: 272739
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
index 65eab475b69..91af4a1922c 100644
--- a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
@@ -922,6 +922,11 @@ static bool tryToUnrollLoop(Loop *L, DominatorTree &DT, LoopInfo *LI,
DEBUG(dbgs() << " Not unrolling loop with inlinable calls.\n");
return false;
}
+ if (!L->isLoopSimplifyForm()) {
+ DEBUG(
+ dbgs() << " Not unrolling loop which is not in loop-simplify form.\n");
+ return false;
+ }
// Find trip count and trip multiple if count is not available
unsigned TripCount = 0;
OpenPOWER on IntegriCloud