Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / amdgpu-alias-analysis.ll
bloba13eb5c6d085f81ce33a283c3e6fc4e582cb03e3
1 ; RUN: opt -mtriple=amdgcn-- -data-layout=A5 -passes=aa-eval -aa-pipeline=amdgpu-aa -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s
2 ; RUN: opt -mtriple=r600-- -data-layout=A5 -passes=aa-eval -aa-pipeline=amdgpu-aa -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s
4 ; CHECK-LABEL: Function: test
5 ; CHECK: NoAlias:      i8 addrspace(5)* %p, i8 addrspace(1)* %p1
7 define void @test(ptr addrspace(5) %p, ptr addrspace(1) %p1) {
8   load i8, ptr addrspace(5) %p
9   load i8, ptr addrspace(1) %p1
10   ret void
13 ; CHECK-LABEL: Function: test_constant_vs_global
14 ; CHECK: MayAlias:      i8 addrspace(4)* %p, i8 addrspace(1)* %p1
16 define void @test_constant_vs_global(ptr addrspace(4) %p, ptr addrspace(1) %p1) {
17   load i8, ptr addrspace(4) %p
18   load i8, ptr addrspace(1) %p1
19   ret void
22 ; CHECK: MayAlias:      i8 addrspace(1)* %p, i8 addrspace(4)* %p1
24 define void @test_global_vs_constant(ptr addrspace(1) %p, ptr addrspace(4) %p1) {
25   load i8, ptr addrspace(1) %p
26   load i8, ptr addrspace(4) %p1
27   ret void
30 ; CHECK: MayAlias:      i8 addrspace(6)* %p, i8 addrspace(1)* %p1
32 define void @test_constant_32bit_vs_global(ptr addrspace(6) %p, ptr addrspace(1) %p1) {
33   load i8, ptr addrspace(6) %p
34   load i8, ptr addrspace(1) %p1
35   ret void
38 ; CHECK: MayAlias:      i8 addrspace(6)* %p, i8 addrspace(4)* %p1
40 define void @test_constant_32bit_vs_constant(ptr addrspace(6) %p, ptr addrspace(4) %p1) {
41   load i8, ptr addrspace(6) %p
42   load i8, ptr addrspace(4) %p1
43   ret void
46 ; CHECK: MayAlias:      i8* %p, i8 addrspace(999)* %p0
47 define void @test_0_999(ptr addrspace(0) %p, ptr addrspace(999) %p0) {
48   load i8, ptr addrspace(0) %p
49   load i8, ptr addrspace(999) %p0
50   ret void
53 ; CHECK: MayAlias:      i8 addrspace(999)* %p, i8* %p1
54 define void @test_999_0(ptr addrspace(999) %p, ptr addrspace(0) %p1) {
55   load i8, ptr addrspace(999) %p
56   load i8, ptr addrspace(0) %p1
57   ret void
60 ; CHECK: MayAlias:      i8 addrspace(1)* %p, i8 addrspace(999)* %p1
61 define void @test_1_999(ptr addrspace(1) %p, ptr addrspace(999) %p1) {
62   load i8, ptr addrspace(1) %p
63   load i8, ptr addrspace(999) %p1
64   ret void
67 ; CHECK: MayAlias:      i8 addrspace(999)* %p, i8 addrspace(1)* %p1
68 define void @test_999_1(ptr addrspace(999) %p, ptr addrspace(1) %p1) {
69   load i8, ptr addrspace(999) %p
70   load i8, ptr addrspace(1) %p1
71   ret void
74 ; CHECK: NoAlias:  i8 addrspace(2)* %p, i8* %p1
75 define void @test_region_vs_flat(ptr addrspace(2) %p, ptr addrspace(0) %p1) {
76   load i8, ptr addrspace(2) %p
77   load i8, ptr addrspace(0) %p1
78   ret void
81 ; CHECK: NoAlias:  i8 addrspace(2)* %p, i8 addrspace(1)* %p1
82 define void @test_region_vs_global(ptr addrspace(2) %p, ptr addrspace(1) %p1) {
83   load i8, ptr addrspace(2) %p
84   load i8, ptr addrspace(1) %p1
85   ret void
88 ; CHECK: MayAlias: i8 addrspace(2)* %p, i8 addrspace(2)* %p1
89 define void @test_region(ptr addrspace(2) %p, ptr addrspace(2) %p1) {
90   load i8, ptr addrspace(2) %p
91   load i8, ptr addrspace(2) %p1
92   ret void
95 ; CHECK: NoAlias:  i8 addrspace(2)* %p, i8 addrspace(3)* %p1
96 define void @test_region_vs_group(ptr addrspace(2) %p, ptr addrspace(3) %p1) {
97   load i8, ptr addrspace(2) %p
98   load i8, ptr addrspace(3) %p1
99   ret void
102 ; CHECK: NoAlias:  i8 addrspace(2)* %p, i8 addrspace(4)* %p1
103 define void @test_region_vs_constant(ptr addrspace(2) %p, ptr addrspace(4) %p1) {
104   load i8, ptr addrspace(2) %p
105   load i8, ptr addrspace(4) %p1
106   ret void
109 ; CHECK: NoAlias:  i8 addrspace(2)* %p, i8 addrspace(5)* %p1
110 define void @test_region_vs_private(ptr addrspace(2) %p, ptr addrspace(5) %p1) {
111   load i8, ptr addrspace(2) %p
112   load i8, ptr addrspace(5) %p1
113   ret void
116 ; CHECK: NoAlias:  i8 addrspace(2)* %p, i8 addrspace(6)* %p1
117 define void @test_region_vs_const32(ptr addrspace(2) %p, ptr addrspace(6) %p1) {
118   load i8, ptr addrspace(2) %p
119   load i8, ptr addrspace(6) %p1
120   ret void
123 ; CHECK: MayAlias:  i8 addrspace(7)* %p, i8* %p1
124 define void @test_7_0(ptr addrspace(7) %p, ptr addrspace(0) %p1) {
125   load i8, ptr addrspace(7) %p
126   load i8, ptr addrspace(0) %p1
127   ret void
130 ; CHECK: MayAlias:  i8 addrspace(7)* %p, i8 addrspace(1)* %p1
131 define void @test_7_1(ptr addrspace(7) %p, ptr addrspace(1) %p1) {
132   load i8, ptr addrspace(7) %p
133   load i8, ptr addrspace(1) %p1
134   ret void
137 ; CHECK: NoAlias:  i8 addrspace(7)* %p, i8 addrspace(2)* %p1
138 define void @test_7_2(ptr addrspace(7) %p, ptr addrspace(2) %p1) {
139   load i8, ptr addrspace(7) %p
140   load i8, ptr addrspace(2) %p1
141   ret void
144 ; CHECK: NoAlias:  i8 addrspace(7)* %p, i8 addrspace(3)* %p1
145 define void @test_7_3(ptr addrspace(7) %p, ptr addrspace(3) %p1) {
146   load i8, ptr addrspace(7) %p
147   load i8, ptr addrspace(3) %p1
148   ret void
151 ; CHECK: MayAlias:  i8 addrspace(7)* %p, i8 addrspace(4)* %p1
152 define void @test_7_4(ptr addrspace(7) %p, ptr addrspace(4) %p1) {
153   load i8, ptr addrspace(7) %p
154   load i8, ptr addrspace(4) %p1
155   ret void
158 ; CHECK: NoAlias:  i8 addrspace(7)* %p, i8 addrspace(5)* %p1
159 define void @test_7_5(ptr addrspace(7) %p, ptr addrspace(5) %p1) {
160   load i8, ptr addrspace(7) %p
161   load i8, ptr addrspace(5) %p1
162   ret void
165 ; CHECK: MayAlias:  i8 addrspace(7)* %p, i8 addrspace(6)* %p1
166 define void @test_7_6(ptr addrspace(7) %p, ptr addrspace(6) %p1) {
167   load i8, ptr addrspace(7) %p
168   load i8, ptr addrspace(6) %p1
169   ret void
172 ; CHECK: MayAlias:  i8 addrspace(7)* %p, i8 addrspace(7)* %p1
173 define void @test_7_7(ptr addrspace(7) %p, ptr addrspace(7) %p1) {
174   load i8, ptr addrspace(7) %p
175   load i8, ptr addrspace(7) %p1
176   ret void
179 @cst = internal addrspace(4) global ptr undef, align 4
181 ; CHECK-LABEL: Function: test_8_0
182 ; CHECK-DAG: NoAlias:   i8 addrspace(3)* %p, i8* %p1
183 ; CHECK-DAG: NoAlias:   i8 addrspace(3)* %p, ptr addrspace(4)* @cst
184 ; CHECK-DAG: MayAlias:  i8* %p1, ptr addrspace(4)* @cst
185 define void @test_8_0(ptr addrspace(3) %p) {
186   %p1 = load ptr, ptr addrspace(4) @cst
187   load i8, ptr addrspace(3) %p
188   load i8, ptr %p1
189   ret void
192 ; CHECK-LABEL: Function: test_8_1
193 ; CHECK-DAG: NoAlias:   i8 addrspace(5)* %p, i8* %p1
194 ; CHECK-DAG: NoAlias:   i8 addrspace(5)* %p, ptr addrspace(4)* @cst
195 ; CHECK-DAG: MayAlias:  i8* %p1, ptr addrspace(4)* @cst
196 define void @test_8_1(ptr addrspace(5) %p) {
197   %p1 = load ptr, ptr addrspace(4) @cst
198   load i8, ptr addrspace(5) %p
199   load i8, ptr %p1
200   ret void
203 ; CHECK-LABEL: Function: test_8_2
204 ; CHECK: NoAlias:   i8* %p, i8 addrspace(5)* %p1
205 define amdgpu_kernel void @test_8_2(ptr %p) {
206   %p1 = alloca i8, align 1, addrspace(5)
207   load i8, ptr %p
208   load i8, ptr addrspace(5) %p1
209   ret void
212 ; CHECK-LABEL: Function: test_8_3
213 ; CHECK: MayAlias:  i8* %p, i8 addrspace(5)* %p1
214 ; TODO: So far, %p1 may still alias to %p. As it's not captured at all, it
215 ; should be NoAlias.
216 define void @test_8_3(ptr %p) {
217   %p1 = alloca i8, align 1, addrspace(5)
218   load i8, ptr %p
219   load i8, ptr addrspace(5) %p1
220   ret void
223 @shm = internal addrspace(3) global [2 x i8] undef, align 4
225 ; CHECK-LABEL: Function: test_8_4
226 ; CHECK: NoAlias:   i8* %p, i8 addrspace(3)* %p1
227 ; CHECK: NoAlias:   i8* %p, i8 addrspace(3)* @shm
228 ; CHECK: MayAlias:  i8 addrspace(3)* %p1, i8 addrspace(3)* @shm
229 define amdgpu_kernel void @test_8_4(ptr %p) {
230   %p1 = getelementptr [2 x i8], ptr addrspace(3) @shm, i32 0, i32 1
231   load i8, ptr %p
232   load i8, ptr addrspace(3) %p1
233   load i8, ptr addrspace(3) @shm
234   ret void
237 ; CHECK-LABEL: Function: test_8_5
238 ; CHECK: MayAlias:  i8* %p, i8 addrspace(3)* %p1
239 ; CHECK: MayAlias:  i8* %p, i8 addrspace(3)* @shm
240 ; CHECK: MayAlias:  i8 addrspace(3)* %p1, i8 addrspace(3)* @shm
242 ; TODO: So far, @shm may still alias to %p. As it's not captured at all, it
243 ; should be NoAlias.
244 define void @test_8_5(ptr %p) {
245   %p1 = getelementptr [2 x i8], ptr addrspace(3) @shm, i32 0, i32 1
246   load i8, ptr %p
247   load i8, ptr addrspace(3) %p1
248   load i8, ptr addrspace(3) @shm
249   ret void
252 ; CHECK: MayAlias:  i8 addrspace(9)* %p, i8* %p1
253 define void @test_9_0(ptr addrspace(9) %p, ptr addrspace(0) %p1) {
254   load i8, ptr addrspace(9) %p
255   load i8, ptr addrspace(0) %p1
256   ret void
259 ; CHECK: MayAlias:  i8 addrspace(9)* %p, i8 addrspace(1)* %p1
260 define void @test_9_1(ptr addrspace(9) %p, ptr addrspace(1) %p1) {
261   load i8, ptr addrspace(9) %p
262   load i8, ptr addrspace(1) %p1
263   ret void
266 ; CHECK: NoAlias:  i8 addrspace(9)* %p, i8 addrspace(2)* %p1
267 define void @test_9_2(ptr addrspace(9) %p, ptr addrspace(2) %p1) {
268   load i8, ptr addrspace(9) %p
269   load i8, ptr addrspace(2) %p1
270   ret void
273 ; CHECK: NoAlias:  i8 addrspace(9)* %p, i8 addrspace(3)* %p1
274 define void @test_9_3(ptr addrspace(9) %p, ptr addrspace(3) %p1) {
275   load i8, ptr addrspace(9) %p
276   load i8, ptr addrspace(3) %p1
277   ret void
280 ; CHECK: MayAlias:  i8 addrspace(9)* %p, i8 addrspace(4)* %p1
281 define void @test_9_4(ptr addrspace(9) %p, ptr addrspace(4) %p1) {
282   load i8, ptr addrspace(9) %p
283   load i8, ptr addrspace(4) %p1
284   ret void
287 ; CHECK: NoAlias:  i8 addrspace(9)* %p, i8 addrspace(5)* %p1
288 define void @test_9_5(ptr addrspace(9) %p, ptr addrspace(5) %p1) {
289   load i8, ptr addrspace(9) %p
290   load i8, ptr addrspace(5) %p1
291   ret void
294 ; CHECK: MayAlias:  i8 addrspace(9)* %p, i8 addrspace(6)* %p1
295 define void @test_9_6(ptr addrspace(9) %p, ptr addrspace(6) %p1) {
296   load i8, ptr addrspace(9) %p
297   load i8, ptr addrspace(6) %p1
298   ret void
301 ; CHECK: MayAlias:  i8 addrspace(9)* %p, i8 addrspace(7)* %p1
302 define void @test_9_7(ptr addrspace(9) %p, ptr addrspace(7) %p1) {
303   load i8, ptr addrspace(9) %p
304   load i8, ptr addrspace(7) %p1
305   ret void
308 ; CHECK: MayAlias:  i8 addrspace(9)* %p, i8 addrspace(8)* %p1
309 define void @test_9_8(ptr addrspace(9) %p, ptr addrspace(8) %p1) {
310   load i8, ptr addrspace(9) %p
311   load i8, ptr addrspace(8) %p1
312   ret void
315 ; CHECK: MayAlias:  i8 addrspace(9)* %p, i8 addrspace(9)* %p1
316 define void @test_9_9(ptr addrspace(9) %p, ptr addrspace(9) %p1) {
317   load i8, ptr addrspace(9) %p
318   load i8, ptr addrspace(9) %p1
319   ret void