[llvm] 482bb48 - [SCEV] Handle PtrToAddrExpr in SCEVLoopGuardRewriter. (#226228)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 24 14:07:03 PDT 2026
Author: Florian Hahn
Date: 2026-09-24T22:06:56+01:00
New Revision: 482bb48e9dd8c2b69bec4923d94252f88a7bff5e
URL: https://github.com/llvm/llvm-project/commit/482bb48e9dd8c2b69bec4923d94252f88a7bff5e
DIFF: https://github.com/llvm/llvm-project/commit/482bb48e9dd8c2b69bec4923d94252f88a7bff5e.diff
LOG: [SCEV] Handle PtrToAddrExpr in SCEVLoopGuardRewriter. (#226228)
Adding support for PtrToAddr to loop guard rewriting was missed during
the initial bring-up.
Fixes https://github.com/llvm/llvm-project/issues/225918.
PR: https://github.com/llvm/llvm-project/pull/226228
Added:
Modified:
llvm/lib/Analysis/ScalarEvolution.cpp
llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info.ll
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index b822b7a5d3927..a0deb509acf78 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -16321,6 +16321,13 @@ const SCEV *ScalarEvolution::LoopGuards::rewrite(const SCEV *Expr) const {
return Map.lookup_or(Expr, Expr);
}
+ const SCEV *visitPtrToAddrExpr(const SCEVPtrToAddrExpr *Expr) {
+ if (const SCEV *S = Map.lookup(Expr))
+ return S;
+ return SCEVRewriteVisitor<SCEVLoopGuardRewriter>::visitPtrToAddrExpr(
+ Expr);
+ }
+
const SCEV *visitZeroExtendExpr(const SCEVZeroExtendExpr *Expr) {
if (const SCEV *S = Map.lookup(Expr))
return S;
diff --git a/llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info.ll b/llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info.ll
index 177e629a477eb..fbc4c8aa5645d 100644
--- a/llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info.ll
+++ b/llvm/test/Analysis/ScalarEvolution/max-backedge-taken-count-guard-info.ll
@@ -2042,3 +2042,33 @@ loop:
exit:
ret void
}
+
+define void @guard_on_ptrtoaddr(ptr %p) {
+; CHECK-LABEL: 'guard_on_ptrtoaddr'
+; CHECK-NEXT: Classifying expressions for: @guard_on_ptrtoaddr
+; CHECK-NEXT: %n = ptrtoaddr ptr %p to i64
+; CHECK-NEXT: --> (ptrtoaddr ptr %p to i64) U: full-set S: full-set
+; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
+; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%loop> U: [0,1001) S: [0,1001) Exits: (ptrtoaddr ptr %p to i64) LoopDispositions: { %loop: Computable }
+; CHECK-NEXT: %iv.next = add i64 %iv, 1
+; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,1002) S: [1,1002) Exits: (1 + (ptrtoaddr ptr %p to i64))<u nuw> LoopDispositions: { %loop: Computable }
+; CHECK-NEXT: Determining loop execution counts for: @guard_on_ptrtoaddr
+; CHECK-NEXT: Loop %loop: backedge-taken count is (ptrtoaddr ptr %p to i64)
+; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 1000
+; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (ptrtoaddr ptr %p to i64)
+; CHECK-NEXT: Loop %loop: Trip multiple is 1
+;
+entry:
+ %n = ptrtoaddr ptr %p to i64
+ %c = icmp ugt i64 %n, 1000
+ br i1 %c, label %exit, label %loop
+
+loop:
+ %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
+ %iv.next = add i64 %iv, 1
+ %ec = icmp eq i64 %iv, %n
+ br i1 %ec, label %exit, label %loop
+
+exit:
+ ret void
+}
More information about the llvm-commits
mailing list