aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/Local.cpp
diff options
context:
space:
mode:
authorRoman Lebedev <lebedev.ri@gmail.com>2021-04-11 23:17:48 +0300
committerRoman Lebedev <lebedev.ri@gmail.com>2021-04-11 23:56:23 +0300
commit0699da1569870a4f7cf26534b87ca3c3b14caf3b (patch)
tree0e854c11a4c5b5b66387d74df9edd143c1c7869a /llvm/lib/Transforms/Utils/Local.cpp
parente5692a564a73ef63b7baaf80c2b7a62ad74e9e66 (diff)
downloadllvm-0699da1569870a4f7cf26534b87ca3c3b14caf3b.zip
llvm-0699da1569870a4f7cf26534b87ca3c3b14caf3b.tar.gz
llvm-0699da1569870a4f7cf26534b87ca3c3b14caf3b.tar.bz2
[NFCI][Local] MergeBasicBlockIntoOnlyPred(): improve Dominator Tree updating
Same as with TryToSimplifyUncondBranchFromEmptyBlock()/MergeBlockIntoPredecessor() patch.
Diffstat (limited to 'llvm/lib/Transforms/Utils/Local.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/Local.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp
index 10e1859..e285f8a 100644
--- a/llvm/lib/Transforms/Utils/Local.cpp
+++ b/llvm/lib/Transforms/Utils/Local.cpp
@@ -738,12 +738,15 @@ void llvm::MergeBasicBlockIntoOnlyPred(BasicBlock *DestBB,
SmallVector<DominatorTree::UpdateType, 32> Updates;
if (DTU) {
- for (BasicBlock *PredPredBB : predecessors(PredBB)) {
+ SmallPtrSet<BasicBlock *, 2> PredsOfPredBB(pred_begin(PredBB),
+ pred_end(PredBB));
+ Updates.reserve(Updates.size() + 2 * PredsOfPredBB.size() + 1);
+ for (BasicBlock *PredOfPredBB : PredsOfPredBB)
// This predecessor of PredBB may already have DestBB as a successor.
- if (!llvm::is_contained(successors(PredPredBB), DestBB))
- Updates.push_back({DominatorTree::Insert, PredPredBB, DestBB});
- Updates.push_back({DominatorTree::Delete, PredPredBB, PredBB});
- }
+ if (PredOfPredBB != PredBB)
+ Updates.push_back({DominatorTree::Insert, PredOfPredBB, DestBB});
+ for (BasicBlock *PredOfPredBB : PredsOfPredBB)
+ Updates.push_back({DominatorTree::Delete, PredOfPredBB, PredBB});
Updates.push_back({DominatorTree::Delete, PredBB, DestBB});
}