Skip to content

Commit 689e95c

Browse files
committed
[GVN] Add tests for pointer replacement with different addr size (NFC)
1 parent bb1158f commit 689e95c

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
22
; RUN: opt < %s -passes=gvn -S | FileCheck %s
33

4+
target datalayout = "p1:64:64:64:32"
5+
46
%struct.A = type { ptr }
57
@_ZTV1A = available_externally unnamed_addr constant [4 x ptr] [ptr null, ptr @_ZTI1A, ptr @_ZN1A3fooEv, ptr @_ZN1A3barEv], align 8
68
@_ZTI1A = external constant ptr
@@ -372,6 +374,20 @@ define i1 @assume_ptr_eq_different_prov_does_not_matter_icmp(ptr %p, ptr %p2) {
372374
ret i1 %c
373375
}
374376

377+
define i1 @assume_ptr_eq_different_prov_does_not_matter_icmp_addrsize(ptr addrspace(1) %p, ptr addrspace(1) %p2) {
378+
; CHECK-LABEL: define i1 @assume_ptr_eq_different_prov_does_not_matter_icmp_addrsize(
379+
; CHECK-SAME: ptr addrspace(1) [[P:%.*]], ptr addrspace(1) [[P2:%.*]]) {
380+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr addrspace(1) [[P]], [[P2]]
381+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
382+
; CHECK-NEXT: [[C:%.*]] = icmp eq ptr addrspace(1) [[P]], null
383+
; CHECK-NEXT: ret i1 [[C]]
384+
;
385+
%cmp = icmp eq ptr addrspace(1) %p, %p2
386+
call void @llvm.assume(i1 %cmp)
387+
%c = icmp eq ptr addrspace(1) %p2, null
388+
ret i1 %c
389+
}
390+
375391
; This is not correct, as it may change the provenance exposed by ptrtoint.
376392
; We still allow it for now.
377393
define i64 @assume_ptr_eq_different_prov_does_not_matter_ptrtoint(ptr %p, ptr %p2) {
@@ -388,6 +404,20 @@ define i64 @assume_ptr_eq_different_prov_does_not_matter_ptrtoint(ptr %p, ptr %p
388404
ret i64 %int
389405
}
390406

407+
define i64 @assume_ptr_eq_different_prov_does_not_matter_ptrtoint_addrsize(ptr addrspace(1) %p, ptr addrspace(1) %p2) {
408+
; CHECK-LABEL: define i64 @assume_ptr_eq_different_prov_does_not_matter_ptrtoint_addrsize(
409+
; CHECK-SAME: ptr addrspace(1) [[P:%.*]], ptr addrspace(1) [[P2:%.*]]) {
410+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr addrspace(1) [[P]], [[P2]]
411+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
412+
; CHECK-NEXT: [[INT:%.*]] = ptrtoint ptr addrspace(1) [[P]] to i64
413+
; CHECK-NEXT: ret i64 [[INT]]
414+
;
415+
%cmp = icmp eq ptr addrspace(1) %p, %p2
416+
call void @llvm.assume(i1 %cmp)
417+
%int = ptrtoint ptr addrspace(1) %p2 to i64
418+
ret i64 %int
419+
}
420+
391421
define i64 @assume_ptr_eq_different_prov_does_not_matter_ptrtoaddr(ptr %p, ptr %p2) {
392422
; CHECK-LABEL: define i64 @assume_ptr_eq_different_prov_does_not_matter_ptrtoaddr(
393423
; CHECK-SAME: ptr [[P:%.*]], ptr [[P2:%.*]]) {
@@ -402,6 +432,20 @@ define i64 @assume_ptr_eq_different_prov_does_not_matter_ptrtoaddr(ptr %p, ptr %
402432
ret i64 %int
403433
}
404434

435+
define i32 @assume_ptr_eq_different_prov_does_not_matter_ptrtoaddr_addrsize(ptr addrspace(1) %p, ptr addrspace(1) %p2) {
436+
; CHECK-LABEL: define i32 @assume_ptr_eq_different_prov_does_not_matter_ptrtoaddr_addrsize(
437+
; CHECK-SAME: ptr addrspace(1) [[P:%.*]], ptr addrspace(1) [[P2:%.*]]) {
438+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr addrspace(1) [[P]], [[P2]]
439+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
440+
; CHECK-NEXT: [[INT:%.*]] = ptrtoaddr ptr addrspace(1) [[P]] to i32
441+
; CHECK-NEXT: ret i32 [[INT]]
442+
;
443+
%cmp = icmp eq ptr addrspace(1) %p, %p2
444+
call void @llvm.assume(i1 %cmp)
445+
%int = ptrtoaddr ptr addrspace(1) %p2 to i32
446+
ret i32 %int
447+
}
448+
405449
define i8 @assume_ptr_eq_same_prov(ptr %p, i64 %x) {
406450
; CHECK-LABEL: define i8 @assume_ptr_eq_same_prov(
407451
; CHECK-SAME: ptr [[P:%.*]], i64 [[X:%.*]]) {

0 commit comments

Comments
 (0)