[llvm] [ScalarEvolution] Limit recursion in getRangeRef for PHI nodes. (PR #152823)
    Nikita Popov via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Wed Sep 10 07:39:30 PDT 2025
    
    
  
================
@@ -6963,8 +6992,13 @@ const ConstantRange &ScalarEvolution::getRangeRef(
 
     // A range of Phi is a subset of union of all ranges of its input.
     if (PHINode *Phi = dyn_cast<PHINode>(V)) {
+      // SCEVExpander sometimes creates SCEVUnknowns that are secretly
+      // AddRecs; return the range for the corresponding AddRec.
+      if (auto *AR = dyn_cast<SCEVAddRecExpr>(getSCEV(V)))
+        return getRangeRef(AR, SignHint, Depth + 1);
+
       // Make sure that we do not run over cycled Phis.
-      if (PendingPhiRanges.insert(Phi).second) {
+      if (RangeRefPHIAllowedOperands(DT, Phi)) {
----------------
nikic wrote:
We could fall back to ValueTracking here to get at least some information. Not sure if that would be practically useful or not.
https://github.com/llvm/llvm-project/pull/152823
    
    
More information about the llvm-commits
mailing list