mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-06 03:08:43 +00:00
Split the landing pad block only if it's a critical edge. Also intelligently
split it in the other place where we're splitting critical edges. llvm-svn: 138658
This commit is contained in:
parent
e7857867d6
commit
88b318ca91
@ -143,7 +143,19 @@ void SjLjEHPass::markInvokeCallSite(InvokeInst *II, int InvokeNo,
|
||||
|
||||
// If the unwind edge has phi nodes, split the edge.
|
||||
if (isa<PHINode>(II->getUnwindDest()->begin())) {
|
||||
SplitCriticalEdge(II, 1, this);
|
||||
// FIXME: New EH - This if-condition will be always true in the new scheme.
|
||||
if (II->getUnwindDest()->isLandingPad()) {
|
||||
if (isCriticalEdge(II, 1)) {
|
||||
SmallVector<BasicBlock*, 2> NewBBs;
|
||||
SplitLandingPadPredecessors(II->getUnwindDest(), II->getParent(),
|
||||
".1", ".2", this, NewBBs);
|
||||
LPadSuccMap[II] = *succ_begin(NewBBs[0]);
|
||||
} else {
|
||||
LPadSuccMap[II] = II->getUnwindDest();
|
||||
}
|
||||
} else {
|
||||
SplitCriticalEdge(II, 1, this);
|
||||
}
|
||||
|
||||
// If there are any phi nodes left, they must have a single predecessor.
|
||||
while (PHINode *PN = dyn_cast<PHINode>(II->getUnwindDest()->begin())) {
|
||||
@ -194,10 +206,14 @@ splitLiveRangesAcrossInvokes(SmallVector<InvokeInst*,16> &Invokes) {
|
||||
|
||||
// FIXME: New EH - This if-condition will be always true in the new scheme.
|
||||
if (II->getUnwindDest()->isLandingPad()) {
|
||||
SmallVector<BasicBlock*, 2> NewBBs;
|
||||
SplitLandingPadPredecessors(II->getUnwindDest(), II->getParent(),
|
||||
".1", ".2", this, NewBBs);
|
||||
LPadSuccMap[II] = *succ_begin(NewBBs[0]);
|
||||
if (isCriticalEdge(II, 1)) {
|
||||
SmallVector<BasicBlock*, 2> NewBBs;
|
||||
SplitLandingPadPredecessors(II->getUnwindDest(), II->getParent(),
|
||||
".1", ".2", this, NewBBs);
|
||||
LPadSuccMap[II] = *succ_begin(NewBBs[0]);
|
||||
} else {
|
||||
LPadSuccMap[II] = II->getUnwindDest();
|
||||
}
|
||||
} else {
|
||||
SplitCriticalEdge(II, 1, this);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user