[llvm-branch-commits] [llvm] d66309d - [SCEV] Add missing scPtrToAddr to getCastExpr. (#211899)

Tobias Hieta via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Oct 13 00:54:24 PDT 2026


Author: Florian Hahn
Date: 2026-10-13T09:54:05+02:00
New Revision: d66309da4d8d2a7590e3f0071aba868b7300d8d0

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

LOG: [SCEV] Add missing scPtrToAddr to getCastExpr. (#211899)

https://github.com/llvm/llvm-project/pull/180244 (8e76c3f0d29) missed
adding scPtrToAddr to getCastExpr, causing `Not a SCEV cast expression!`
on some of the AMDGPU bots, including
 https://lab.llvm.org/buildbot/#/builders/10/builds/32555.

Add missing case to handle PtrToAddr.

(cherry picked from commit 2ac96dbb3a08baf4d72584e04e6ad299c176fcce)

Added: 
    llvm/test/Analysis/ScalarEvolution/ptrtoaddr-at-scope.ll

Modified: 
    llvm/lib/Analysis/ScalarEvolution.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index ab8e73f514cd2..3b805d3ec5b8a 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -2286,6 +2286,11 @@ const SCEV *ScalarEvolution::getCastExpr(SCEVTypes Kind, const SCEV *Op,
     return getZeroExtendExpr(Op, Ty);
   case scSignExtend:
     return getSignExtendExpr(Op, Ty);
+  case scPtrToAddr: {
+    const SCEV *Expr = getPtrToAddrExpr(Op);
+    assert(Expr->getType() == Ty && "requested type must match");
+    return Expr;
+  }
   case scPtrToInt:
     return getPtrToIntExpr(Op, Ty);
   default:

diff  --git a/llvm/test/Analysis/ScalarEvolution/ptrtoaddr-at-scope.ll b/llvm/test/Analysis/ScalarEvolution/ptrtoaddr-at-scope.ll
new file mode 100644
index 0000000000000..307e413726c91
--- /dev/null
+++ b/llvm/test/Analysis/ScalarEvolution/ptrtoaddr-at-scope.ll
@@ -0,0 +1,50 @@
+; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -disable-output -passes='print<scalar-evolution>' < %s 2>&1 | FileCheck %s
+
+define void @ptrtoaddr_at_scope(ptr %a0, ptr %inv, i64 %n) {
+; CHECK-LABEL: 'ptrtoaddr_at_scope'
+; CHECK-NEXT:  Classifying expressions for: @ptrtoaddr_at_scope
+; CHECK-NEXT:    %j = phi i64 [ 0, %entry ], [ %j.next, %outer.latch ]
+; CHECK-NEXT:    --> {0,+,1}<%outer.header> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %outer.header: Computable, %inner.header: Invariant }
+; CHECK-NEXT:    %i = phi i64 [ 0, %outer.header ], [ %i.next, %inner.header ]
+; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%inner.header> U: [0,4) S: [0,4) Exits: 3 LoopDispositions: { %inner.header: Computable, %outer.header: Uniform }
+; CHECK-NEXT:    %p = phi ptr [ %a0, %outer.header ], [ %inv, %inner.header ]
+; CHECK-NEXT:    --> %p U: full-set S: full-set Exits: %inv LoopDispositions: { %inner.header: Variant, %outer.header: Variant }
+; CHECK-NEXT:    %i.next = add i64 %i, 1
+; CHECK-NEXT:    --> {1,+,1}<nuw><nsw><%inner.header> U: [1,5) S: [1,5) Exits: 4 LoopDispositions: { %inner.header: Computable, %outer.header: Uniform }
+; CHECK-NEXT:    %pa = ptrtoaddr ptr %p to i64
+; CHECK-NEXT:    --> (ptrtoaddr ptr %p to i64) U: full-set S: full-set --> (ptrtoaddr ptr %inv to i64) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %outer.header: Variant, %inner.header: Variant }
+; CHECK-NEXT:    %j.next = add i64 %j, 1
+; CHECK-NEXT:    --> {1,+,1}<%outer.header> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %outer.header: Computable, %inner.header: Invariant }
+; CHECK-NEXT:  Determining loop execution counts for: @ptrtoaddr_at_scope
+; CHECK-NEXT:  Loop %inner.header: backedge-taken count is i64 3
+; CHECK-NEXT:  Loop %inner.header: constant max backedge-taken count is i64 3
+; CHECK-NEXT:  Loop %inner.header: symbolic max backedge-taken count is i64 3
+; CHECK-NEXT:  Loop %inner.header: Trip multiple is 4
+; CHECK-NEXT:  Loop %outer.header: Unpredictable backedge-taken count.
+; CHECK-NEXT:  Loop %outer.header: Unpredictable constant max backedge-taken count.
+; CHECK-NEXT:  Loop %outer.header: Unpredictable symbolic max backedge-taken count.
+;
+entry:
+  br label %outer.header
+
+outer.header:
+  %j = phi i64 [ 0, %entry ], [ %j.next, %outer.latch ]
+  br label %inner.header
+
+inner.header:
+  %i = phi i64 [ 0, %outer.header ], [ %i.next, %inner.header ]
+  %p = phi ptr [ %a0, %outer.header ], [ %inv, %inner.header ]
+  %i.next = add i64 %i, 1
+  %inner.cond = icmp ult i64 %i.next, 4
+  br i1 %inner.cond, label %inner.header, label %outer.latch
+
+outer.latch:
+  %pa = ptrtoaddr ptr %p to i64
+  %j.next = add i64 %j, 1
+  %ec = icmp eq i64 %pa, %n
+  br i1 %ec, label %exit, label %outer.header
+
+exit:
+  ret void
+}


        


More information about the llvm-branch-commits mailing list