mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-10 20:33:15 +00:00
Revert r137871. The loop simplify pass should require all exits from a loop that
aren't from an indirect branch need to be dominated by the loop header. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137981 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1c44d869cd
commit
66af89f642
@ -398,9 +398,6 @@ BasicBlock *LoopSimplify::InsertPreheaderForLoop(Loop *L) {
|
|||||||
/// blocks. This method is used to split exit blocks that have predecessors
|
/// blocks. This method is used to split exit blocks that have predecessors
|
||||||
/// outside of the loop.
|
/// outside of the loop.
|
||||||
BasicBlock *LoopSimplify::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) {
|
BasicBlock *LoopSimplify::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) {
|
||||||
// Don't split a landing pad block.
|
|
||||||
if (Exit->isLandingPad()) return 0;
|
|
||||||
|
|
||||||
SmallVector<BasicBlock*, 8> LoopBlocks;
|
SmallVector<BasicBlock*, 8> LoopBlocks;
|
||||||
for (pred_iterator I = pred_begin(Exit), E = pred_end(Exit); I != E; ++I) {
|
for (pred_iterator I = pred_begin(Exit), E = pred_end(Exit); I != E; ++I) {
|
||||||
BasicBlock *P = *I;
|
BasicBlock *P = *I;
|
||||||
@ -749,10 +746,9 @@ void LoopSimplify::verifyAnalysis() const {
|
|||||||
(void)HasIndBrPred;
|
(void)HasIndBrPred;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Indirectbr and LandingPad can interfere with exit block canonicalization.
|
// Indirectbr can interfere with exit block canonicalization.
|
||||||
if (!L->hasDedicatedExits()) {
|
if (!L->hasDedicatedExits()) {
|
||||||
bool HasIndBrExiting = false;
|
bool HasIndBrExiting = false;
|
||||||
bool HasLPadExiting = false;
|
|
||||||
SmallVector<BasicBlock*, 8> ExitingBlocks;
|
SmallVector<BasicBlock*, 8> ExitingBlocks;
|
||||||
L->getExitingBlocks(ExitingBlocks);
|
L->getExitingBlocks(ExitingBlocks);
|
||||||
for (unsigned i = 0, e = ExitingBlocks.size(); i != e; ++i) {
|
for (unsigned i = 0, e = ExitingBlocks.size(); i != e; ++i) {
|
||||||
@ -760,18 +756,10 @@ void LoopSimplify::verifyAnalysis() const {
|
|||||||
HasIndBrExiting = true;
|
HasIndBrExiting = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (const InvokeInst *II =
|
|
||||||
dyn_cast<InvokeInst>(ExitingBlocks[i]->getTerminator())) {
|
|
||||||
if (L->contains(II->getNormalDest()) &&
|
|
||||||
!L->contains(II->getUnwindDest())) {
|
|
||||||
HasLPadExiting = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
assert((HasIndBrExiting || HasLPadExiting) &&
|
assert(HasIndBrExiting &&
|
||||||
"LoopSimplify has no excuse for missing exit block info!");
|
"LoopSimplify has no excuse for missing exit block info!");
|
||||||
(void)HasIndBrExiting; (void)HasLPadExiting;
|
(void)HasIndBrExiting;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user