[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / attributor-flatscratchinit.ll
blob25da00e6bde35d54259a1fc2b99183f45dffe3ea
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes --check-globals all --version 5
2 ; Test the generation of the attribute amdgpu-no-flat-scratch-init
3 ; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -passes=amdgpu-attributor < %s | FileCheck -check-prefixes=GFX9 %s
4 ; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -passes=amdgpu-attributor < %s | FileCheck -check-prefixes=GFX10 %s
6 ;; tests of addrspacecast
8 ;.
9 ; GFX9: @gv.fptr0 = external hidden unnamed_addr addrspace(4) constant ptr, align 4
11 ; GFX10: @gv.fptr0 = external hidden unnamed_addr addrspace(4) constant ptr, align 4
13 define void @without_global_to_flat_addrspacecast(ptr addrspace(1) %ptr) {
14 ; GFX9-LABEL: define void @without_global_to_flat_addrspacecast(
15 ; GFX9-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0:[0-9]+]] {
16 ; GFX9-NEXT:    store volatile i32 0, ptr addrspace(1) [[PTR]], align 4
17 ; GFX9-NEXT:    ret void
19 ; GFX10-LABEL: define void @without_global_to_flat_addrspacecast(
20 ; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0:[0-9]+]] {
21 ; GFX10-NEXT:    store volatile i32 0, ptr addrspace(1) [[PTR]], align 4
22 ; GFX10-NEXT:    ret void
24   store volatile i32 0, ptr addrspace(1) %ptr
25   ret void
28 define amdgpu_kernel void @without_global_to_flat_addrspacecast_cc_kernel(ptr addrspace(1) %ptr) {
29 ; GFX9-LABEL: define amdgpu_kernel void @without_global_to_flat_addrspacecast_cc_kernel(
30 ; GFX9-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] {
31 ; GFX9-NEXT:    store volatile i32 0, ptr addrspace(1) [[PTR]], align 4
32 ; GFX9-NEXT:    ret void
34 ; GFX10-LABEL: define amdgpu_kernel void @without_global_to_flat_addrspacecast_cc_kernel(
35 ; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] {
36 ; GFX10-NEXT:    store volatile i32 0, ptr addrspace(1) [[PTR]], align 4
37 ; GFX10-NEXT:    ret void
39   store volatile i32 0, ptr addrspace(1) %ptr
40   ret void
43 define void @with_global_to_flat_addrspacecast(ptr addrspace(1) %ptr) {
44 ; GFX9-LABEL: define void @with_global_to_flat_addrspacecast(
45 ; GFX9-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] {
46 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(1) [[PTR]] to ptr
47 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
48 ; GFX9-NEXT:    ret void
50 ; GFX10-LABEL: define void @with_global_to_flat_addrspacecast(
51 ; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] {
52 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(1) [[PTR]] to ptr
53 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
54 ; GFX10-NEXT:    ret void
56   %stof = addrspacecast ptr addrspace(1) %ptr to ptr
57   store volatile i32 0, ptr %stof
58   ret void
61 define amdgpu_kernel void @with_global_to_flat_addrspacecast_cc_kernel(ptr addrspace(1) %ptr) {
62 ; GFX9-LABEL: define amdgpu_kernel void @with_global_to_flat_addrspacecast_cc_kernel(
63 ; GFX9-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] {
64 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(1) [[PTR]] to ptr
65 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
66 ; GFX9-NEXT:    ret void
68 ; GFX10-LABEL: define amdgpu_kernel void @with_global_to_flat_addrspacecast_cc_kernel(
69 ; GFX10-SAME: ptr addrspace(1) [[PTR:%.*]]) #[[ATTR0]] {
70 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(1) [[PTR]] to ptr
71 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
72 ; GFX10-NEXT:    ret void
74   %stof = addrspacecast ptr addrspace(1) %ptr to ptr
75   store volatile i32 0, ptr %stof
76   ret void
79 define void @without_region_to_flat_addrspacecast(ptr addrspace(2) %ptr) {
80 ; GFX9-LABEL: define void @without_region_to_flat_addrspacecast(
81 ; GFX9-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] {
82 ; GFX9-NEXT:    store volatile i32 0, ptr addrspace(2) [[PTR]], align 4
83 ; GFX9-NEXT:    ret void
85 ; GFX10-LABEL: define void @without_region_to_flat_addrspacecast(
86 ; GFX10-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] {
87 ; GFX10-NEXT:    store volatile i32 0, ptr addrspace(2) [[PTR]], align 4
88 ; GFX10-NEXT:    ret void
90   store volatile i32 0, ptr addrspace(2) %ptr
91   ret void
94 define amdgpu_kernel void @without_region_to_flat_addrspacecast_cc_kernel(ptr addrspace(2) %ptr) {
95 ; GFX9-LABEL: define amdgpu_kernel void @without_region_to_flat_addrspacecast_cc_kernel(
96 ; GFX9-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] {
97 ; GFX9-NEXT:    store volatile i32 0, ptr addrspace(2) [[PTR]], align 4
98 ; GFX9-NEXT:    ret void
100 ; GFX10-LABEL: define amdgpu_kernel void @without_region_to_flat_addrspacecast_cc_kernel(
101 ; GFX10-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] {
102 ; GFX10-NEXT:    store volatile i32 0, ptr addrspace(2) [[PTR]], align 4
103 ; GFX10-NEXT:    ret void
105   store volatile i32 0, ptr addrspace(2) %ptr
106   ret void
109 define void @with_region_to_flat_addrspacecast(ptr addrspace(2) %ptr) {
110 ; GFX9-LABEL: define void @with_region_to_flat_addrspacecast(
111 ; GFX9-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] {
112 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(2) [[PTR]] to ptr
113 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
114 ; GFX9-NEXT:    ret void
116 ; GFX10-LABEL: define void @with_region_to_flat_addrspacecast(
117 ; GFX10-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] {
118 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(2) [[PTR]] to ptr
119 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
120 ; GFX10-NEXT:    ret void
122   %stof = addrspacecast ptr addrspace(2) %ptr to ptr
123   store volatile i32 0, ptr %stof
124   ret void
127 define amdgpu_kernel void @with_region_to_flat_addrspacecast_cc_kernel(ptr addrspace(2) %ptr) {
128 ; GFX9-LABEL: define amdgpu_kernel void @with_region_to_flat_addrspacecast_cc_kernel(
129 ; GFX9-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] {
130 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(2) [[PTR]] to ptr
131 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
132 ; GFX9-NEXT:    ret void
134 ; GFX10-LABEL: define amdgpu_kernel void @with_region_to_flat_addrspacecast_cc_kernel(
135 ; GFX10-SAME: ptr addrspace(2) [[PTR:%.*]]) #[[ATTR0]] {
136 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(2) [[PTR]] to ptr
137 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
138 ; GFX10-NEXT:    ret void
140   %stof = addrspacecast ptr addrspace(2) %ptr to ptr
141   store volatile i32 0, ptr %stof
142   ret void
145 define void @without_group_to_flat_addrspacecast(ptr addrspace(3) %ptr) {
146 ; GFX9-LABEL: define void @without_group_to_flat_addrspacecast(
147 ; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] {
148 ; GFX9-NEXT:    store volatile i32 0, ptr addrspace(3) [[PTR]], align 4
149 ; GFX9-NEXT:    ret void
151 ; GFX10-LABEL: define void @without_group_to_flat_addrspacecast(
152 ; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] {
153 ; GFX10-NEXT:    store volatile i32 0, ptr addrspace(3) [[PTR]], align 4
154 ; GFX10-NEXT:    ret void
156   store volatile i32 0, ptr addrspace(3) %ptr
157   ret void
160 define amdgpu_kernel void @without_group_to_flat_addrspacecast_cc_kernel(ptr addrspace(3) %ptr) {
161 ; GFX9-LABEL: define amdgpu_kernel void @without_group_to_flat_addrspacecast_cc_kernel(
162 ; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] {
163 ; GFX9-NEXT:    store volatile i32 0, ptr addrspace(3) [[PTR]], align 4
164 ; GFX9-NEXT:    ret void
166 ; GFX10-LABEL: define amdgpu_kernel void @without_group_to_flat_addrspacecast_cc_kernel(
167 ; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] {
168 ; GFX10-NEXT:    store volatile i32 0, ptr addrspace(3) [[PTR]], align 4
169 ; GFX10-NEXT:    ret void
171   store volatile i32 0, ptr addrspace(3) %ptr
172   ret void
175 define void @with_group_to_flat_addrspacecast(ptr addrspace(3) %ptr) {
176 ; GFX9-LABEL: define void @with_group_to_flat_addrspacecast(
177 ; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] {
178 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr
179 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
180 ; GFX9-NEXT:    ret void
182 ; GFX10-LABEL: define void @with_group_to_flat_addrspacecast(
183 ; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] {
184 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr
185 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
186 ; GFX10-NEXT:    ret void
188   %stof = addrspacecast ptr addrspace(3) %ptr to ptr
189   store volatile i32 0, ptr %stof
190   ret void
193 define amdgpu_kernel void @with_group_to_flat_addrspacecast_cc_kernel(ptr addrspace(3) %ptr) {
194 ; GFX9-LABEL: define amdgpu_kernel void @with_group_to_flat_addrspacecast_cc_kernel(
195 ; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] {
196 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr
197 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
198 ; GFX9-NEXT:    ret void
200 ; GFX10-LABEL: define amdgpu_kernel void @with_group_to_flat_addrspacecast_cc_kernel(
201 ; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR0]] {
202 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr
203 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
204 ; GFX10-NEXT:    ret void
206   %stof = addrspacecast ptr addrspace(3) %ptr to ptr
207   store volatile i32 0, ptr %stof
208   ret void
211 define void @without_constant_to_flat_addrspacecast(ptr addrspace(4) %ptr) {
212 ; GFX9-LABEL: define void @without_constant_to_flat_addrspacecast(
213 ; GFX9-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] {
214 ; GFX9-NEXT:    store volatile i32 0, ptr addrspace(4) [[PTR]], align 4
215 ; GFX9-NEXT:    ret void
217 ; GFX10-LABEL: define void @without_constant_to_flat_addrspacecast(
218 ; GFX10-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] {
219 ; GFX10-NEXT:    store volatile i32 0, ptr addrspace(4) [[PTR]], align 4
220 ; GFX10-NEXT:    ret void
222   store volatile i32 0, ptr addrspace(4) %ptr
223   ret void
226 define amdgpu_kernel void @without_constant_to_flat_addrspacecast_cc_kernel(ptr addrspace(4) %ptr) {
227 ; GFX9-LABEL: define amdgpu_kernel void @without_constant_to_flat_addrspacecast_cc_kernel(
228 ; GFX9-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] {
229 ; GFX9-NEXT:    store volatile i32 0, ptr addrspace(4) [[PTR]], align 4
230 ; GFX9-NEXT:    ret void
232 ; GFX10-LABEL: define amdgpu_kernel void @without_constant_to_flat_addrspacecast_cc_kernel(
233 ; GFX10-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] {
234 ; GFX10-NEXT:    store volatile i32 0, ptr addrspace(4) [[PTR]], align 4
235 ; GFX10-NEXT:    ret void
237   store volatile i32 0, ptr addrspace(4) %ptr
238   ret void
241 define void @with_constant_to_flat_addrspacecast(ptr addrspace(4) %ptr) {
242 ; GFX9-LABEL: define void @with_constant_to_flat_addrspacecast(
243 ; GFX9-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] {
244 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(4) [[PTR]] to ptr
245 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
246 ; GFX9-NEXT:    ret void
248 ; GFX10-LABEL: define void @with_constant_to_flat_addrspacecast(
249 ; GFX10-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] {
250 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(4) [[PTR]] to ptr
251 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
252 ; GFX10-NEXT:    ret void
254   %stof = addrspacecast ptr addrspace(4) %ptr to ptr
255   store volatile i32 0, ptr %stof
256   ret void
259 define amdgpu_kernel void @with_constant_to_flat_addrspacecast_cc_kernel(ptr addrspace(4) %ptr) {
260 ; GFX9-LABEL: define amdgpu_kernel void @with_constant_to_flat_addrspacecast_cc_kernel(
261 ; GFX9-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] {
262 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(4) [[PTR]] to ptr
263 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
264 ; GFX9-NEXT:    ret void
266 ; GFX10-LABEL: define amdgpu_kernel void @with_constant_to_flat_addrspacecast_cc_kernel(
267 ; GFX10-SAME: ptr addrspace(4) [[PTR:%.*]]) #[[ATTR0]] {
268 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(4) [[PTR]] to ptr
269 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
270 ; GFX10-NEXT:    ret void
272   %stof = addrspacecast ptr addrspace(4) %ptr to ptr
273   store volatile i32 0, ptr %stof
274   ret void
277 define void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) {
278 ; GFX9-LABEL: define void @without_private_to_flat_addrspacecast(
279 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
280 ; GFX9-NEXT:    store volatile i32 0, ptr addrspace(5) [[PTR]], align 4
281 ; GFX9-NEXT:    ret void
283 ; GFX10-LABEL: define void @without_private_to_flat_addrspacecast(
284 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
285 ; GFX10-NEXT:    store volatile i32 0, ptr addrspace(5) [[PTR]], align 4
286 ; GFX10-NEXT:    ret void
288   store volatile i32 0, ptr addrspace(5) %ptr
289   ret void
292 define amdgpu_kernel void @without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) {
293 ; GFX9-LABEL: define amdgpu_kernel void @without_private_to_flat_addrspacecast_cc_kernel(
294 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
295 ; GFX9-NEXT:    store volatile i32 0, ptr addrspace(5) [[PTR]], align 4
296 ; GFX9-NEXT:    ret void
298 ; GFX10-LABEL: define amdgpu_kernel void @without_private_to_flat_addrspacecast_cc_kernel(
299 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
300 ; GFX10-NEXT:    store volatile i32 0, ptr addrspace(5) [[PTR]], align 4
301 ; GFX10-NEXT:    ret void
303   store volatile i32 0, ptr addrspace(5) %ptr
304   ret void
307 define void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) {
308 ; GFX9-LABEL: define void @with_private_to_flat_addrspacecast(
309 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
310 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
311 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
312 ; GFX9-NEXT:    ret void
314 ; GFX10-LABEL: define void @with_private_to_flat_addrspacecast(
315 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1:[0-9]+]] {
316 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
317 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
318 ; GFX10-NEXT:    ret void
320   %stof = addrspacecast ptr addrspace(5) %ptr to ptr
321   store volatile i32 0, ptr %stof
322   ret void
325 define amdgpu_kernel void @with_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) {
326 ; GFX9-LABEL: define amdgpu_kernel void @with_private_to_flat_addrspacecast_cc_kernel(
327 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
328 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
329 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
330 ; GFX9-NEXT:    ret void
332 ; GFX10-LABEL: define amdgpu_kernel void @with_private_to_flat_addrspacecast_cc_kernel(
333 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
334 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
335 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
336 ; GFX10-NEXT:    ret void
338   %stof = addrspacecast ptr addrspace(5) %ptr to ptr
339   store volatile i32 0, ptr %stof
340   ret void
343 define void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) {
344 ; GFX9-LABEL: define void @call_without_private_to_flat_addrspacecast(
345 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
346 ; GFX9-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
347 ; GFX9-NEXT:    ret void
349 ; GFX10-LABEL: define void @call_without_private_to_flat_addrspacecast(
350 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
351 ; GFX10-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
352 ; GFX10-NEXT:    ret void
354   call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
355   ret void
358 define amdgpu_kernel void @call_without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) {
359 ; GFX9-LABEL: define amdgpu_kernel void @call_without_private_to_flat_addrspacecast_cc_kernel(
360 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
361 ; GFX9-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
362 ; GFX9-NEXT:    ret void
364 ; GFX10-LABEL: define amdgpu_kernel void @call_without_private_to_flat_addrspacecast_cc_kernel(
365 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
366 ; GFX10-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
367 ; GFX10-NEXT:    ret void
369   call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
370   ret void
373 define void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) {
374 ; GFX9-LABEL: define void @call_with_private_to_flat_addrspacecast(
375 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
376 ; GFX9-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
377 ; GFX9-NEXT:    ret void
379 ; GFX10-LABEL: define void @call_with_private_to_flat_addrspacecast(
380 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
381 ; GFX10-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
382 ; GFX10-NEXT:    ret void
384   call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
385   ret void
388 define amdgpu_kernel void @call_with_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) {
389 ; GFX9-LABEL: define amdgpu_kernel void @call_with_private_to_flat_addrspacecast_cc_kernel(
390 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
391 ; GFX9-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
392 ; GFX9-NEXT:    ret void
394 ; GFX10-LABEL: define amdgpu_kernel void @call_with_private_to_flat_addrspacecast_cc_kernel(
395 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
396 ; GFX10-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
397 ; GFX10-NEXT:    ret void
399   call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
400   ret void
403 define void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) {
404 ; GFX9-LABEL: define void @call_both_with_and_without_private_to_flat_addrspacecast(
405 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
406 ; GFX9-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
407 ; GFX9-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
408 ; GFX9-NEXT:    ret void
410 ; GFX10-LABEL: define void @call_both_with_and_without_private_to_flat_addrspacecast(
411 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
412 ; GFX10-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
413 ; GFX10-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
414 ; GFX10-NEXT:    ret void
416   call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
417   call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
418   ret void
421 define amdgpu_kernel void @call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) {
422 ; GFX9-LABEL: define amdgpu_kernel void @call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel(
423 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
424 ; GFX9-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
425 ; GFX9-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
426 ; GFX9-NEXT:    ret void
428 ; GFX10-LABEL: define amdgpu_kernel void @call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel(
429 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
430 ; GFX10-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
431 ; GFX10-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
432 ; GFX10-NEXT:    ret void
434   call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
435   call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
436   ret void
439 define void @call_call_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) {
440 ; GFX9-LABEL: define void @call_call_without_private_to_flat_addrspacecast(
441 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
442 ; GFX9-NEXT:    call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
443 ; GFX9-NEXT:    ret void
445 ; GFX10-LABEL: define void @call_call_without_private_to_flat_addrspacecast(
446 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
447 ; GFX10-NEXT:    call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
448 ; GFX10-NEXT:    ret void
450   call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
451   ret void
454 define amdgpu_kernel void @call_call_without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) {
455 ; GFX9-LABEL: define amdgpu_kernel void @call_call_without_private_to_flat_addrspacecast_cc_kernel(
456 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
457 ; GFX9-NEXT:    call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
458 ; GFX9-NEXT:    ret void
460 ; GFX10-LABEL: define amdgpu_kernel void @call_call_without_private_to_flat_addrspacecast_cc_kernel(
461 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR0]] {
462 ; GFX10-NEXT:    call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
463 ; GFX10-NEXT:    ret void
465   call void @call_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
466   ret void
469 define void @call_call_with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) {
470 ; GFX9-LABEL: define void @call_call_with_private_to_flat_addrspacecast(
471 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
472 ; GFX9-NEXT:    call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
473 ; GFX9-NEXT:    ret void
475 ; GFX10-LABEL: define void @call_call_with_private_to_flat_addrspacecast(
476 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
477 ; GFX10-NEXT:    call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
478 ; GFX10-NEXT:    ret void
480   call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
481   ret void
484 define amdgpu_kernel void @call_call_with_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) {
485 ; GFX9-LABEL: define amdgpu_kernel void @call_call_with_private_to_flat_addrspacecast_cc_kernel(
486 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
487 ; GFX9-NEXT:    call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
488 ; GFX9-NEXT:    ret void
490 ; GFX10-LABEL: define amdgpu_kernel void @call_call_with_private_to_flat_addrspacecast_cc_kernel(
491 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
492 ; GFX10-NEXT:    call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
493 ; GFX10-NEXT:    ret void
495   call void @call_with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
496   ret void
499 define void @call_call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) {
500 ; GFX9-LABEL: define void @call_call_both_with_and_without_private_to_flat_addrspacecast(
501 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
502 ; GFX9-NEXT:    call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
503 ; GFX9-NEXT:    ret void
505 ; GFX10-LABEL: define void @call_call_both_with_and_without_private_to_flat_addrspacecast(
506 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
507 ; GFX10-NEXT:    call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
508 ; GFX10-NEXT:    ret void
510   call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
511   ret void
514 define amdgpu_kernel void @call_call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) {
515 ; GFX9-LABEL: define amdgpu_kernel void @call_call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel(
516 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
517 ; GFX9-NEXT:    call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
518 ; GFX9-NEXT:    ret void
520 ; GFX10-LABEL: define amdgpu_kernel void @call_call_both_with_and_without_private_to_flat_addrspacecast_cc_kernel(
521 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
522 ; GFX10-NEXT:    call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
523 ; GFX10-NEXT:    ret void
525   call void @call_both_with_and_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
526   ret void
529 define void @with_cast_call_without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) {
530 ; GFX9-LABEL: define void @with_cast_call_without_private_to_flat_addrspacecast(
531 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
532 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
533 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
534 ; GFX9-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
535 ; GFX9-NEXT:    ret void
537 ; GFX10-LABEL: define void @with_cast_call_without_private_to_flat_addrspacecast(
538 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
539 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
540 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
541 ; GFX10-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
542 ; GFX10-NEXT:    ret void
544   %stof = addrspacecast ptr addrspace(5) %ptr to ptr
545   store volatile i32 0, ptr %stof
546   call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
547   ret void
550 define amdgpu_kernel void @with_cast_call_without_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) {
551 ; GFX9-LABEL: define amdgpu_kernel void @with_cast_call_without_private_to_flat_addrspacecast_cc_kernel(
552 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
553 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
554 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
555 ; GFX9-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
556 ; GFX9-NEXT:    ret void
558 ; GFX10-LABEL: define amdgpu_kernel void @with_cast_call_without_private_to_flat_addrspacecast_cc_kernel(
559 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
560 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
561 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
562 ; GFX10-NEXT:    call void @without_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
563 ; GFX10-NEXT:    ret void
565   %stof = addrspacecast ptr addrspace(5) %ptr to ptr
566   store volatile i32 0, ptr %stof
567   call void @without_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
568   ret void
571 define void @with_cast_call_with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr) {
572 ; GFX9-LABEL: define void @with_cast_call_with_private_to_flat_addrspacecast(
573 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
574 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
575 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
576 ; GFX9-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
577 ; GFX9-NEXT:    ret void
579 ; GFX10-LABEL: define void @with_cast_call_with_private_to_flat_addrspacecast(
580 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
581 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
582 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
583 ; GFX10-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
584 ; GFX10-NEXT:    ret void
586   %stof = addrspacecast ptr addrspace(5) %ptr to ptr
587   store volatile i32 0, ptr %stof
588   call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
589   ret void
592 define amdgpu_kernel void @with_cast_call_with_private_to_flat_addrspacecast_cc_kernel(ptr addrspace(5) %ptr) {
593 ; GFX9-LABEL: define amdgpu_kernel void @with_cast_call_with_private_to_flat_addrspacecast_cc_kernel(
594 ; GFX9-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
595 ; GFX9-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
596 ; GFX9-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
597 ; GFX9-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
598 ; GFX9-NEXT:    ret void
600 ; GFX10-LABEL: define amdgpu_kernel void @with_cast_call_with_private_to_flat_addrspacecast_cc_kernel(
601 ; GFX10-SAME: ptr addrspace(5) [[PTR:%.*]]) #[[ATTR1]] {
602 ; GFX10-NEXT:    [[STOF:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr
603 ; GFX10-NEXT:    store volatile i32 0, ptr [[STOF]], align 4
604 ; GFX10-NEXT:    call void @with_private_to_flat_addrspacecast(ptr addrspace(5) [[PTR]])
605 ; GFX10-NEXT:    ret void
607   %stof = addrspacecast ptr addrspace(5) %ptr to ptr
608   store volatile i32 0, ptr %stof
609   call void @with_private_to_flat_addrspacecast(ptr addrspace(5) %ptr)
610   ret void
613 ;; tests of addrspacecast in a constant
615 define amdgpu_kernel void @private_constant_expression_use(ptr addrspace(1) nocapture %out) {
616 ; GFX9-LABEL: define amdgpu_kernel void @private_constant_expression_use(
617 ; GFX9-SAME: ptr addrspace(1) nocapture [[OUT:%.*]]) #[[ATTR1]] {
618 ; GFX9-NEXT:    store volatile ptr addrspacecast (ptr addrspace(5) inttoptr (i32 123 to ptr addrspace(5)) to ptr), ptr addrspace(1) [[OUT]], align 8
619 ; GFX9-NEXT:    ret void
621 ; GFX10-LABEL: define amdgpu_kernel void @private_constant_expression_use(
622 ; GFX10-SAME: ptr addrspace(1) nocapture [[OUT:%.*]]) #[[ATTR1]] {
623 ; GFX10-NEXT:    store volatile ptr addrspacecast (ptr addrspace(5) inttoptr (i32 123 to ptr addrspace(5)) to ptr), ptr addrspace(1) [[OUT]], align 8
624 ; GFX10-NEXT:    ret void
626   store volatile ptr addrspacecast (ptr addrspace(5) inttoptr (i32 123 to ptr addrspace(5)) to ptr), ptr addrspace(1) %out, align 8
627   ret void
630 ;; tests of indirect call, intrinsics, inline asm
632 @gv.fptr0 = external hidden unnamed_addr addrspace(4) constant ptr, align 4
634 define void @with_indirect_call() {
635 ; GFX9-LABEL: define void @with_indirect_call(
636 ; GFX9-SAME: ) #[[ATTR2:[0-9]+]] {
637 ; GFX9-NEXT:    [[FPTR:%.*]] = load ptr, ptr addrspace(4) @gv.fptr0, align 8
638 ; GFX9-NEXT:    call void [[FPTR]]()
639 ; GFX9-NEXT:    ret void
641 ; GFX10-LABEL: define void @with_indirect_call(
642 ; GFX10-SAME: ) #[[ATTR2:[0-9]+]] {
643 ; GFX10-NEXT:    [[FPTR:%.*]] = load ptr, ptr addrspace(4) @gv.fptr0, align 8
644 ; GFX10-NEXT:    call void [[FPTR]]()
645 ; GFX10-NEXT:    ret void
647   %fptr = load ptr, ptr addrspace(4) @gv.fptr0
648   call void %fptr()
649   ret void
652 define amdgpu_kernel void @with_indirect_call_cc_kernel() {
653 ; GFX9-LABEL: define amdgpu_kernel void @with_indirect_call_cc_kernel(
654 ; GFX9-SAME: ) #[[ATTR2]] {
655 ; GFX9-NEXT:    [[FPTR:%.*]] = load ptr, ptr addrspace(4) @gv.fptr0, align 8
656 ; GFX9-NEXT:    call void [[FPTR]]()
657 ; GFX9-NEXT:    ret void
659 ; GFX10-LABEL: define amdgpu_kernel void @with_indirect_call_cc_kernel(
660 ; GFX10-SAME: ) #[[ATTR2]] {
661 ; GFX10-NEXT:    [[FPTR:%.*]] = load ptr, ptr addrspace(4) @gv.fptr0, align 8
662 ; GFX10-NEXT:    call void [[FPTR]]()
663 ; GFX10-NEXT:    ret void
665   %fptr = load ptr, ptr addrspace(4) @gv.fptr0
666   call void %fptr()
667   ret void
670 define void @call_with_indirect_call() {
671 ; GFX9-LABEL: define void @call_with_indirect_call(
672 ; GFX9-SAME: ) #[[ATTR2]] {
673 ; GFX9-NEXT:    call void @with_indirect_call()
674 ; GFX9-NEXT:    ret void
676 ; GFX10-LABEL: define void @call_with_indirect_call(
677 ; GFX10-SAME: ) #[[ATTR2]] {
678 ; GFX10-NEXT:    call void @with_indirect_call()
679 ; GFX10-NEXT:    ret void
681   call void @with_indirect_call()
682   ret void
685 define amdgpu_kernel void @call_with_indirect_call_cc_kernel() {
686 ; GFX9-LABEL: define amdgpu_kernel void @call_with_indirect_call_cc_kernel(
687 ; GFX9-SAME: ) #[[ATTR2]] {
688 ; GFX9-NEXT:    call void @with_indirect_call()
689 ; GFX9-NEXT:    ret void
691 ; GFX10-LABEL: define amdgpu_kernel void @call_with_indirect_call_cc_kernel(
692 ; GFX10-SAME: ) #[[ATTR2]] {
693 ; GFX10-NEXT:    call void @with_indirect_call()
694 ; GFX10-NEXT:    ret void
696   call void @with_indirect_call()
697   ret void
700 define void @empty() {
701 ; GFX9-LABEL: define void @empty(
702 ; GFX9-SAME: ) #[[ATTR0]] {
703 ; GFX9-NEXT:    ret void
705 ; GFX10-LABEL: define void @empty(
706 ; GFX10-SAME: ) #[[ATTR0]] {
707 ; GFX10-NEXT:    ret void
709   ret void
712 define void @also_empty() {
713 ; GFX9-LABEL: define void @also_empty(
714 ; GFX9-SAME: ) #[[ATTR0]] {
715 ; GFX9-NEXT:    ret void
717 ; GFX10-LABEL: define void @also_empty(
718 ; GFX10-SAME: ) #[[ATTR0]] {
719 ; GFX10-NEXT:    ret void
721   ret void
724 define amdgpu_kernel void @indirect_call_known_callees(i1 %cond) {
725 ; GFX9-LABEL: define amdgpu_kernel void @indirect_call_known_callees(
726 ; GFX9-SAME: i1 [[COND:%.*]]) #[[ATTR3:[0-9]+]] {
727 ; GFX9-NEXT:    [[FPTR:%.*]] = select i1 [[COND]], ptr @empty, ptr @also_empty
728 ; GFX9-NEXT:    [[TMP1:%.*]] = icmp eq ptr [[FPTR]], @also_empty
729 ; GFX9-NEXT:    br i1 [[TMP1]], label %[[BB2:.*]], label %[[BB3:.*]]
730 ; GFX9:       [[BB2]]:
731 ; GFX9-NEXT:    call void @also_empty()
732 ; GFX9-NEXT:    br label %[[BB6:.*]]
733 ; GFX9:       [[BB3]]:
734 ; GFX9-NEXT:    br i1 true, label %[[BB4:.*]], label %[[BB5:.*]]
735 ; GFX9:       [[BB4]]:
736 ; GFX9-NEXT:    call void @empty()
737 ; GFX9-NEXT:    br label %[[BB6]]
738 ; GFX9:       [[BB5]]:
739 ; GFX9-NEXT:    unreachable
740 ; GFX9:       [[BB6]]:
741 ; GFX9-NEXT:    ret void
743 ; GFX10-LABEL: define amdgpu_kernel void @indirect_call_known_callees(
744 ; GFX10-SAME: i1 [[COND:%.*]]) #[[ATTR3:[0-9]+]] {
745 ; GFX10-NEXT:    [[FPTR:%.*]] = select i1 [[COND]], ptr @empty, ptr @also_empty
746 ; GFX10-NEXT:    [[TMP1:%.*]] = icmp eq ptr [[FPTR]], @also_empty
747 ; GFX10-NEXT:    br i1 [[TMP1]], label %[[BB2:.*]], label %[[BB3:.*]]
748 ; GFX10:       [[BB2]]:
749 ; GFX10-NEXT:    call void @also_empty()
750 ; GFX10-NEXT:    br label %[[BB6:.*]]
751 ; GFX10:       [[BB3]]:
752 ; GFX10-NEXT:    br i1 true, label %[[BB4:.*]], label %[[BB5:.*]]
753 ; GFX10:       [[BB4]]:
754 ; GFX10-NEXT:    call void @empty()
755 ; GFX10-NEXT:    br label %[[BB6]]
756 ; GFX10:       [[BB5]]:
757 ; GFX10-NEXT:    unreachable
758 ; GFX10:       [[BB6]]:
759 ; GFX10-NEXT:    ret void
761   %fptr = select i1 %cond, ptr @empty, ptr @also_empty
762   call void %fptr()
763   ret void
766 declare i32 @llvm.amdgcn.workgroup.id.x()
768 define void @use_intrinsic_workitem_id_x() {
769 ; GFX9-LABEL: define void @use_intrinsic_workitem_id_x(
770 ; GFX9-SAME: ) #[[ATTR5:[0-9]+]] {
771 ; GFX9-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x()
772 ; GFX9-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) null, align 4
773 ; GFX9-NEXT:    ret void
775 ; GFX10-LABEL: define void @use_intrinsic_workitem_id_x(
776 ; GFX10-SAME: ) #[[ATTR5:[0-9]+]] {
777 ; GFX10-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x()
778 ; GFX10-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) null, align 4
779 ; GFX10-NEXT:    ret void
781   %val = call i32 @llvm.amdgcn.workitem.id.x()
782   store volatile i32 %val, ptr addrspace(1) null
783   ret void
786 define amdgpu_kernel void @use_intrinsic_workitem_id_x_cc_kernel() {
787 ; GFX9-LABEL: define amdgpu_kernel void @use_intrinsic_workitem_id_x_cc_kernel(
788 ; GFX9-SAME: ) #[[ATTR0]] {
789 ; GFX9-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x()
790 ; GFX9-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) null, align 4
791 ; GFX9-NEXT:    ret void
793 ; GFX10-LABEL: define amdgpu_kernel void @use_intrinsic_workitem_id_x_cc_kernel(
794 ; GFX10-SAME: ) #[[ATTR0]] {
795 ; GFX10-NEXT:    [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x()
796 ; GFX10-NEXT:    store volatile i32 [[VAL]], ptr addrspace(1) null, align 4
797 ; GFX10-NEXT:    ret void
799   %val = call i32 @llvm.amdgcn.workitem.id.x()
800   store volatile i32 %val, ptr addrspace(1) null
801   ret void
804 define void @call_use_intrinsic_workitem_id_x() {
805 ; GFX9-LABEL: define void @call_use_intrinsic_workitem_id_x(
806 ; GFX9-SAME: ) #[[ATTR5]] {
807 ; GFX9-NEXT:    call void @use_intrinsic_workitem_id_x()
808 ; GFX9-NEXT:    ret void
810 ; GFX10-LABEL: define void @call_use_intrinsic_workitem_id_x(
811 ; GFX10-SAME: ) #[[ATTR5]] {
812 ; GFX10-NEXT:    call void @use_intrinsic_workitem_id_x()
813 ; GFX10-NEXT:    ret void
815   call void @use_intrinsic_workitem_id_x()
816   ret void
819 define amdgpu_kernel void @call_use_intrinsic_workitem_id_x_cc_kernel() {
820 ; GFX9-LABEL: define amdgpu_kernel void @call_use_intrinsic_workitem_id_x_cc_kernel(
821 ; GFX9-SAME: ) #[[ATTR5]] {
822 ; GFX9-NEXT:    call void @use_intrinsic_workitem_id_x()
823 ; GFX9-NEXT:    ret void
825 ; GFX10-LABEL: define amdgpu_kernel void @call_use_intrinsic_workitem_id_x_cc_kernel(
826 ; GFX10-SAME: ) #[[ATTR5]] {
827 ; GFX10-NEXT:    call void @use_intrinsic_workitem_id_x()
828 ; GFX10-NEXT:    ret void
830   call void @use_intrinsic_workitem_id_x()
831   ret void
834 define amdgpu_kernel void @calls_intrin_ascast_cc_kernel(ptr addrspace(3) %ptr) {
835 ; GFX9-LABEL: define amdgpu_kernel void @calls_intrin_ascast_cc_kernel(
836 ; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR1]] {
837 ; GFX9-NEXT:    [[TMP1:%.*]] = call ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p3(ptr addrspace(3) [[PTR]])
838 ; GFX9-NEXT:    store volatile i32 7, ptr [[TMP1]], align 4
839 ; GFX9-NEXT:    ret void
841 ; GFX10-LABEL: define amdgpu_kernel void @calls_intrin_ascast_cc_kernel(
842 ; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR1]] {
843 ; GFX10-NEXT:    [[TMP1:%.*]] = call ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p3(ptr addrspace(3) [[PTR]])
844 ; GFX10-NEXT:    store volatile i32 7, ptr [[TMP1]], align 4
845 ; GFX10-NEXT:    ret void
847   %1 = call ptr @llvm.amdgcn.addrspacecast.nonnull.p0.p3(ptr addrspace(3) %ptr)
848   store volatile i32 7, ptr %1, align 4
849   ret void
852 define amdgpu_kernel void @call_calls_intrin_ascast_cc_kernel(ptr addrspace(3) %ptr) {
853 ; GFX9-LABEL: define amdgpu_kernel void @call_calls_intrin_ascast_cc_kernel(
854 ; GFX9-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR1]] {
855 ; GFX9-NEXT:    call void @calls_intrin_ascast_cc_kernel(ptr addrspace(3) [[PTR]])
856 ; GFX9-NEXT:    ret void
858 ; GFX10-LABEL: define amdgpu_kernel void @call_calls_intrin_ascast_cc_kernel(
859 ; GFX10-SAME: ptr addrspace(3) [[PTR:%.*]]) #[[ATTR1]] {
860 ; GFX10-NEXT:    call void @calls_intrin_ascast_cc_kernel(ptr addrspace(3) [[PTR]])
861 ; GFX10-NEXT:    ret void
863   call void @calls_intrin_ascast_cc_kernel(ptr addrspace(3) %ptr)
864   ret void
867 define amdgpu_kernel void @with_inline_asm() {
868 ; GFX9-LABEL: define amdgpu_kernel void @with_inline_asm(
869 ; GFX9-SAME: ) #[[ATTR3]] {
870 ; GFX9-NEXT:    call void asm sideeffect "
871 ; GFX9-NEXT:    ret void
873 ; GFX10-LABEL: define amdgpu_kernel void @with_inline_asm(
874 ; GFX10-SAME: ) #[[ATTR3]] {
875 ; GFX10-NEXT:    call void asm sideeffect "
876 ; GFX10-NEXT:    ret void
878   call void asm sideeffect "; use $0", "a"(i32 poison)
879   ret void
883 ; GFX9: attributes #[[ATTR0]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" }
884 ; GFX9: attributes #[[ATTR1]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" }
885 ; GFX9: attributes #[[ATTR2]] = { "target-cpu"="gfx900" "uniform-work-group-size"="false" }
886 ; GFX9: attributes #[[ATTR3]] = { "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" }
887 ; GFX9: attributes #[[ATTR4:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) "target-cpu"="gfx900" }
888 ; GFX9: attributes #[[ATTR5]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" }
890 ; GFX10: attributes #[[ATTR0]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx1010" "uniform-work-group-size"="false" }
891 ; GFX10: attributes #[[ATTR1]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx1010" "uniform-work-group-size"="false" }
892 ; GFX10: attributes #[[ATTR2]] = { "target-cpu"="gfx1010" "uniform-work-group-size"="false" }
893 ; GFX10: attributes #[[ATTR3]] = { "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx1010" "uniform-work-group-size"="false" }
894 ; GFX10: attributes #[[ATTR4:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) "target-cpu"="gfx1010" }
895 ; GFX10: attributes #[[ATTR5]] = { "amdgpu-no-agpr" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx1010" "uniform-work-group-size"="false" }