[llvm] [SCEV] Improve code using DenseMap::lookup (NFC) (PR #147507)

Ramkumar Ramachandra via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 8 04:37:00 PDT 2025


https://github.com/artagnon created https://github.com/llvm/llvm-project/pull/147507

None

>From 308cfb80f2858f003a64ab24ee2fe90977f36ce3 Mon Sep 17 00:00:00 2001
From: Ramkumar Ramachandra <ramkumar.ramachandra at codasip.com>
Date: Tue, 8 Jul 2025 12:34:23 +0100
Subject: [PATCH] [SCEV] Improve code using DenseMap::lookup (NFC)

---
 llvm/lib/Analysis/ScalarEvolution.cpp | 81 ++++++++++++---------------
 1 file changed, 36 insertions(+), 45 deletions(-)

diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index dd309bc2c54a8..db0d4824fe421 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -1559,9 +1559,8 @@ ScalarEvolution::getZeroExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth) {
   Ty = getEffectiveSCEVType(Ty);
 
   FoldID ID(scZeroExtend, Op, Ty);
-  auto Iter = FoldCache.find(ID);
-  if (Iter != FoldCache.end())
-    return Iter->second;
+  if (const SCEV *S = FoldCache.lookup(ID))
+    return S;
 
   const SCEV *S = getZeroExtendExprImpl(Op, Ty, Depth);
   if (!isa<SCEVZeroExtendExpr>(S))
@@ -1894,9 +1893,8 @@ ScalarEvolution::getSignExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth) {
   Ty = getEffectiveSCEVType(Ty);
 
   FoldID ID(scSignExtend, Op, Ty);
-  auto Iter = FoldCache.find(ID);
-  if (Iter != FoldCache.end())
-    return Iter->second;
+  if (const SCEV *S = FoldCache.lookup(ID))
+    return S;
 
   const SCEV *S = getSignExtendExprImpl(Op, Ty, Depth);
   if (!isa<SCEVSignExtendExpr>(S))
@@ -8494,9 +8492,8 @@ void ScalarEvolution::forgetLoop(const Loop *L) {
         ++I;
     }
 
-    auto LoopUsersItr = LoopUsers.find(CurrL);
-    if (LoopUsersItr != LoopUsers.end())
-      llvm::append_range(ToForget, LoopUsersItr->second);
+    auto Users = LoopUsers.lookup(CurrL);
+    llvm::append_range(ToForget, Users);
 
     // Drop information about expressions based on loop-header PHIs.
     PushLoopPHIs(CurrL, Worklist, Visited);
@@ -8597,11 +8594,10 @@ void ScalarEvolution::forgetBlockAndLoopDispositions(Value *V) {
     bool BlockDispoRemoved = BlockDispositions.erase(Curr);
     if (!LoopDispoRemoved && !BlockDispoRemoved)
       continue;
-    auto Users = SCEVUsers.find(Curr);
-    if (Users != SCEVUsers.end())
-      for (const auto *User : Users->second)
-        if (Seen.insert(User).second)
-          Worklist.push_back(User);
+    auto Users = SCEVUsers.lookup(Curr);
+    for (const SCEV *User : Users)
+      if (Seen.insert(User).second)
+        Worklist.push_back(User);
   }
 }
 
@@ -14496,8 +14492,8 @@ void ScalarEvolution::verify() const {
 #endif
 
     // Check that the value is also part of the reverse map.
-    auto It = ExprValueMap.find(KV.second);
-    if (It == ExprValueMap.end() || !It->second.contains(KV.first)) {
+    auto V = ExprValueMap.lookup(KV.second);
+    if (!V.contains(KV.first)) {
       dbgs() << "Value " << *KV.first
              << " is in ValueExprMap but not in ExprValueMap\n";
       std::abort();
@@ -14521,15 +14517,15 @@ void ScalarEvolution::verify() const {
 
   for (const auto &KV : ExprValueMap) {
     for (Value *V : KV.second) {
-      auto It = ValueExprMap.find_as(V);
-      if (It == ValueExprMap.end()) {
+      const SCEV *S = ValueExprMap.lookup(V);
+      if (!S) {
         dbgs() << "Value " << *V
                << " is in ExprValueMap but not in ValueExprMap\n";
         std::abort();
       }
-      if (It->second != KV.first) {
-        dbgs() << "Value " << *V << " mapped to " << *It->second
-               << " rather than " << *KV.first << "\n";
+      if (S != KV.first) {
+        dbgs() << "Value " << *V << " mapped to " << *S << " rather than "
+               << *KV.first << "\n";
         std::abort();
       }
     }
@@ -14541,8 +14537,8 @@ void ScalarEvolution::verify() const {
       // We do not store dependencies of constants.
       if (isa<SCEVConstant>(Op))
         continue;
-      auto It = SCEVUsers.find(Op);
-      if (It != SCEVUsers.end() && It->second.count(&S))
+      auto Users = SCEVUsers.lookup(Op);
+      if (Users.contains(&S))
         continue;
       dbgs() << "Use of operand  " << *Op << " by user " << S
              << " is not being tracked!\n";
@@ -14557,9 +14553,8 @@ void ScalarEvolution::verify() const {
       const Loop *L = LoopAndValueAtScope.first;
       const SCEV *ValueAtScope = LoopAndValueAtScope.second;
       if (!isa<SCEVConstant>(ValueAtScope)) {
-        auto It = ValuesAtScopesUsers.find(ValueAtScope);
-        if (It != ValuesAtScopesUsers.end() &&
-            is_contained(It->second, std::make_pair(L, Value)))
+        auto V = ValuesAtScopesUsers.lookup(ValueAtScope);
+        if (is_contained(V, std::make_pair(L, Value)))
           continue;
         dbgs() << "Value: " << *Value << ", Loop: " << *L << ", ValueAtScope: "
                << *ValueAtScope << " missing in ValuesAtScopesUsers\n";
@@ -14574,9 +14569,8 @@ void ScalarEvolution::verify() const {
       const Loop *L = LoopAndValue.first;
       const SCEV *Value = LoopAndValue.second;
       assert(!isa<SCEVConstant>(Value));
-      auto It = ValuesAtScopes.find(Value);
-      if (It != ValuesAtScopes.end() &&
-          is_contained(It->second, std::make_pair(L, ValueAtScope)))
+      auto V = ValuesAtScopes.lookup(Value);
+      if (is_contained(V, std::make_pair(L, ValueAtScope)))
         continue;
       dbgs() << "Value: " << *Value << ", Loop: " << *L << ", ValueAtScope: "
              << *ValueAtScope << " missing in ValuesAtScopes\n";
@@ -14592,9 +14586,8 @@ void ScalarEvolution::verify() const {
       for (const ExitNotTakenInfo &ENT : LoopAndBEInfo.second.ExitNotTaken) {
         for (const SCEV *S : {ENT.ExactNotTaken, ENT.SymbolicMaxNotTaken}) {
           if (!isa<SCEVConstant>(S)) {
-            auto UserIt = BECountUsers.find(S);
-            if (UserIt != BECountUsers.end() &&
-                UserIt->second.contains({ LoopAndBEInfo.first, Predicated }))
+            auto Users = BECountUsers.lookup(S);
+            if (Users.contains({LoopAndBEInfo.first, Predicated}))
               continue;
             dbgs() << "Value " << *S << " for loop " << *LoopAndBEInfo.first
                    << " missing from BECountUsers\n";
@@ -14635,28 +14628,28 @@ void ScalarEvolution::verify() const {
 
   // Verify FoldCache/FoldCacheUser caches.
   for (auto [FoldID, Expr] : FoldCache) {
-    auto I = FoldCacheUser.find(Expr);
-    if (I == FoldCacheUser.end()) {
+    auto F = FoldCacheUser.lookup(Expr);
+    if (F.empty()) {
       dbgs() << "Missing entry in FoldCacheUser for cached expression " << *Expr
              << "!\n";
       std::abort();
     }
-    if (!is_contained(I->second, FoldID)) {
+    if (!is_contained(F, FoldID)) {
       dbgs() << "Missing FoldID in cached users of " << *Expr << "!\n";
       std::abort();
     }
   }
   for (auto [Expr, IDs] : FoldCacheUser) {
     for (auto &FoldID : IDs) {
-      auto I = FoldCache.find(FoldID);
-      if (I == FoldCache.end()) {
+      const SCEV *S = FoldCache.lookup(FoldID);
+      if (!S) {
         dbgs() << "Missing entry in FoldCache for expression " << *Expr
                << "!\n";
         std::abort();
       }
-      if (I->second != Expr) {
-        dbgs() << "Entry in FoldCache doesn't match FoldCacheUser: "
-               << *I->second << " != " << *Expr << "!\n";
+      if (S != Expr) {
+        dbgs() << "Entry in FoldCache doesn't match FoldCacheUser: " << *S
+               << " != " << *Expr << "!\n";
         std::abort();
       }
     }
@@ -15624,8 +15617,7 @@ void ScalarEvolution::LoopGuards::collectFromBlock(
     // existing rewrite because we want to chain further rewrites onto the
     // already rewritten value. Otherwise returns \p S.
     auto GetMaybeRewritten = [&](const SCEV *S) {
-      auto I = RewriteMap.find(S);
-      return I != RewriteMap.end() ? I->second : S;
+      return RewriteMap.lookup_or(S, S);
     };
 
     // Check for the SCEV expression (A /u B) * B while B is a constant, inside
@@ -15928,9 +15920,8 @@ const SCEV *ScalarEvolution::LoopGuards::rewrite(const SCEV *Expr) const {
              Bitwidth > Op->getType()->getScalarSizeInBits()) {
         Type *NarrowTy = IntegerType::get(SE.getContext(), Bitwidth);
         auto *NarrowExt = SE.getZeroExtendExpr(Op, NarrowTy);
-        auto I = Map.find(NarrowExt);
-        if (I != Map.end())
-          return SE.getZeroExtendExpr(I->second, Ty);
+        if (const SCEV *S = Map.lookup(NarrowExt))
+          return SE.getZeroExtendExpr(S, Ty);
         Bitwidth = Bitwidth / 2;
       }
 



More information about the llvm-commits mailing list