[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / amdgpu-alias-analysis.ll
blob2453b1f415ec3646c19da638d8f615b09bbe241d
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