[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