[llvm] 6b9e089 - [SCEV] Reuse getWithOperands in computeAndSetCanonical (NFC) (#218497)

via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 25 04:38:10 PDT 2026


Author: Florian Hahn
Date: 2026-08-25T12:38:05+01:00
New Revision: 6b9e089c69ae037dede1ed34936ad04d3303c15d

URL: https://github.com/llvm/llvm-project/commit/6b9e089c69ae037dede1ed34936ad04d3303c15d
DIFF: https://github.com/llvm/llvm-project/commit/6b9e089c69ae037dede1ed34936ad04d3303c15d.diff

LOG: [SCEV] Reuse getWithOperands in computeAndSetCanonical (NFC) (#218497)

Replace duplicated logic to create canonical SCEVs using
getWithOperands.

PR: https://github.com/llvm/llvm-project/pull/218497

Added: 
    

Modified: 
    llvm/include/llvm/Analysis/ScalarEvolution.h
    llvm/lib/Analysis/ScalarEvolution.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/Analysis/ScalarEvolution.h b/llvm/include/llvm/Analysis/ScalarEvolution.h
index d17c21ea3401e..4f59bc99cb697 100644
--- a/llvm/include/llvm/Analysis/ScalarEvolution.h
+++ b/llvm/include/llvm/Analysis/ScalarEvolution.h
@@ -1672,6 +1672,8 @@ class ScalarEvolution {
   friend class SCEVExpander;
   friend class SCEVUnknown;
   friend class VPSCEVExpander;
+  // Needs getWithOperands to rebuild a node from its canonical operands.
+  friend void SCEV::computeAndSetCanonical(ScalarEvolution &SE);
 
   /// The function we are analyzing.
   Function &F;

diff  --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index 1f458d14782ba..f6ad701ce819e 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -279,52 +279,8 @@ void SCEV::computeAndSetCanonical(ScalarEvolution &SE) {
     return;
   }
 
-  auto *NAry = dyn_cast<SCEVNAryExpr>(this);
-  SCEV::NoWrapFlags Flags = NAry ? NAry->getNoWrapFlags() : SCEV::FlagAnyWrap;
-  switch (getSCEVType()) {
-  case scPtrToAddr:
-    CanonicalSCEV = SE.getPtrToAddrExpr(CanonOps[0]);
-    return;
-  case scTruncate:
-    CanonicalSCEV = SE.getTruncateExpr(CanonOps[0], getType());
-    return;
-  case scZeroExtend:
-    CanonicalSCEV = SE.getZeroExtendExpr(CanonOps[0], getType());
-    return;
-  case scSignExtend:
-    CanonicalSCEV = SE.getSignExtendExpr(CanonOps[0], getType());
-    return;
-  case scUDivExpr:
-    CanonicalSCEV = SE.getUDivExpr(CanonOps[0], CanonOps[1]);
-    return;
-  case scAddExpr:
-    CanonicalSCEV = SE.getAddExpr(CanonOps, Flags);
-    return;
-  case scMulExpr:
-    CanonicalSCEV = SE.getMulExpr(CanonOps, Flags);
-    return;
-  case scAddRecExpr:
-    CanonicalSCEV = SE.getAddRecExpr(
-        CanonOps, cast<SCEVAddRecExpr>(this)->getLoop(), Flags);
-    return;
-  case scSMaxExpr:
-    CanonicalSCEV = SE.getSMaxExpr(CanonOps);
-    return;
-  case scUMaxExpr:
-    CanonicalSCEV = SE.getUMaxExpr(CanonOps);
-    return;
-  case scSMinExpr:
-    CanonicalSCEV = SE.getSMinExpr(CanonOps);
-    return;
-  case scUMinExpr:
-    CanonicalSCEV = SE.getUMinExpr(CanonOps);
-    return;
-  case scSequentialUMinExpr:
-    CanonicalSCEV = SE.getUMinExpr(CanonOps, /*Sequential=*/true);
-    return;
-  default:
-    llvm_unreachable("Unknown SCEV type");
-  }
+  // Rebuild the expression from the canonical operands, stripping use flags.
+  CanonicalSCEV = SE.getWithOperands(this, CanonOps);
 }
 
 //===----------------------------------------------------------------------===//


        


More information about the llvm-commits mailing list