[llvm] 689e95c - [GVN] Add tests for pointer replacement with different addr size (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 30 02:35:08 PDT 2025


Author: Nikita Popov
Date: 2025-10-30T10:34:59+01:00
New Revision: 689e95c2f1f45310a471765cc7a3ede99622e30f

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

LOG: [GVN] Add tests for pointer replacement with different addr size (NFC)

Added: 
    

Modified: 
    llvm/test/Transforms/GVN/assume-equal.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/GVN/assume-equal.ll b/llvm/test/Transforms/GVN/assume-equal.ll
index bbbc5c58584a6..a38980169fc52 100644
--- a/llvm/test/Transforms/GVN/assume-equal.ll
+++ b/llvm/test/Transforms/GVN/assume-equal.ll
@@ -1,6 +1,8 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
 ; RUN: opt < %s -passes=gvn -S | FileCheck %s
 
+target datalayout = "p1:64:64:64:32"
+
 %struct.A = type { ptr }
 @_ZTV1A = available_externally unnamed_addr constant [4 x ptr] [ptr null, ptr @_ZTI1A, ptr @_ZN1A3fooEv, ptr @_ZN1A3barEv], align 8
 @_ZTI1A = external constant ptr
@@ -372,6 +374,20 @@ define i1 @assume_ptr_eq_
diff erent_prov_does_not_matter_icmp(ptr %p, ptr %p2) {
   ret i1 %c
 }
 
+define i1 @assume_ptr_eq_
diff erent_prov_does_not_matter_icmp_addrsize(ptr addrspace(1) %p, ptr addrspace(1) %p2) {
+; CHECK-LABEL: define i1 @assume_ptr_eq_
diff erent_prov_does_not_matter_icmp_addrsize(
+; CHECK-SAME: ptr addrspace(1) [[P:%.*]], ptr addrspace(1) [[P2:%.*]]) {
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(1) [[P]], [[P2]]
+; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr addrspace(1) [[P]], null
+; CHECK-NEXT:    ret i1 [[C]]
+;
+  %cmp = icmp eq ptr addrspace(1) %p, %p2
+  call void @llvm.assume(i1 %cmp)
+  %c = icmp eq ptr addrspace(1) %p2, null
+  ret i1 %c
+}
+
 ; This is not correct, as it may change the provenance exposed by ptrtoint.
 ; We still allow it for now.
 define i64 @assume_ptr_eq_
diff erent_prov_does_not_matter_ptrtoint(ptr %p, ptr %p2) {
@@ -388,6 +404,20 @@ define i64 @assume_ptr_eq_
diff erent_prov_does_not_matter_ptrtoint(ptr %p, ptr %p
   ret i64 %int
 }
 
+define i64 @assume_ptr_eq_
diff erent_prov_does_not_matter_ptrtoint_addrsize(ptr addrspace(1) %p, ptr addrspace(1) %p2) {
+; CHECK-LABEL: define i64 @assume_ptr_eq_
diff erent_prov_does_not_matter_ptrtoint_addrsize(
+; CHECK-SAME: ptr addrspace(1) [[P:%.*]], ptr addrspace(1) [[P2:%.*]]) {
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(1) [[P]], [[P2]]
+; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT:    [[INT:%.*]] = ptrtoint ptr addrspace(1) [[P]] to i64
+; CHECK-NEXT:    ret i64 [[INT]]
+;
+  %cmp = icmp eq ptr addrspace(1) %p, %p2
+  call void @llvm.assume(i1 %cmp)
+  %int = ptrtoint ptr addrspace(1) %p2 to i64
+  ret i64 %int
+}
+
 define i64 @assume_ptr_eq_
diff erent_prov_does_not_matter_ptrtoaddr(ptr %p, ptr %p2) {
 ; CHECK-LABEL: define i64 @assume_ptr_eq_
diff erent_prov_does_not_matter_ptrtoaddr(
 ; CHECK-SAME: ptr [[P:%.*]], ptr [[P2:%.*]]) {
@@ -402,6 +432,20 @@ define i64 @assume_ptr_eq_
diff erent_prov_does_not_matter_ptrtoaddr(ptr %p, ptr %
   ret i64 %int
 }
 
+define i32 @assume_ptr_eq_
diff erent_prov_does_not_matter_ptrtoaddr_addrsize(ptr addrspace(1) %p, ptr addrspace(1) %p2) {
+; CHECK-LABEL: define i32 @assume_ptr_eq_
diff erent_prov_does_not_matter_ptrtoaddr_addrsize(
+; CHECK-SAME: ptr addrspace(1) [[P:%.*]], ptr addrspace(1) [[P2:%.*]]) {
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(1) [[P]], [[P2]]
+; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT:    [[INT:%.*]] = ptrtoaddr ptr addrspace(1) [[P]] to i32
+; CHECK-NEXT:    ret i32 [[INT]]
+;
+  %cmp = icmp eq ptr addrspace(1) %p, %p2
+  call void @llvm.assume(i1 %cmp)
+  %int = ptrtoaddr ptr addrspace(1) %p2 to i32
+  ret i32 %int
+}
+
 define i8 @assume_ptr_eq_same_prov(ptr %p, i64 %x) {
 ; CHECK-LABEL: define i8 @assume_ptr_eq_same_prov(
 ; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) {


        


More information about the llvm-commits mailing list