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