New EH representation for MSVC compatibility
This introduces new instructions neccessary to implement MSVC-compatible exception handling support. Most of the middle-end and none of the back-end haven't been audited or updated to take them into account. Differential Revision: http://reviews.llvm.org/D11097 llvm-svn: 243766
This commit is contained in:
@@ -142,6 +142,8 @@ BasicBlock *llvm::InsertPreheaderForLoop(Loop *L, Pass *PP) {
|
||||
BasicBlock *PreheaderBB;
|
||||
PreheaderBB = SplitBlockPredecessors(Header, OutsideBlocks, ".preheader", DT,
|
||||
LI, PreserveLCSSA);
|
||||
if (!PreheaderBB)
|
||||
return nullptr;
|
||||
|
||||
DEBUG(dbgs() << "LoopSimplify: Creating pre-header "
|
||||
<< PreheaderBB->getName() << "\n");
|
||||
@@ -178,6 +180,8 @@ static BasicBlock *rewriteLoopExitBlock(Loop *L, BasicBlock *Exit,
|
||||
|
||||
NewExitBB = SplitBlockPredecessors(Exit, LoopBlocks, ".loopexit", DT, LI,
|
||||
PreserveLCSSA);
|
||||
if (!NewExitBB)
|
||||
return nullptr;
|
||||
|
||||
DEBUG(dbgs() << "LoopSimplify: Creating dedicated exit block "
|
||||
<< NewExitBB->getName() << "\n");
|
||||
@@ -256,8 +260,10 @@ static Loop *separateNestedLoop(Loop *L, BasicBlock *Preheader,
|
||||
return nullptr;
|
||||
|
||||
// The header is not a landing pad; preheader insertion should ensure this.
|
||||
assert(!L->getHeader()->isLandingPad() &&
|
||||
"Can't insert backedge to landing pad");
|
||||
BasicBlock *Header = L->getHeader();
|
||||
assert(!Header->isLandingPad() && "Can't insert backedge to landing pad");
|
||||
if (!Header->canSplitPredecessors())
|
||||
return nullptr;
|
||||
|
||||
PHINode *PN = findPHIToPartitionLoops(L, DT, AC);
|
||||
if (!PN) return nullptr; // No known way to partition.
|
||||
@@ -285,7 +291,6 @@ static Loop *separateNestedLoop(Loop *L, BasicBlock *Preheader,
|
||||
|
||||
bool PreserveLCSSA = PP->mustPreserveAnalysisID(LCSSAID);
|
||||
|
||||
BasicBlock *Header = L->getHeader();
|
||||
BasicBlock *NewBB = SplitBlockPredecessors(Header, OuterLoopPreds, ".outer",
|
||||
DT, LI, PreserveLCSSA);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user