mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 20:23:59 +00:00
Teach SplitBlockPredecessors how to handle landingpad blocks.
Patch by: Igor Laevsky <igor@azulsystems.com> "Currently SplitBlockPredecessors generates incorrect code in case if basic block we are going to split has a landingpad. Also seems like it is fairly common case among it's users to conditionally call either SplitBlockPredecessors or SplitLandingPadPredecessors. Because of this I think it is reasonable to add this condition directly into SplitBlockPredecessors." Differential Revision: http://reviews.llvm.org/D7157 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227390 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -119,15 +119,8 @@ static void ConnectProlog(Loop *L, Value *TripCount, unsigned Count,
|
||||
assert(Exit && "Loop must have a single exit block only");
|
||||
// Split the exit to maintain loop canonicalization guarantees
|
||||
SmallVector<BasicBlock*, 4> Preds(pred_begin(Exit), pred_end(Exit));
|
||||
if (!Exit->isLandingPad()) {
|
||||
SplitBlockPredecessors(Exit, Preds, ".unr-lcssa", AA, DT, LI,
|
||||
P->mustPreserveAnalysisID(LCSSAID));
|
||||
} else {
|
||||
SmallVector<BasicBlock*, 2> NewBBs;
|
||||
SplitLandingPadPredecessors(Exit, Preds, ".unr1-lcssa", ".unr2-lcssa",
|
||||
NewBBs, AA, DT, LI,
|
||||
P->mustPreserveAnalysisID(LCSSAID));
|
||||
}
|
||||
SplitBlockPredecessors(Exit, Preds, ".unr-lcssa", AA, DT, LI,
|
||||
P->mustPreserveAnalysisID(LCSSAID));
|
||||
// Add the branch to the exit block (around the unrolled loop)
|
||||
BranchInst::Create(Exit, NewPH, BrLoopExit, InsertPt);
|
||||
InsertPt->eraseFromParent();
|
||||
|
Reference in New Issue
Block a user