summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-11-08 02:36:00 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-11-08 02:36:00 +0000
commite35244cf636b684e0725738cab900ee8f024d044 (patch)
tree9d54d31e838d7d5ec7f668499431f307e7b53cc3 /llvm/lib
parentc4898504ea6089a3a45bd389e8fa5db6f244da90 (diff)
downloadbcm5719-llvm-e35244cf636b684e0725738cab900ee8f024d044.tar.gz
bcm5719-llvm-e35244cf636b684e0725738cab900ee8f024d044.zip
[WinEH] Update PHIs of CATCHRET successors
The TailDuplication machine pass ran across a malformed CFG: a PHI node referred it's predecessor's predecessor instead of it's predecessor. This occurred because we split the edge in X86ISelLowering when we processed the CATCHRET but forgot to do something about the PHI nodes. This fixes PR25444. llvm-svn: 252413
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index f5efd58e7a3..8d7712d3cd0 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -21419,10 +21419,10 @@ X86TargetLowering::EmitLoweredCatchRet(MachineInstr *MI,
// the new block to the return destination with a normal JMP_4.
MachineBasicBlock *RestoreMBB =
MF->CreateMachineBasicBlock(BB->getBasicBlock());
+ assert(BB->succ_size() == 1);
MF->insert(TargetMBB->getIterator(), RestoreMBB);
- BB->removeSuccessor(TargetMBB);
+ RestoreMBB->transferSuccessorsAndUpdatePHIs(BB);
BB->addSuccessor(RestoreMBB);
- RestoreMBB->addSuccessor(TargetMBB);
MI->getOperand(0).setMBB(RestoreMBB);
auto RestoreMBBI = RestoreMBB->begin();
OpenPOWER on IntegriCloud