diff options
author | Chijun Sima <simachijun@gmail.com> | 2019-02-22 05:41:43 +0000 |
---|---|---|
committer | Chijun Sima <simachijun@gmail.com> | 2019-02-22 05:41:43 +0000 |
commit | f131d6110eb1a981fd65e630051abe57ab6a4fa9 (patch) | |
tree | 02353cc2162bf583a4bba9d47bab381ffd19968e | |
parent | 00ebc0cb92e94b654cc0cf0dc67dde8e440699bd (diff) | |
download | bcm5719-llvm-f131d6110eb1a981fd65e630051abe57ab6a4fa9.tar.gz bcm5719-llvm-f131d6110eb1a981fd65e630051abe57ab6a4fa9.zip |
[DTU] Deprecate insertEdge*/deleteEdge*
Summary: This patch converts all existing `insertEdge*/deleteEdge*` to `applyUpdates` and marks `insertEdge*/deleteEdge*` as deprecated.
Reviewers: kuhar, brzycki
Reviewed By: kuhar, brzycki
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D58443
llvm-svn: 354652
-rw-r--r-- | llvm/include/llvm/Analysis/DomTreeUpdater.h | 14 | ||||
-rw-r--r-- | llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/Transforms/Scalar/JumpThreading.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/Transforms/Utils/BasicBlockUtils.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/Transforms/Utils/Local.cpp | 18 | ||||
-rw-r--r-- | llvm/lib/Transforms/Utils/LoopUtils.cpp | 7 | ||||
-rw-r--r-- | llvm/unittests/Analysis/DomTreeUpdaterTest.cpp | 31 |
9 files changed, 49 insertions, 33 deletions
diff --git a/llvm/include/llvm/Analysis/DomTreeUpdater.h b/llvm/include/llvm/Analysis/DomTreeUpdater.h index 7c8ebc5433a..9497a31daf8 100644 --- a/llvm/include/llvm/Analysis/DomTreeUpdater.h +++ b/llvm/include/llvm/Analysis/DomTreeUpdater.h @@ -136,7 +136,8 @@ public: /// DEBUG mode. CAUTION! This function has to be called *after* making the /// update on the actual CFG. It is illegal to submit any update that has /// already been applied. } - void insertEdge(BasicBlock *From, BasicBlock *To); + LLVM_ATTRIBUTE_DEPRECATED(void insertEdge(BasicBlock *From, BasicBlock *To), + "Use applyUpdates() instead."); /// \deprecated {Submit an edge insertion to all available trees. /// Under either Strategy, an invalid update will be discard silently. @@ -146,7 +147,9 @@ public: /// want to discard an invalid update. /// CAUTION! It is illegal to submit any update that has already been /// submitted. } - void insertEdgeRelaxed(BasicBlock *From, BasicBlock *To); + LLVM_ATTRIBUTE_DEPRECATED(void insertEdgeRelaxed(BasicBlock *From, + BasicBlock *To), + "Use applyUpdates() instead."); /// \deprecated { Submit an edge deletion to all available trees. The Eager /// Strategy flushes this update immediately while the Lazy Strategy queues @@ -155,7 +158,8 @@ public: /// CAUTION! This function has to be called *after* making the update on the /// actual CFG. It is illegal to submit any update that has already been /// submitted. } - void deleteEdge(BasicBlock *From, BasicBlock *To); + LLVM_ATTRIBUTE_DEPRECATED(void deleteEdge(BasicBlock *From, BasicBlock *To), + "Use applyUpdates() instead."); /// \deprecated { Submit an edge deletion to all available trees. /// Under either Strategy, an invalid update will be discard silently. @@ -165,7 +169,9 @@ public: /// want to discard an invalid update. /// CAUTION! It is illegal to submit any update that has already been /// submitted. } - void deleteEdgeRelaxed(BasicBlock *From, BasicBlock *To); + LLVM_ATTRIBUTE_DEPRECATED(void deleteEdgeRelaxed(BasicBlock *From, + BasicBlock *To), + "Use applyUpdates() instead."); /// Delete DelBB. DelBB will be removed from its Parent and /// erased from available trees if it exists and finally get deleted. diff --git a/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp b/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp index 92840e56313..8463cebbe79 100644 --- a/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp +++ b/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp @@ -366,7 +366,7 @@ static void splitCallSite( assert(Splits.size() == 2 && "Expected exactly 2 splits!"); for (unsigned i = 0; i < Splits.size(); i++) { Splits[i]->getTerminator()->eraseFromParent(); - DTU.deleteEdge(Splits[i], TailBB); + DTU.applyUpdates({{DominatorTree::Delete, Splits[i], TailBB}}); } // Erase the tail block once done with musttail patching diff --git a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp index 5ae7036dc6c..755bf344fb4 100644 --- a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp +++ b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp @@ -373,7 +373,7 @@ static bool processSwitch(SwitchInst *SI, LazyValueInfo *LVI, ++NumDeadCases; Changed = true; if (--SuccessorsCount[Succ] == 0) - DTU.deleteEdge(BB, Succ); + DTU.applyUpdates({{DominatorTree::Delete, BB, Succ}}); continue; } if (State == LazyValueInfo::True) { diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp index f74f7e28e52..80b3cd79750 100644 --- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp @@ -1159,7 +1159,7 @@ bool JumpThreadingPass::ProcessBlock(BasicBlock *BB) { ConstantInt::getFalse(CondCmp->getType()); ReplaceFoldableUses(CondCmp, CI); } - DTU->deleteEdgeRelaxed(BB, ToRemoveSucc); + DTU->applyUpdates({{DominatorTree::Delete, BB, ToRemoveSucc}}); return true; } @@ -1246,7 +1246,7 @@ bool JumpThreadingPass::ProcessImpliedCondition(BasicBlock *BB) { RemoveSucc->removePredecessor(BB); BranchInst::Create(KeepSucc, BI); BI->eraseFromParent(); - DTU->deleteEdgeRelaxed(BB, RemoveSucc); + DTU->applyUpdates({{DominatorTree::Delete, BB, RemoveSucc}}); return true; } CurrentBB = CurrentPred; diff --git a/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp b/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp index 8238fad1190..c3ccfde8acc 100644 --- a/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp +++ b/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp @@ -678,7 +678,7 @@ static bool eliminateRecursiveTailCall( BB->getInstList().erase(Ret); // Remove return. BB->getInstList().erase(CI); // Remove call. - DTU.insertEdge(BB, OldEntry); + DTU.applyUpdates({{DominatorTree::Insert, BB, OldEntry}}); ++NumEliminated; return true; } diff --git a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp index 6f49eaec428..0d6d1022502 100644 --- a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp +++ b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp @@ -721,7 +721,7 @@ ReturnInst *llvm::FoldReturnIntoUncondBranch(ReturnInst *RI, BasicBlock *BB, UncondBranch->eraseFromParent(); if (DTU) - DTU->deleteEdge(Pred, BB); + DTU->applyUpdates({{DominatorTree::Delete, Pred, BB}}); return cast<ReturnInst>(NewRet); } diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp index 12c4ff1e37c..3ef549429b3 100644 --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -128,7 +128,8 @@ bool llvm::ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions, Builder.CreateBr(Destination); BI->eraseFromParent(); if (DTU) - DTU->deleteEdgeRelaxed(BB, OldDest); + DTU->applyUpdates({{DominatorTree::Delete, BB, OldDest}}, + /*ForceRemoveDuplicates*/ true); return true; } @@ -204,7 +205,8 @@ bool llvm::ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions, i = SI->removeCase(i); e = SI->case_end(); if (DTU) - DTU->deleteEdgeRelaxed(ParentBB, DefaultDest); + DTU->applyUpdates({{DominatorTree::Delete, ParentBB, DefaultDest}}, + /*ForceRemoveDuplicates*/ true); continue; } @@ -664,7 +666,8 @@ void llvm::RemovePredecessorAndSimplify(BasicBlock *BB, BasicBlock *Pred, if (PhiIt != OldPhiIt) PhiIt = &BB->front(); } if (DTU) - DTU->deleteEdgeRelaxed(Pred, BB); + DTU->applyUpdates({{DominatorTree::Delete, Pred, BB}}, + /*ForceRemoveDuplicates*/ true); } /// MergeBasicBlockIntoOnlyPred - DestBB is a block with one predecessor and its @@ -1967,7 +1970,8 @@ static void changeToCall(InvokeInst *II, DomTreeUpdater *DTU = nullptr) { UnwindDestBB->removePredecessor(BB); II->eraseFromParent(); if (DTU) - DTU->deleteEdgeRelaxed(BB, UnwindDestBB); + DTU->applyUpdates({{DominatorTree::Delete, BB, UnwindDestBB}}, + /*ForceRemoveDuplicates*/ true); } BasicBlock *llvm::changeToInvokeAndSplitBasicBlock(CallInst *CI, @@ -2114,7 +2118,8 @@ static bool markAliveBlocks(Function &F, UnwindDestBB->removePredecessor(II->getParent()); II->eraseFromParent(); if (DTU) - DTU->deleteEdgeRelaxed(BB, UnwindDestBB); + DTU->applyUpdates({{DominatorTree::Delete, BB, UnwindDestBB}}, + /*ForceRemoveDuplicates*/ true); } else changeToCall(II, DTU); Changed = true; @@ -2203,7 +2208,8 @@ void llvm::removeUnwindEdge(BasicBlock *BB, DomTreeUpdater *DTU) { TI->replaceAllUsesWith(NewTI); TI->eraseFromParent(); if (DTU) - DTU->deleteEdgeRelaxed(BB, UnwindDest); + DTU->applyUpdates({{DominatorTree::Delete, BB, UnwindDest}}, + /*ForceRemoveDuplicates*/ true); } /// removeUnreachableBlocks - Remove blocks that are not reachable, even diff --git a/llvm/lib/Transforms/Utils/LoopUtils.cpp b/llvm/lib/Transforms/Utils/LoopUtils.cpp index 44f47bf71ca..c3a02685244 100644 --- a/llvm/lib/Transforms/Utils/LoopUtils.cpp +++ b/llvm/lib/Transforms/Utils/LoopUtils.cpp @@ -535,10 +535,9 @@ void llvm::deleteDeadLoop(Loop *L, DominatorTree *DT = nullptr, DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Eager); if (DT) { // Update the dominator tree by informing it about the new edge from the - // preheader to the exit. - DTU.insertEdge(Preheader, ExitBlock); - // Inform the dominator tree about the removed edge. - DTU.deleteEdge(Preheader, L->getHeader()); + // preheader to the exit and the removed edge. + DTU.applyUpdates({{DominatorTree::Insert, Preheader, ExitBlock}, + {DominatorTree::Delete, Preheader, L->getHeader()}}); } // Use a map to unique and a vector to guarantee deterministic ordering. diff --git a/llvm/unittests/Analysis/DomTreeUpdaterTest.cpp b/llvm/unittests/Analysis/DomTreeUpdaterTest.cpp index 0fe98237fc1..a1154a3bfbb 100644 --- a/llvm/unittests/Analysis/DomTreeUpdaterTest.cpp +++ b/llvm/unittests/Analysis/DomTreeUpdaterTest.cpp @@ -71,8 +71,9 @@ TEST(DomTreeUpdater, EagerUpdateBasicOperations) { SwitchInst *SI = dyn_cast<SwitchInst>(BB0->getTerminator()); ASSERT_NE(SI, nullptr) << "Couldn't get SwitchInst."; - DTU.insertEdgeRelaxed(BB0, BB0); - DTU.deleteEdgeRelaxed(BB0, BB0); + DTU.applyUpdates( + {{DominatorTree::Insert, BB0, BB0}, {DominatorTree::Delete, BB0, BB0}}, + /*ForceRemoveDuplicates*/ true); // Delete edge bb0 -> bb3 and push the update twice to verify duplicate // entries are discarded. @@ -105,9 +106,10 @@ TEST(DomTreeUpdater, EagerUpdateBasicOperations) { ASSERT_FALSE(DTU.hasPendingUpdates()); // Invalid Insert: no edge bb1 -> bb2 after change to bb0. - DTU.insertEdgeRelaxed(BB1, BB2); // Invalid Delete: edge exists bb0 -> bb1 after change to bb0. - DTU.deleteEdgeRelaxed(BB0, BB1); + DTU.applyUpdates( + {{DominatorTree::Insert, BB1, BB2}, {DominatorTree::Delete, BB0, BB1}}, + /*ForceRemoveDuplicates*/ true); // DTU working with Eager UpdateStrategy does not need to flush. ASSERT_TRUE(DT.verify()); @@ -182,7 +184,8 @@ TEST(DomTreeUpdater, EagerUpdateReplaceEntryBB) { EXPECT_EQ(F->begin()->getName(), NewEntry->getName()); EXPECT_TRUE(&F->getEntryBlock() == NewEntry); - DTU.insertEdgeRelaxed(NewEntry, BB0); + DTU.applyUpdates({{DominatorTree::Insert, NewEntry, BB0}}, + /*ForceRemoveDuplicates*/ true); // Changing the Entry BB requires a full recalculation of DomTree. DTU.recalculate(*F); @@ -251,7 +254,7 @@ TEST(DomTreeUpdater, LazyUpdateDTBasicOperations) { BasicBlock *BB3 = &*FI++; // Test discards of self-domination update. - DTU.deleteEdge(BB0, BB0); + DTU.applyUpdates({{DominatorTree::Delete, BB0, BB0}}); ASSERT_FALSE(DTU.hasPendingDomTreeUpdates()); // Delete edge bb0 -> bb3 and push the update twice to verify duplicate @@ -358,8 +361,10 @@ TEST(DomTreeUpdater, LazyUpdateDTInheritedPreds) { // +-> succ // // While the final CFG form is functionally identical the updates to - // DTU are not. In the first case we must have DTU.insertEdge(Pred1, Succ) - // while in the latter case we must *NOT* have DTU.insertEdge(Pred1, Succ). + // DTU are not. In the first case we must have + // DTU.applyUpdates({{DominatorTree::Insert, Pred1, Succ}}) while in the + // latter case we must *NOT* have DTU.applyUpdates({{DominatorTree::Insert, + // Pred1, Succ}}). // CFG Change: bb0 now only has bb0 -> bb1 and bb0 -> bb3. We are preparing to // remove bb2. @@ -412,9 +417,9 @@ TEST(DomTreeUpdater, LazyUpdateDTInheritedPreds) { ASSERT_TRUE(isa<UnreachableInst>(BB1->getTerminator())); EXPECT_EQ(BB1->getParent(), F); - // Update the DTU. In this case we don't call DTU.insertEdge(BB0, BB3) because - // the edge previously existed at the start of this test when DT was first - // created. + // Update the DTU. In this case we don't submit {DominatorTree::Insert, BB0, + // BB3} because the edge previously existed at the start of this test when DT + // was first created. Updates.push_back({DominatorTree::Delete, BB0, BB1}); Updates.push_back({DominatorTree::Delete, BB1, BB3}); @@ -467,7 +472,7 @@ TEST(DomTreeUpdater, LazyUpdateBasicOperations) { BasicBlock *BB2 = &*FI++; BasicBlock *BB3 = &*FI++; // Test discards of self-domination update. - DTU.deleteEdge(BB0, BB0); + DTU.applyUpdates({{DominatorTree::Delete, BB0, BB0}}); // Delete edge bb0 -> bb3 and push the update twice to verify duplicate // entries are discarded. @@ -558,7 +563,7 @@ TEST(DomTreeUpdater, LazyUpdateReplaceEntryBB) { // Insert the new edge between new_entry -> bb0. Without this the // recalculate() call below will not actually recalculate the DT as there // are no changes pending and no blocks deleted. - DTU.insertEdge(NewEntry, BB0); + DTU.applyUpdates({{DominatorTree::Insert, NewEntry, BB0}}); // Changing the Entry BB requires a full recalculation. DTU.recalculate(*F); |