diff options
Diffstat (limited to 'llvm/lib/IR/BasicBlock.cpp')
-rw-r--r-- | llvm/lib/IR/BasicBlock.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/llvm/lib/IR/BasicBlock.cpp b/llvm/lib/IR/BasicBlock.cpp index b3980cf9c31..34410712645 100644 --- a/llvm/lib/IR/BasicBlock.cpp +++ b/llvm/lib/IR/BasicBlock.cpp @@ -425,11 +425,9 @@ BasicBlock *BasicBlock::splitBasicBlock(iterator I, const Twine &BBName) { // Now we must loop through all of the successors of the New block (which // _were_ the successors of the 'this' block), and update any PHI nodes in // successors. If there were PHI nodes in the successors, then they need to - // know that incoming branches will be from New, not from Old. + // know that incoming branches will be from New, not from Old (this). // - llvm::for_each(successors(New), [this, New](BasicBlock *Succ) { - Succ->replacePhiUsesWith(this, New); - }); + New->replaceSuccessorsPhiUsesWith(this, New); return New; } @@ -444,17 +442,22 @@ void BasicBlock::replacePhiUsesWith(BasicBlock *Old, BasicBlock *New) { } } -void BasicBlock::replaceSuccessorsPhiUsesWith(BasicBlock *New) { +void BasicBlock::replaceSuccessorsPhiUsesWith(BasicBlock *Old, + BasicBlock *New) { Instruction *TI = getTerminator(); if (!TI) // Cope with being called on a BasicBlock that doesn't have a terminator // yet. Clang's CodeGenFunction::EmitReturnBlock() likes to do this. return; - llvm::for_each(successors(TI), [this, New](BasicBlock *Succ) { - Succ->replacePhiUsesWith(this, New); + llvm::for_each(successors(TI), [Old, New](BasicBlock *Succ) { + Succ->replacePhiUsesWith(Old, New); }); } +void BasicBlock::replaceSuccessorsPhiUsesWith(BasicBlock *New) { + this->replaceSuccessorsPhiUsesWith(this, New); +} + /// Return true if this basic block is a landing pad. I.e., it's /// the destination of the 'unwind' edge of an invoke instruction. bool BasicBlock::isLandingPad() const { |