diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/BasicBlockUtils.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/BasicBlockUtils.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp index 2410f652fd7..c0148b94cba 100644 --- a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp +++ b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp @@ -49,13 +49,14 @@ using namespace llvm; void llvm::DetatchDeadBlocks( ArrayRef<BasicBlock *> BBs, - SmallVectorImpl<DominatorTree::UpdateType> *Updates) { + SmallVectorImpl<DominatorTree::UpdateType> *Updates, + bool DontDeleteUselessPHIs) { for (auto *BB : BBs) { // Loop through all of our successors and make sure they know that one // of their predecessors is going away. SmallPtrSet<BasicBlock *, 4> UniqueSuccessors; for (BasicBlock *Succ : successors(BB)) { - Succ->removePredecessor(BB); + Succ->removePredecessor(BB, DontDeleteUselessPHIs); if (Updates && UniqueSuccessors.insert(Succ).second) Updates->push_back({DominatorTree::Delete, BB, Succ}); } @@ -80,12 +81,13 @@ void llvm::DetatchDeadBlocks( } } -void llvm::DeleteDeadBlock(BasicBlock *BB, DomTreeUpdater *DTU) { - DeleteDeadBlocks({BB}, DTU); +void llvm::DeleteDeadBlock(BasicBlock *BB, DomTreeUpdater *DTU, + bool DontDeleteUselessPHIs) { + DeleteDeadBlocks({BB}, DTU, DontDeleteUselessPHIs); } -void llvm::DeleteDeadBlocks(ArrayRef <BasicBlock *> BBs, - DomTreeUpdater *DTU) { +void llvm::DeleteDeadBlocks(ArrayRef <BasicBlock *> BBs, DomTreeUpdater *DTU, + bool DontDeleteUselessPHIs) { #ifndef NDEBUG // Make sure that all predecessors of each dead block is also dead. SmallPtrSet<BasicBlock *, 4> Dead(BBs.begin(), BBs.end()); @@ -96,7 +98,7 @@ void llvm::DeleteDeadBlocks(ArrayRef <BasicBlock *> BBs, #endif SmallVector<DominatorTree::UpdateType, 4> Updates; - DetatchDeadBlocks(BBs, DTU ? &Updates : nullptr); + DetatchDeadBlocks(BBs, DTU ? &Updates : nullptr, DontDeleteUselessPHIs); if (DTU) DTU->applyUpdates(Updates, /*ForceRemoveDuplicates*/ true); |