[llvm] ceec2c7 - [SCEV] Add ptrtoaddr tests with external state/unstable addrspaces.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 10 02:26:46 PST 2026


Author: Florian Hahn
Date: 2026-02-10T10:25:23Z
New Revision: ceec2c72d22097a63a1495b4654a41392b8dd086

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

LOG: [SCEV] Add ptrtoaddr tests with external state/unstable addrspaces.

Add ptrtoaddr tests with address spaces with unstable and external but
stable pointer representations.

Currently we incorrectly form ptrtoaddr for unstsable pointers. See
discussion in https://github.com/llvm/llvm-project/pull/178861 for more
details.

Added: 
    

Modified: 
    llvm/test/Analysis/ScalarEvolution/ptrtoaddr.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Analysis/ScalarEvolution/ptrtoaddr.ll b/llvm/test/Analysis/ScalarEvolution/ptrtoaddr.ll
index 3637df7e2c26b..2de02b8a319e0 100644
--- a/llvm/test/Analysis/ScalarEvolution/ptrtoaddr.ll
+++ b/llvm/test/Analysis/ScalarEvolution/ptrtoaddr.ll
@@ -1,7 +1,9 @@
 ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
 ; RUN: opt -passes='print<scalar-evolution>' -disable-output %s 2>&1 | FileCheck %s
 
-target datalayout="p64:64:64:64"
+; Address space 2 has unstable pointer representation.
+; Address space 3 has external state but stable representation.
+target datalayout="p:64:64:64:64-pu2:64:64:64:64-pe3:64:64:64:64"
 
 define void @ptrtoaddr(ptr %in, ptr %out0, ptr %out1, ptr %out2, ptr %out3) {
 ; CHECK-LABEL: 'ptrtoaddr'
@@ -86,3 +88,76 @@ define void @ptrtoaddr_of_gep_with_unknown_int(ptr %in, ptr %out0, ptr %offset)
   store i64  %p0, ptr  %out0
   ret void
 }
+
+; FIXME: Currently not handled correctly.
+; ptrtoaddr of a pointer with unstable representation should return SCEVUnknown.
+define void @ptrtoaddr_unstable(ptr addrspace(2) %in, ptr %out) {
+; CHECK-LABEL: 'ptrtoaddr_unstable'
+; CHECK-NEXT:  Classifying expressions for: @ptrtoaddr_unstable
+; CHECK-NEXT:    %p = ptrtoaddr ptr addrspace(2) %in to i64
+; CHECK-NEXT:    --> (ptrtoaddr ptr addrspace(2) %in to i64) U: full-set S: full-set
+; CHECK-NEXT:  Determining loop execution counts for: @ptrtoaddr_unstable
+;
+  %p = ptrtoaddr ptr addrspace(2) %in to i64
+  store i64 %p, ptr %out
+  ret void
+}
+
+; FIXME: Currently not handled correctly.
+; ptrtoaddr of GEP on unstable pointer should return SCEVUnknown.
+define void @ptrtoaddr_unstable_gep(ptr addrspace(2) %in, ptr %out) {
+; CHECK-LABEL: 'ptrtoaddr_unstable_gep'
+; CHECK-NEXT:  Classifying expressions for: @ptrtoaddr_unstable_gep
+; CHECK-NEXT:    %gep = getelementptr inbounds i8, ptr addrspace(2) %in, i64 42
+; CHECK-NEXT:    --> (42 + %in) U: full-set S: full-set
+; CHECK-NEXT:    %p = ptrtoaddr ptr addrspace(2) %gep to i64
+; CHECK-NEXT:    --> (42 + (ptrtoaddr ptr addrspace(2) %in to i64)) U: full-set S: full-set
+; CHECK-NEXT:  Determining loop execution counts for: @ptrtoaddr_unstable_gep
+;
+  %gep = getelementptr inbounds i8, ptr addrspace(2) %in, i64 42
+  %p = ptrtoaddr ptr addrspace(2) %gep to i64
+  store i64 %p, ptr %out
+  ret void
+}
+
+; FIXME: Currently not handled correctly.
+; ptrtoaddr of nullptr in unstable address space should return SCEVUnknown.
+define void @ptrtoaddr_unstable_null(ptr %out) {
+; CHECK-LABEL: 'ptrtoaddr_unstable_null'
+; CHECK-NEXT:  Classifying expressions for: @ptrtoaddr_unstable_null
+; CHECK-NEXT:    %p = ptrtoaddr ptr addrspace(2) null to i64
+; CHECK-NEXT:    --> 0 U: [0,1) S: [0,1)
+; CHECK-NEXT:  Determining loop execution counts for: @ptrtoaddr_unstable_null
+;
+  %p = ptrtoaddr ptr addrspace(2) null to i64
+  store i64 %p, ptr %out
+  ret void
+}
+
+; Address space 3 is non-integral with external state but stable representation.
+define void @ptrtoaddr_nonintegral_stable(ptr addrspace(3) %in, ptr %out) {
+; CHECK-LABEL: 'ptrtoaddr_nonintegral_stable'
+; CHECK-NEXT:  Classifying expressions for: @ptrtoaddr_nonintegral_stable
+; CHECK-NEXT:    %p = ptrtoaddr ptr addrspace(3) %in to i64
+; CHECK-NEXT:    --> (ptrtoaddr ptr addrspace(3) %in to i64) U: full-set S: full-set
+; CHECK-NEXT:  Determining loop execution counts for: @ptrtoaddr_nonintegral_stable
+;
+  %p = ptrtoaddr ptr addrspace(3) %in to i64
+  store i64 %p, ptr %out
+  ret void
+}
+
+define void @ptrtoaddr_nonintegral_stable_gep(ptr addrspace(3) %in, ptr %out) {
+; CHECK-LABEL: 'ptrtoaddr_nonintegral_stable_gep'
+; CHECK-NEXT:  Classifying expressions for: @ptrtoaddr_nonintegral_stable_gep
+; CHECK-NEXT:    %gep = getelementptr inbounds i8, ptr addrspace(3) %in, i64 42
+; CHECK-NEXT:    --> (42 + %in) U: full-set S: full-set
+; CHECK-NEXT:    %p = ptrtoaddr ptr addrspace(3) %gep to i64
+; CHECK-NEXT:    --> (42 + (ptrtoaddr ptr addrspace(3) %in to i64)) U: full-set S: full-set
+; CHECK-NEXT:  Determining loop execution counts for: @ptrtoaddr_nonintegral_stable_gep
+;
+  %gep = getelementptr inbounds i8, ptr addrspace(3) %in, i64 42
+  %p = ptrtoaddr ptr addrspace(3) %gep to i64
+  store i64 %p, ptr %out
+  ret void
+}


        


More information about the llvm-commits mailing list