diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-11-08 02:36:00 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-11-08 02:36:00 +0000 |
commit | e35244cf636b684e0725738cab900ee8f024d044 (patch) | |
tree | 9d54d31e838d7d5ec7f668499431f307e7b53cc3 /llvm/lib | |
parent | c4898504ea6089a3a45bd389e8fa5db6f244da90 (diff) | |
download | bcm5719-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.cpp | 4 |
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(); |