[llvm] r353799 - [NFC] Add parameter for keeping one-input Phis in DeleteDeadBlock(s)

Max Kazantsev via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 11 22:14:27 PST 2019


Author: mkazantsev
Date: Mon Feb 11 22:14:27 2019
New Revision: 353799

URL: http://llvm.org/viewvc/llvm-project?rev=353799&view=rev
Log:
[NFC] Add parameter for keeping one-input Phis in DeleteDeadBlock(s)

Modified:
    llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h
    llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp

Modified: llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h?rev=353799&r1=353798&r2=353799&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h (original)
+++ llvm/trunk/include/llvm/Transforms/Utils/BasicBlockUtils.h Mon Feb 11 22:14:27 2019
@@ -41,19 +41,25 @@ class Value;
 
 /// Replace contents of every block in \p BBs with single unreachable
 /// instruction. If \p Updates is specified, collect all necessary DT updates
-/// into this vector.
+/// into this vector. If \p DontDeleteUselessPHIs is true, one-input Phis in
+/// successors of blocks being deleted will be preserved.
 void DetatchDeadBlocks(ArrayRef <BasicBlock *> BBs,
-                       SmallVectorImpl<DominatorTree::UpdateType> *Updates);
+                       SmallVectorImpl<DominatorTree::UpdateType> *Updates,
+                       bool DontDeleteUselessPHIs = false);
 
 /// Delete the specified block, which must have no predecessors.
-void DeleteDeadBlock(BasicBlock *BB, DomTreeUpdater *DTU = nullptr);
+void DeleteDeadBlock(BasicBlock *BB, DomTreeUpdater *DTU = nullptr,
+                     bool DontDeleteUselessPHIs = false);
 
 /// Delete the specified blocks from \p BB. The set of deleted blocks must have
 /// no predecessors that are not being deleted themselves. \p BBs must have no
 /// duplicating blocks. If there are loops among this set of blocks, all
 /// relevant loop info updates should be done before this function is called.
+/// If \p DontDeleteUselessPHIs is true, one-input Phis in successors of blocks
+/// being deleted will be preserved.
 void DeleteDeadBlocks(ArrayRef <BasicBlock *> BBs,
-                      DomTreeUpdater *DTU = nullptr);
+                      DomTreeUpdater *DTU = nullptr,
+                      bool DontDeleteUselessPHIs = false);
 
 /// We know that BB has one predecessor. If there are any single-entry PHI nodes
 /// in it, fold them away. This handles the case when all entries to the PHI

Modified: llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp?rev=353799&r1=353798&r2=353799&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp Mon Feb 11 22:14:27 2019
@@ -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 <Ba
 #endif
 
   SmallVector<DominatorTree::UpdateType, 4> Updates;
-  DetatchDeadBlocks(BBs, DTU ? &Updates : nullptr);
+  DetatchDeadBlocks(BBs, DTU ? &Updates : nullptr, DontDeleteUselessPHIs);
 
   if (DTU)
     DTU->applyUpdates(Updates, /*ForceRemoveDuplicates*/ true);




More information about the llvm-commits mailing list