diff options
author | David Majnemer <david.majnemer@gmail.com> | 2016-06-15 00:19:56 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2016-06-15 00:19:56 +0000 |
commit | 4a697c312f901a3a1ec92e24c91cefd64f6b4346 (patch) | |
tree | fe31b6f1dc9a8e0035d4f76c30e0f9ef0466d375 /llvm/lib/Transforms | |
parent | 577be0fed36f4d26e767a39a7838c63e90574e13 (diff) | |
download | bcm5719-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/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp | 5 |
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; |