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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
208 load i8, ptr addrspace(5) %p1
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
216 define void @test_8_3(ptr %p) {
217 %p1 = alloca i8, align 1, addrspace(5)
219 load i8, ptr addrspace(5) %p1
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
232 load i8, ptr addrspace(3) %p1
233 load i8, ptr addrspace(3) @shm
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
244 define void @test_8_5(ptr %p) {
245 %p1 = getelementptr [2 x i8], ptr addrspace(3) @shm, i32 0, i32 1
247 load i8, ptr addrspace(3) %p1
248 load i8, ptr addrspace(3) @shm
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
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
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
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
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
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
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
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
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
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