xref: /llvm-project/llvm/test/Transforms/InferAddressSpaces/AMDGPU/icmp.ll (revision 44096e6904e10bb313fef2f6aaff25c25d1325f7)
15651af89SMatt Arsenault; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=infer-address-spaces %s | FileCheck %s
2cee313d2SEric Christopher
3cee313d2SEric Christopher; CHECK-LABEL: @icmp_flat_cmp_self(
4a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr addrspace(3) %group.ptr.0, %group.ptr.0
5a982f095SMatt Arsenaultdefine i1 @icmp_flat_cmp_self(ptr addrspace(3) %group.ptr.0) #0 {
6a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
7a982f095SMatt Arsenault  %cmp = icmp eq ptr %cast0, %cast0
8cee313d2SEric Christopher  ret i1 %cmp
9cee313d2SEric Christopher}
10cee313d2SEric Christopher
11cee313d2SEric Christopher; CHECK-LABEL: @icmp_flat_flat_from_group(
12a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr addrspace(3) %group.ptr.0, %group.ptr.1
13a982f095SMatt Arsenaultdefine i1 @icmp_flat_flat_from_group(ptr addrspace(3) %group.ptr.0, ptr addrspace(3) %group.ptr.1) #0 {
14a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
15a982f095SMatt Arsenault  %cast1 = addrspacecast ptr addrspace(3) %group.ptr.1 to ptr
16a982f095SMatt Arsenault  %cmp = icmp eq ptr %cast0, %cast1
17cee313d2SEric Christopher  ret i1 %cmp
18cee313d2SEric Christopher}
19cee313d2SEric Christopher
20cee313d2SEric Christopher; CHECK-LABEL: @icmp_mismatch_flat_from_group_private(
21a982f095SMatt Arsenault; CHECK: %cast0 = addrspacecast ptr addrspace(5) %private.ptr.0 to ptr
22a982f095SMatt Arsenault; CHECK: %cast1 = addrspacecast ptr addrspace(3) %group.ptr.1 to ptr
23a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr %cast0, %cast1
24a982f095SMatt Arsenaultdefine i1 @icmp_mismatch_flat_from_group_private(ptr addrspace(5) %private.ptr.0, ptr addrspace(3) %group.ptr.1) #0 {
25a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(5) %private.ptr.0 to ptr
26a982f095SMatt Arsenault  %cast1 = addrspacecast ptr addrspace(3) %group.ptr.1 to ptr
27a982f095SMatt Arsenault  %cmp = icmp eq ptr %cast0, %cast1
28cee313d2SEric Christopher  ret i1 %cmp
29cee313d2SEric Christopher}
30cee313d2SEric Christopher
31cee313d2SEric Christopher; CHECK-LABEL: @icmp_flat_group_flat(
32a982f095SMatt Arsenault; CHECK: %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
33a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr %cast0, %flat.ptr.1
34a982f095SMatt Arsenaultdefine i1 @icmp_flat_group_flat(ptr addrspace(3) %group.ptr.0, ptr %flat.ptr.1) #0 {
35a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
36a982f095SMatt Arsenault  %cmp = icmp eq ptr %cast0, %flat.ptr.1
37cee313d2SEric Christopher  ret i1 %cmp
38cee313d2SEric Christopher}
39cee313d2SEric Christopher
40cee313d2SEric Christopher; CHECK-LABEL: @icmp_flat_flat_group(
41a982f095SMatt Arsenault; CHECK: %cast1 = addrspacecast ptr addrspace(3) %group.ptr.1 to ptr
42a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr %flat.ptr.0, %cast1
43a982f095SMatt Arsenaultdefine i1 @icmp_flat_flat_group(ptr %flat.ptr.0, ptr addrspace(3) %group.ptr.1) #0 {
44a982f095SMatt Arsenault  %cast1 = addrspacecast ptr addrspace(3) %group.ptr.1 to ptr
45a982f095SMatt Arsenault  %cmp = icmp eq ptr %flat.ptr.0, %cast1
46cee313d2SEric Christopher  ret i1 %cmp
47cee313d2SEric Christopher}
48cee313d2SEric Christopher
49cee313d2SEric Christopher; Keeping as cmp addrspace(3)* is better
50cee313d2SEric Christopher; CHECK-LABEL: @icmp_flat_to_group_cmp(
51a982f095SMatt Arsenault; CHECK: %cast0 = addrspacecast ptr %flat.ptr.0 to ptr addrspace(3)
52a982f095SMatt Arsenault; CHECK: %cast1 = addrspacecast ptr %flat.ptr.1 to ptr addrspace(3)
53a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr addrspace(3) %cast0, %cast1
54a982f095SMatt Arsenaultdefine i1 @icmp_flat_to_group_cmp(ptr %flat.ptr.0, ptr %flat.ptr.1) #0 {
55a982f095SMatt Arsenault  %cast0 = addrspacecast ptr %flat.ptr.0 to ptr addrspace(3)
56a982f095SMatt Arsenault  %cast1 = addrspacecast ptr %flat.ptr.1 to ptr addrspace(3)
57a982f095SMatt Arsenault  %cmp = icmp eq ptr addrspace(3) %cast0, %cast1
58cee313d2SEric Christopher  ret i1 %cmp
59cee313d2SEric Christopher}
60cee313d2SEric Christopher
61cee313d2SEric Christopher; FIXME: Should be able to ask target about how to constant fold the
62cee313d2SEric Christopher; constant cast if this is OK to change if 0 is a valid pointer.
63cee313d2SEric Christopher
64cee313d2SEric Christopher; CHECK-LABEL: @icmp_group_flat_cmp_null(
65a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr addrspace(3) %group.ptr.0, addrspacecast (ptr null to ptr addrspace(3))
66a982f095SMatt Arsenaultdefine i1 @icmp_group_flat_cmp_null(ptr addrspace(3) %group.ptr.0) #0 {
67a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
68a982f095SMatt Arsenault  %cmp = icmp eq ptr %cast0, null
69cee313d2SEric Christopher  ret i1 %cmp
70cee313d2SEric Christopher}
71cee313d2SEric Christopher
72cee313d2SEric Christopher; CHECK-LABEL: @icmp_group_flat_cmp_constant_inttoptr(
73a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr addrspace(3) %group.ptr.0, addrspacecast (ptr inttoptr (i64 400 to ptr) to ptr addrspace(3))
74a982f095SMatt Arsenaultdefine i1 @icmp_group_flat_cmp_constant_inttoptr(ptr addrspace(3) %group.ptr.0) #0 {
75a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
76a982f095SMatt Arsenault  %cmp = icmp eq ptr %cast0, inttoptr (i64 400 to ptr)
77cee313d2SEric Christopher  ret i1 %cmp
78cee313d2SEric Christopher}
79cee313d2SEric Christopher
80cee313d2SEric Christopher; CHECK-LABEL: @icmp_mismatch_flat_group_private_cmp_null(
81a982f095SMatt Arsenault; CHECK: %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
82a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr %cast0, addrspacecast (ptr addrspace(5) null to ptr)
83a982f095SMatt Arsenaultdefine i1 @icmp_mismatch_flat_group_private_cmp_null(ptr addrspace(3) %group.ptr.0) #0 {
84a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
85a982f095SMatt Arsenault  %cmp = icmp eq ptr %cast0, addrspacecast (ptr addrspace(5) null to ptr)
86cee313d2SEric Christopher  ret i1 %cmp
87cee313d2SEric Christopher}
88cee313d2SEric Christopher
89cee313d2SEric Christopher; CHECK-LABEL: @icmp_mismatch_flat_group_private_cmp_undef(
90a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr addrspace(3) %group.ptr.0, undef
91a982f095SMatt Arsenaultdefine i1 @icmp_mismatch_flat_group_private_cmp_undef(ptr addrspace(3) %group.ptr.0) #0 {
92a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
93a982f095SMatt Arsenault  %cmp = icmp eq ptr %cast0, addrspacecast (ptr addrspace(5) undef to ptr)
94cee313d2SEric Christopher  ret i1 %cmp
95cee313d2SEric Christopher}
96cee313d2SEric Christopher
97cee313d2SEric Christopher@lds0 = internal addrspace(3) global i32 0, align 4
98cee313d2SEric Christopher@global0 = internal addrspace(1) global i32 0, align 4
99cee313d2SEric Christopher
100cee313d2SEric Christopher; CHECK-LABEL: @icmp_mismatch_flat_group_global_cmp_gv(
101a982f095SMatt Arsenault; CHECK: %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
102a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr %cast0, addrspacecast (ptr addrspace(1) @global0 to ptr)
103a982f095SMatt Arsenaultdefine i1 @icmp_mismatch_flat_group_global_cmp_gv(ptr addrspace(3) %group.ptr.0) #0 {
104a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
105a982f095SMatt Arsenault  %cmp = icmp eq ptr %cast0, addrspacecast (ptr addrspace(1) @global0 to ptr)
106cee313d2SEric Christopher  ret i1 %cmp
107cee313d2SEric Christopher}
108cee313d2SEric Christopher
109cee313d2SEric Christopher; CHECK-LABEL: @icmp_mismatch_group_global_cmp_gv_gv(
110a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr addrspacecast (ptr addrspace(3) @lds0 to ptr), addrspacecast (ptr addrspace(1) @global0 to ptr)
111a982f095SMatt Arsenaultdefine i1 @icmp_mismatch_group_global_cmp_gv_gv(ptr addrspace(3) %group.ptr.0) #0 {
112a982f095SMatt Arsenault  %cmp = icmp eq ptr addrspacecast (ptr addrspace(3) @lds0 to ptr), addrspacecast (ptr addrspace(1) @global0 to ptr)
113cee313d2SEric Christopher  ret i1 %cmp
114cee313d2SEric Christopher}
115cee313d2SEric Christopher
116cee313d2SEric Christopher; CHECK-LABEL: @icmp_group_flat_cmp_undef(
117a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr addrspace(3) %group.ptr.0, undef
118a982f095SMatt Arsenaultdefine i1 @icmp_group_flat_cmp_undef(ptr addrspace(3) %group.ptr.0) #0 {
119a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
120a982f095SMatt Arsenault  %cmp = icmp eq ptr %cast0, undef
121cee313d2SEric Christopher  ret i1 %cmp
122cee313d2SEric Christopher}
123cee313d2SEric Christopher
124cee313d2SEric Christopher; Test non-canonical orders
125cee313d2SEric Christopher; CHECK-LABEL: @icmp_mismatch_flat_group_private_cmp_null_swap(
126a982f095SMatt Arsenault; CHECK: %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
127a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr addrspacecast (ptr addrspace(5) null to ptr), %cast0
128a982f095SMatt Arsenaultdefine i1 @icmp_mismatch_flat_group_private_cmp_null_swap(ptr addrspace(3) %group.ptr.0) #0 {
129a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
130a982f095SMatt Arsenault  %cmp = icmp eq ptr addrspacecast (ptr addrspace(5) null to ptr), %cast0
131cee313d2SEric Christopher  ret i1 %cmp
132cee313d2SEric Christopher}
133cee313d2SEric Christopher
134cee313d2SEric Christopher; CHECK-LABEL: @icmp_group_flat_cmp_undef_swap(
135a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr addrspace(3) undef, %group.ptr.0
136a982f095SMatt Arsenaultdefine i1 @icmp_group_flat_cmp_undef_swap(ptr addrspace(3) %group.ptr.0) #0 {
137a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
138a982f095SMatt Arsenault  %cmp = icmp eq ptr undef, %cast0
139cee313d2SEric Christopher  ret i1 %cmp
140cee313d2SEric Christopher}
141cee313d2SEric Christopher
142cee313d2SEric Christopher; CHECK-LABEL: @icmp_mismatch_flat_group_private_cmp_undef_swap(
143a982f095SMatt Arsenault; CHECK: %cmp = icmp eq ptr addrspace(3) undef, %group.ptr.0
144a982f095SMatt Arsenaultdefine i1 @icmp_mismatch_flat_group_private_cmp_undef_swap(ptr addrspace(3) %group.ptr.0) #0 {
145a982f095SMatt Arsenault  %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
146a982f095SMatt Arsenault  %cmp = icmp eq ptr addrspacecast (ptr addrspace(5) undef to ptr), %cast0
147cee313d2SEric Christopher  ret i1 %cmp
148cee313d2SEric Christopher}
149cee313d2SEric Christopher
150cee313d2SEric Christopher; CHECK-LABEL: @icmp_flat_flat_from_group_vector(
151*44096e69SCaprYang; CHECK: %cmp = icmp eq <2 x ptr addrspace(3)> %group.ptr.0, %group.ptr.1
152a982f095SMatt Arsenaultdefine <2 x i1> @icmp_flat_flat_from_group_vector(<2 x ptr addrspace(3)> %group.ptr.0, <2 x ptr addrspace(3)> %group.ptr.1) #0 {
153a982f095SMatt Arsenault  %cast0 = addrspacecast <2 x ptr addrspace(3)> %group.ptr.0 to <2 x ptr>
154a982f095SMatt Arsenault  %cast1 = addrspacecast <2 x ptr addrspace(3)> %group.ptr.1 to <2 x ptr>
155a982f095SMatt Arsenault  %cmp = icmp eq <2 x ptr> %cast0, %cast1
156cee313d2SEric Christopher  ret <2 x i1> %cmp
157cee313d2SEric Christopher}
158cee313d2SEric Christopher
159cee313d2SEric Christopherattributes #0 = { nounwind }
160