Skip to content

Commit f8623b0

Browse files
committed
[SCEV][NFC] Win some compile time from mass forgetMemoizedResults
Mass forgetMemoizedResults can be done more efficiently than bunch of individual invocations of helper because we can traverse maps being updated just once, rather than doing this for each invidivual SCEV. Should be NFC and supposedly improves compile time. Differential Revision: https://reviews.llvm.org/D112294 Reviewed By: reames
1 parent dbab339 commit f8623b0

File tree

1 file changed

+18
-17
lines changed

1 file changed

+18
-17
lines changed

llvm/lib/Analysis/ScalarEvolution.cpp

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12757,42 +12757,43 @@ bool ScalarEvolution::hasOperand(const SCEV *S, const SCEV *Op) const {
1275712757
void ScalarEvolution::forgetMemoizedResults(ArrayRef<const SCEV *> SCEVs) {
1275812758
for (auto *S : SCEVs)
1275912759
forgetMemoizedResultsImpl(S);
12760-
}
12761-
12762-
void ScalarEvolution::forgetMemoizedResultsImpl(const SCEV *S) {
12763-
ValuesAtScopes.erase(S);
12764-
LoopDispositions.erase(S);
12765-
BlockDispositions.erase(S);
12766-
UnsignedRanges.erase(S);
12767-
SignedRanges.erase(S);
12768-
ExprValueMap.erase(S);
12769-
HasRecMap.erase(S);
12770-
MinTrailingZerosCache.erase(S);
12771-
12760+
SmallPtrSet<const SCEV *, 8> ToForget(SCEVs.begin(), SCEVs.end());
1277212761
for (auto I = PredicatedSCEVRewrites.begin();
1277312762
I != PredicatedSCEVRewrites.end();) {
1277412763
std::pair<const SCEV *, const Loop *> Entry = I->first;
12775-
if (Entry.first == S)
12764+
if (ToForget.count(Entry.first))
1277612765
PredicatedSCEVRewrites.erase(I++);
1277712766
else
1277812767
++I;
1277912768
}
1278012769

12781-
auto RemoveSCEVFromBackedgeMap =
12782-
[S](DenseMap<const Loop *, BackedgeTakenInfo> &Map) {
12770+
auto RemoveSCEVFromBackedgeMap = [this, &ToForget](
12771+
DenseMap<const Loop *, BackedgeTakenInfo> &Map) {
1278312772
for (auto I = Map.begin(), E = Map.end(); I != E;) {
1278412773
BackedgeTakenInfo &BEInfo = I->second;
12785-
if (BEInfo.hasOperand(S))
12774+
if (any_of(ToForget,
12775+
[&BEInfo](const SCEV *S) { return BEInfo.hasOperand(S); }))
1278612776
Map.erase(I++);
1278712777
else
1278812778
++I;
1278912779
}
12790-
};
12780+
};
1279112781

1279212782
RemoveSCEVFromBackedgeMap(BackedgeTakenCounts);
1279312783
RemoveSCEVFromBackedgeMap(PredicatedBackedgeTakenCounts);
1279412784
}
1279512785

12786+
void ScalarEvolution::forgetMemoizedResultsImpl(const SCEV *S) {
12787+
ValuesAtScopes.erase(S);
12788+
LoopDispositions.erase(S);
12789+
BlockDispositions.erase(S);
12790+
UnsignedRanges.erase(S);
12791+
SignedRanges.erase(S);
12792+
ExprValueMap.erase(S);
12793+
HasRecMap.erase(S);
12794+
MinTrailingZerosCache.erase(S);
12795+
}
12796+
1279612797
void
1279712798
ScalarEvolution::getUsedLoops(const SCEV *S,
1279812799
SmallPtrSetImpl<const Loop *> &LoopsUsed) {

0 commit comments

Comments
 (0)