1; RUN: opt -mtriple=amdgcn-- -data-layout=A5 -aa-eval -amdgpu-aa -amdgpu-aa-wrapper -disable-basic-aa  -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s
2; RUN: opt -mtriple=r600-- -data-layout=A5 -aa-eval -amdgpu-aa -amdgpu-aa-wrapper -disable-basic-aa  -print-all-alias-modref-info -disable-output < %s 2>&1 | FileCheck %s
3
4; CHECK: NoAlias:      i8 addrspace(1)* %p1, i8 addrspace(5)* %p
5
6define void @test(i8 addrspace(5)* %p, i8 addrspace(1)* %p1) {
7  ret void
8}
9
10; CHECK: MayAlias:      i8 addrspace(1)* %p1, i8 addrspace(4)* %p
11
12define void @test_constant_vs_global(i8 addrspace(4)* %p, i8 addrspace(1)* %p1) {
13  ret void
14}
15
16; CHECK: MayAlias:      i8 addrspace(1)* %p, i8 addrspace(4)* %p1
17
18define void @test_global_vs_constant(i8 addrspace(1)* %p, i8 addrspace(4)* %p1) {
19  ret void
20}
21
22; CHECK: MayAlias:      i8 addrspace(1)* %p1, i8 addrspace(6)* %p
23
24define void @test_constant_32bit_vs_global(i8 addrspace(6)* %p, i8 addrspace(1)* %p1) {
25  ret void
26}
27
28; CHECK: MayAlias:      i8 addrspace(4)* %p1, i8 addrspace(6)* %p
29
30define void @test_constant_32bit_vs_constant(i8 addrspace(6)* %p, i8 addrspace(4)* %p1) {
31  ret void
32}
33
34; CHECK: MayAlias:	i8 addrspace(999)* %p0, i8* %p
35define void @test_0_999(i8 addrspace(0)* %p, i8 addrspace(999)* %p0) {
36  ret void
37}
38
39; CHECK: MayAlias:	i8 addrspace(999)* %p, i8* %p1
40define void @test_999_0(i8 addrspace(999)* %p, i8 addrspace(0)* %p1) {
41  ret void
42}
43
44; CHECK: MayAlias:	i8 addrspace(1)* %p, i8 addrspace(999)* %p1
45define void @test_1_999(i8 addrspace(1)* %p, i8 addrspace(999)* %p1) {
46  ret void
47}
48
49; CHECK: MayAlias:	i8 addrspace(1)* %p1, i8 addrspace(999)* %p
50define void @test_999_1(i8 addrspace(999)* %p, i8 addrspace(1)* %p1) {
51  ret void
52}
53
54; CHECK: NoAlias:  i8 addrspace(2)* %p, i8* %p1
55define void @test_region_vs_flat(i8 addrspace(2)* %p, i8 addrspace(0)* %p1) {
56  ret void
57}
58
59; CHECK: NoAlias:  i8 addrspace(1)* %p1, i8 addrspace(2)* %p
60define void @test_region_vs_global(i8 addrspace(2)* %p, i8 addrspace(1)* %p1) {
61  ret void
62}
63
64; CHECK: MayAlias: i8 addrspace(2)* %p, i8 addrspace(2)* %p1
65define void @test_region(i8 addrspace(2)* %p, i8 addrspace(2)* %p1) {
66  ret void
67}
68
69; CHECK: NoAlias:  i8 addrspace(2)* %p, i8 addrspace(3)* %p1
70define void @test_region_vs_group(i8 addrspace(2)* %p, i8 addrspace(3)* %p1) {
71  ret void
72}
73
74; CHECK: NoAlias:  i8 addrspace(2)* %p, i8 addrspace(4)* %p1
75define void @test_region_vs_constant(i8 addrspace(2)* %p, i8 addrspace(4)* %p1) {
76  ret void
77}
78
79; CHECK: NoAlias:  i8 addrspace(2)* %p, i8 addrspace(5)* %p1
80define void @test_region_vs_private(i8 addrspace(2)* %p, i8 addrspace(5)* %p1) {
81  ret void
82}
83
84; CHECK: NoAlias:  i8 addrspace(2)* %p, i8 addrspace(6)* %p1
85define void @test_region_vs_const32(i8 addrspace(2)* %p, i8 addrspace(6)* %p1) {
86  ret void
87}
88
89; CHECK: MayAlias:  i8 addrspace(7)* %p, i8* %p1
90define void @test_7_0(i8 addrspace(7)* %p, i8 addrspace(0)* %p1) {
91  ret void
92}
93
94; CHECK: MayAlias:  i8 addrspace(1)* %p1, i8 addrspace(7)* %p
95define void @test_7_1(i8 addrspace(7)* %p, i8 addrspace(1)* %p1) {
96  ret void
97}
98
99; CHECK: NoAlias:  i8 addrspace(2)* %p1, i8 addrspace(7)* %p
100define void @test_7_2(i8 addrspace(7)* %p, i8 addrspace(2)* %p1) {
101  ret void
102}
103
104; CHECK: NoAlias:  i8 addrspace(3)* %p1, i8 addrspace(7)* %p
105define void @test_7_3(i8 addrspace(7)* %p, i8 addrspace(3)* %p1) {
106  ret void
107}
108
109; CHECK: MayAlias:  i8 addrspace(4)* %p1, i8 addrspace(7)* %p
110define void @test_7_4(i8 addrspace(7)* %p, i8 addrspace(4)* %p1) {
111  ret void
112}
113
114; CHECK: NoAlias:  i8 addrspace(5)* %p1, i8 addrspace(7)* %p
115define void @test_7_5(i8 addrspace(7)* %p, i8 addrspace(5)* %p1) {
116  ret void
117}
118
119; CHECK: MayAlias:  i8 addrspace(6)* %p1, i8 addrspace(7)* %p
120define void @test_7_6(i8 addrspace(7)* %p, i8 addrspace(6)* %p1) {
121  ret void
122}
123
124; CHECK: MayAlias:  i8 addrspace(7)* %p, i8 addrspace(7)* %p1
125define void @test_7_7(i8 addrspace(7)* %p, i8 addrspace(7)* %p1) {
126  ret void
127}
128
129@cst = internal addrspace(4) global i8* undef, align 4
130
131; CHECK-LABEL: Function: test_8_0
132; CHECK: NoAlias:   i8 addrspace(3)* %p, i8* %p1
133; CHECK: NoAlias:   i8 addrspace(3)* %p, i8* addrspace(4)* @cst
134; CHECK: MayAlias:  i8* %p1, i8* addrspace(4)* @cst
135define void @test_8_0(i8 addrspace(3)* %p) {
136  %p1 = load i8*, i8* addrspace(4)* @cst
137  ret void
138}
139
140; CHECK-LABEL: Function: test_8_1
141; CHECK: NoAlias:   i8 addrspace(5)* %p, i8* %p1
142; CHECK: NoAlias:   i8 addrspace(5)* %p, i8* addrspace(4)* @cst
143; CHECK: MayAlias:  i8* %p1, i8* addrspace(4)* @cst
144define void @test_8_1(i8 addrspace(5)* %p) {
145  %p1 = load i8*, i8* addrspace(4)* @cst
146  ret void
147}
148
149; CHECK-LABEL: Function: test_8_2
150; CHECK: NoAlias:   i8 addrspace(5)* %p1, i8* %p
151define amdgpu_kernel void @test_8_2(i8* %p) {
152  %p1 = alloca i8, align 1, addrspace(5)
153  ret void
154}
155
156; CHECK-LABEL: Function: test_8_3
157; CHECK: MayAlias:  i8 addrspace(5)* %p1, i8* %p
158; TODO: So far, %p1 may still alias to %p. As it's not captured at all, it
159; should be NoAlias.
160define void @test_8_3(i8* %p) {
161  %p1 = alloca i8, align 1, addrspace(5)
162  ret void
163}
164
165@shm = internal addrspace(3) global i8 undef, align 4
166
167; CHECK-LABEL: Function: test_8_4
168; CHECK: NoAlias:   i8 addrspace(3)* %p1, i8* %p
169; CHECK: NoAlias:   i8 addrspace(3)* @shm, i8* %p
170; CHECK: MayAlias:  i8 addrspace(3)* %p1, i8 addrspace(3)* @shm
171define amdgpu_kernel void @test_8_4(i8* %p) {
172  %p1 = getelementptr i8, i8 addrspace(3)* @shm, i32 0
173  ret void
174}
175
176; CHECK-LABEL: Function: test_8_5
177; CHECK: MayAlias:  i8 addrspace(3)* %p1, i8* %p
178; CHECK: MayAlias:  i8 addrspace(3)* @shm, i8* %p
179; CHECK: MayAlias:  i8 addrspace(3)* %p1, i8 addrspace(3)* @shm
180; TODO: So far, %p1 may still alias to %p. As it's not captured at all, it
181; should be NoAlias.
182define void @test_8_5(i8* %p) {
183  %p1 = getelementptr i8, i8 addrspace(3)* @shm, i32 0
184  ret void
185}
186