aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Lebedev <lebedev.ri@gmail.com>2021-04-11 23:44:24 +0300
committerRoman Lebedev <lebedev.ri@gmail.com>2021-04-11 23:56:23 +0300
commit8fc8c745cffb1a7ae3a8ed5d0a4962b193d7cd78 (patch)
tree4b2e00e0a0f34773e9a369b72cfbd25c4ca09847
parent[NFCI][SimplifyCFG] mergeEmptyReturnBlocks(): improve Dominator Tree updating (diff)
downloadllvm-project-8fc8c745cffb1a7ae3a8ed5d0a4962b193d7cd78.tar.gz
llvm-project-8fc8c745cffb1a7ae3a8ed5d0a4962b193d7cd78.tar.bz2
llvm-project-8fc8c745cffb1a7ae3a8ed5d0a4962b193d7cd78.zip
[NFCI][SimplifyCFG] PerformValueComparisonIntoPredecessorFolding(): improve Dominator Tree updating
Same as with previous patches.
-rw-r--r--llvm/lib/Transforms/Utils/SimplifyCFG.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
index 11ca7d09e0cb..7f4736c4b550 100644
--- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -1115,7 +1115,7 @@ bool SimplifyCFGOpt::PerformValueComparisonIntoPredecessorFolding(
BasicBlock *BB = TI->getParent();
BasicBlock *Pred = PTI->getParent();
- std::vector<DominatorTree::UpdateType> Updates;
+ SmallVector<DominatorTree::UpdateType, 32> Updates;
// Figure out which 'cases' to copy from SI to PSI.
std::vector<ValueEqualityComparisonCase> BBCases;
@@ -1256,13 +1256,18 @@ bool SimplifyCFGOpt::PerformValueComparisonIntoPredecessorFolding(
// Okay, at this point, we know which new successor Pred will get. Make
// sure we update the number of entries in the PHI nodes for these
// successors.
+ SmallPtrSet<BasicBlock *, 2> SuccsOfPred;
+ if (DTU) {
+ SuccsOfPred = {succ_begin(Pred), succ_end(Pred)};
+ Updates.reserve(Updates.size() + NewSuccessors.size());
+ }
for (const std::pair<BasicBlock *, int /*Num*/> &NewSuccessor :
NewSuccessors) {
for (auto I : seq(0, NewSuccessor.second)) {
(void)I;
AddPredecessorToBlock(NewSuccessor.first, Pred, BB);
}
- if (DTU && !is_contained(successors(Pred), NewSuccessor.first))
+ if (DTU && !SuccsOfPred.contains(NewSuccessor.first))
Updates.push_back({DominatorTree::Insert, Pred, NewSuccessor.first});
}