This may happen when the input program itself contains an infinite loop with no
exit block. In that case, we would fail to find a block post-dominating the loop
such that this block is outside of the loop.
This fixes PR24823.
Working on reducing the test case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@247710
91177308-0d34-0410-b5e6-
96231b3b80d8
}
}
else {
+ // If the loop does not exit, there is no point in looking
+ // for a post-dominator outside the loop.
+ SmallVector<MachineBasicBlock*, 4> ExitBlocks;
+ MLI->getLoopFor(Restore)->getExitingBlocks(ExitBlocks);
+ if (ExitBlocks.empty()) {
+ Restore = nullptr;
+ break;
+ }
// Push Restore outside of this loop if immediate post-dominator is
// different from restore block. If immediate post-dominator is not
// different, bail out.