forked from OSchip/llvm-project
Reapply r142920 with fix:
An MBB which branches to an EH landing pad shouldn't be considered for tail merging. In SjLj EH, the jump to the landing pad is not done explicitly through a branch statement. The EH landing pad is added as a successor to the throwing BB. Because of that however, the branch folding pass could mistakenly think that it could merge the throwing BB with another BB. This isn't safe to do. <rdar://problem/10334833> llvm-svn: 143001
This commit is contained in:
parent
5e9e1991e9
commit
9b9932229d
|
@ -870,6 +870,9 @@ bool BranchFolder::TailMergeBlocks(MachineFunction &MF) {
|
|||
// Visit each predecessor only once.
|
||||
if (!UniquePreds.insert(PBB))
|
||||
continue;
|
||||
// Skip blocks which may jump to a landing pad. Can't tail merge these.
|
||||
if (PBB->getLandingPadSuccessor())
|
||||
continue;
|
||||
MachineBasicBlock *TBB = 0, *FBB = 0;
|
||||
SmallVector<MachineOperand, 4> Cond;
|
||||
if (!TII->AnalyzeBranch(*PBB, TBB, FBB, Cond, true)) {
|
||||
|
|
Loading…
Reference in New Issue