diff options
author | Roman Lebedev <lebedev.ri@gmail.com> | 2021-04-11 23:44:24 +0300 |
---|---|---|
committer | Roman Lebedev <lebedev.ri@gmail.com> | 2021-04-11 23:56:23 +0300 |
commit | 8fc8c745cffb1a7ae3a8ed5d0a4962b193d7cd78 (patch) | |
tree | 4b2e00e0a0f34773e9a369b72cfbd25c4ca09847 | |
parent | [NFCI][SimplifyCFG] mergeEmptyReturnBlocks(): improve Dominator Tree updating (diff) | |
download | llvm-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.cpp | 9 |
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}); } |