[llvm] 2def9c3 - [NFCI][Local] TryToSimplifyUncondBranchFromEmptyBlock(): improve Dominator Tree updating
Roman Lebedev via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 11 13:56:46 PDT 2021
Author: Roman Lebedev
Date: 2021-04-11T23:56:22+03:00
New Revision: 2def9c3d8ed9df5a5dc737343c891ac17de1afc1
URL: https://github.com/llvm/llvm-project/commit/2def9c3d8ed9df5a5dc737343c891ac17de1afc1
DIFF: https://github.com/llvm/llvm-project/commit/2def9c3d8ed9df5a5dc737343c891ac17de1afc1.diff
LOG: [NFCI][Local] TryToSimplifyUncondBranchFromEmptyBlock(): improve Dominator Tree updating
First, we don't need vector-ness for the predecessor lists.
Secondly, like elsewhere, do insertions before deletions.
Lastly, the check that we actually need to insert an edge,
that it doesn't exist already, is backwards. Instead of
looking at successors of every single 'PredOfBB',
just always look at predecessors of the 'Succ'.
The result is always the same, but we avoid *really* inefficient code.
Added:
Modified:
llvm/lib/Transforms/Utils/Local.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp
index 6f30d17e87c63..10e185956a49c 100644
--- a/llvm/lib/Transforms/Utils/Local.cpp
+++ b/llvm/lib/Transforms/Utils/Local.cpp
@@ -1072,14 +1072,15 @@ bool llvm::TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB,
SmallVector<DominatorTree::UpdateType, 32> Updates;
if (DTU) {
// All predecessors of BB will be moved to Succ.
- SmallSetVector<BasicBlock *, 8> Predecessors(pred_begin(BB), pred_end(BB));
- Updates.reserve(Updates.size() + 2 * Predecessors.size());
- for (auto *Predecessor : Predecessors) {
+ SmallPtrSet<BasicBlock *, 8> PredsOfBB(pred_begin(BB), pred_end(BB));
+ SmallPtrSet<BasicBlock *, 8> PredsOfSucc(pred_begin(Succ), pred_end(Succ));
+ Updates.reserve(Updates.size() + 2 * PredsOfBB.size() + 1);
+ for (auto *PredOfBB : PredsOfBB)
// This predecessor of BB may already have Succ as a successor.
- if (!llvm::is_contained(successors(Predecessor), Succ))
- Updates.push_back({DominatorTree::Insert, Predecessor, Succ});
- Updates.push_back({DominatorTree::Delete, Predecessor, BB});
- }
+ if (!PredsOfSucc.contains(PredOfBB))
+ Updates.push_back({DominatorTree::Insert, PredOfBB, Succ});
+ for (auto *PredOfBB : PredsOfBB)
+ Updates.push_back({DominatorTree::Delete, PredOfBB, BB});
Updates.push_back({DominatorTree::Delete, BB, Succ});
}
More information about the llvm-commits
mailing list