1 ; RUN: llc -mattr=+code-object-v3 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX700 --check-prefix=NOTES %s
2 ; RUN: llc -mattr=+code-object-v3 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx802 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX802 --check-prefix=NOTES %s
3 ; RUN: llc -mattr=+code-object-v3 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX900 --check-prefix=NOTES %s
4 ; RUN: llc -mattr=+code-object-v3 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -amdgpu-dump-hsa-metadata -amdgpu-verify-hsa-metadata -filetype=obj -o - < %s 2>&1 | FileCheck --check-prefix=PARSER %s
5 ; RUN: llc -mattr=+code-object-v3 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx802 -amdgpu-dump-hsa-metadata -amdgpu-verify-hsa-metadata -filetype=obj -o - < %s 2>&1 | FileCheck --check-prefix=PARSER %s
6 ; RUN: llc -mattr=+code-object-v3 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -amdgpu-dump-hsa-metadata -amdgpu-verify-hsa-metadata -filetype=obj -o - < %s 2>&1 | FileCheck --check-prefix=PARSER %s
8 %struct.A = type { i8, float }
9 %opencl.image1d_t = type opaque
10 %opencl.image2d_t = type opaque
11 %opencl.image3d_t = type opaque
12 %opencl.queue_t = type opaque
13 %opencl.pipe_t = type opaque
14 %struct.B = type { i32 addrspace(1)*}
15 %opencl.clk_event_t = type opaque
17 @__test_block_invoke_kernel_runtime_handle = external addrspace(1) externally_initialized constant i8 addrspace(1)*
20 ; CHECK: amdhsa.kernels:
21 ; CHECK: .symbol: test_char.kd
22 ; CHECK: .name: test_char
23 ; CHECK: .language: OpenCL C
24 ; CHECK: .language_version:
28 ; CHECK-NEXT: - .type_name: char
29 ; CHECK-NEXT: .value_kind: by_value
30 ; CHECK-NEXT: .offset: 0
31 ; CHECK-NEXT: .size: 1
32 ; CHECK-NEXT: .value_type: i8
33 ; CHECK-NEXT: .name: a
34 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
35 ; CHECK-NEXT: .offset: 8
36 ; CHECK-NEXT: .size: 8
37 ; CHECK-NEXT: .value_type: i64
38 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
39 ; CHECK-NEXT: .offset: 16
40 ; CHECK-NEXT: .size: 8
41 ; CHECK-NEXT: .value_type: i64
42 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
43 ; CHECK-NEXT: .offset: 24
44 ; CHECK-NEXT: .size: 8
45 ; CHECK-NEXT: .value_type: i64
46 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
47 ; CHECK-NEXT: .offset: 32
48 ; CHECK-NEXT: .size: 8
49 ; CHECK-NEXT: .value_type: i8
50 ; CHECK-NEXT: .address_space: global
51 ; CHECK-NOT: .value_kind: hidden_default_queue
52 ; CHECK-NOT: .value_kind: hidden_completion_action
53 define amdgpu_kernel void @test_char(i8 %a)
54 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !9
55 !kernel_arg_base_type !9 !kernel_arg_type_qual !4 {
59 ; CHECK: .symbol: test_ushort2.kd
60 ; CHECK: .name: test_ushort2
61 ; CHECK: .language: OpenCL C
62 ; CHECK: .language_version:
66 ; CHECK-NEXT: - .type_name: ushort2
67 ; CHECK-NEXT: .value_kind: by_value
68 ; CHECK-NEXT: .offset: 0
69 ; CHECK-NEXT: .size: 4
70 ; CHECK-NEXT: .value_type: u16
71 ; CHECK-NEXT: .name: a
72 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
73 ; CHECK-NEXT: .offset: 8
74 ; CHECK-NEXT: .size: 8
75 ; CHECK-NEXT: .value_type: i64
76 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
77 ; CHECK-NEXT: .offset: 16
78 ; CHECK-NEXT: .size: 8
79 ; CHECK-NEXT: .value_type: i64
80 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
81 ; CHECK-NEXT: .offset: 24
82 ; CHECK-NEXT: .size: 8
83 ; CHECK-NEXT: .value_type: i64
84 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
85 ; CHECK-NEXT: .offset: 32
86 ; CHECK-NEXT: .size: 8
87 ; CHECK-NEXT: .value_type: i8
88 ; CHECK-NEXT: .address_space: global
89 define amdgpu_kernel void @test_ushort2(<2 x i16> %a)
90 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !10
91 !kernel_arg_base_type !10 !kernel_arg_type_qual !4 {
95 ; CHECK: .symbol: test_int3.kd
96 ; CHECK: .name: test_int3
97 ; CHECK: .language: OpenCL C
98 ; CHECK: .language_version:
102 ; CHECK-NEXT: - .type_name: int3
103 ; CHECK-NEXT: .value_kind: by_value
104 ; CHECK-NEXT: .offset: 0
105 ; CHECK-NEXT: .size: 16
106 ; CHECK-NEXT: .value_type: i32
107 ; CHECK-NEXT: .name: a
108 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
109 ; CHECK-NEXT: .offset: 16
110 ; CHECK-NEXT: .size: 8
111 ; CHECK-NEXT: .value_type: i64
112 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
113 ; CHECK-NEXT: .offset: 24
114 ; CHECK-NEXT: .size: 8
115 ; CHECK-NEXT: .value_type: i64
116 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
117 ; CHECK-NEXT: .offset: 32
118 ; CHECK-NEXT: .size: 8
119 ; CHECK-NEXT: .value_type: i64
120 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
121 ; CHECK-NEXT: .offset: 40
122 ; CHECK-NEXT: .size: 8
123 ; CHECK-NEXT: .value_type: i8
124 ; CHECK-NEXT: .address_space: global
125 define amdgpu_kernel void @test_int3(<3 x i32> %a)
126 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !11
127 !kernel_arg_base_type !11 !kernel_arg_type_qual !4 {
131 ; CHECK: .symbol: test_ulong4.kd
132 ; CHECK: .name: test_ulong4
133 ; CHECK: .language: OpenCL C
134 ; CHECK: .language_version:
138 ; CHECK-NEXT: - .type_name: ulong4
139 ; CHECK-NEXT: .value_kind: by_value
140 ; CHECK-NEXT: .offset: 0
141 ; CHECK-NEXT: .size: 32
142 ; CHECK-NEXT: .value_type: u64
143 ; CHECK-NEXT: .name: a
144 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
145 ; CHECK-NEXT: .offset: 32
146 ; CHECK-NEXT: .size: 8
147 ; CHECK-NEXT: .value_type: i64
148 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
149 ; CHECK-NEXT: .offset: 40
150 ; CHECK-NEXT: .size: 8
151 ; CHECK-NEXT: .value_type: i64
152 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
153 ; CHECK-NEXT: .offset: 48
154 ; CHECK-NEXT: .size: 8
155 ; CHECK-NEXT: .value_type: i64
156 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
157 ; CHECK-NEXT: .offset: 56
158 ; CHECK-NEXT: .size: 8
159 ; CHECK-NEXT: .value_type: i8
160 ; CHECK-NEXT: .address_space: global
161 define amdgpu_kernel void @test_ulong4(<4 x i64> %a)
162 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !12
163 !kernel_arg_base_type !12 !kernel_arg_type_qual !4 {
167 ; CHECK: .symbol: test_half8.kd
168 ; CHECK: .name: test_half8
169 ; CHECK: .language: OpenCL C
170 ; CHECK: .language_version:
174 ; CHECK-NEXT: - .type_name: half8
175 ; CHECK-NEXT: .value_kind: by_value
176 ; CHECK-NEXT: .offset: 0
177 ; CHECK-NEXT: .size: 16
178 ; CHECK-NEXT: .value_type: f16
179 ; CHECK-NEXT: .name: a
180 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
181 ; CHECK-NEXT: .offset: 16
182 ; CHECK-NEXT: .size: 8
183 ; CHECK-NEXT: .value_type: i64
184 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
185 ; CHECK-NEXT: .offset: 24
186 ; CHECK-NEXT: .size: 8
187 ; CHECK-NEXT: .value_type: i64
188 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
189 ; CHECK-NEXT: .offset: 32
190 ; CHECK-NEXT: .size: 8
191 ; CHECK-NEXT: .value_type: i64
192 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
193 ; CHECK-NEXT: .offset: 40
194 ; CHECK-NEXT: .size: 8
195 ; CHECK-NEXT: .value_type: i8
196 ; CHECK-NEXT: .address_space: global
197 define amdgpu_kernel void @test_half8(<8 x half> %a)
198 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !13
199 !kernel_arg_base_type !13 !kernel_arg_type_qual !4 {
203 ; CHECK: .symbol: test_float16.kd
204 ; CHECK: .name: test_float16
205 ; CHECK: .language: OpenCL C
206 ; CHECK: .language_version:
210 ; CHECK-NEXT: - .type_name: float16
211 ; CHECK-NEXT: .value_kind: by_value
212 ; CHECK-NEXT: .offset: 0
213 ; CHECK-NEXT: .size: 64
214 ; CHECK-NEXT: .value_type: f32
215 ; CHECK-NEXT: .name: a
216 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
217 ; CHECK-NEXT: .offset: 64
218 ; CHECK-NEXT: .size: 8
219 ; CHECK-NEXT: .value_type: i64
220 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
221 ; CHECK-NEXT: .offset: 72
222 ; CHECK-NEXT: .size: 8
223 ; CHECK-NEXT: .value_type: i64
224 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
225 ; CHECK-NEXT: .offset: 80
226 ; CHECK-NEXT: .size: 8
227 ; CHECK-NEXT: .value_type: i64
228 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
229 ; CHECK-NEXT: .offset: 88
230 ; CHECK-NEXT: .size: 8
231 ; CHECK-NEXT: .value_type: i8
232 ; CHECK-NEXT: .address_space: global
233 define amdgpu_kernel void @test_float16(<16 x float> %a)
234 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !14
235 !kernel_arg_base_type !14 !kernel_arg_type_qual !4 {
239 ; CHECK: .symbol: test_double16.kd
240 ; CHECK: .name: test_double16
241 ; CHECK: .language: OpenCL C
242 ; CHECK: .language_version:
246 ; CHECK-NEXT: - .type_name: double16
247 ; CHECK-NEXT: .value_kind: by_value
248 ; CHECK-NEXT: .offset: 0
249 ; CHECK-NEXT: .size: 128
250 ; CHECK-NEXT: .value_type: f64
251 ; CHECK-NEXT: .name: a
252 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
253 ; CHECK-NEXT: .offset: 128
254 ; CHECK-NEXT: .size: 8
255 ; CHECK-NEXT: .value_type: i64
256 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
257 ; CHECK-NEXT: .offset: 136
258 ; CHECK-NEXT: .size: 8
259 ; CHECK-NEXT: .value_type: i64
260 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
261 ; CHECK-NEXT: .offset: 144
262 ; CHECK-NEXT: .size: 8
263 ; CHECK-NEXT: .value_type: i64
264 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
265 ; CHECK-NEXT: .offset: 152
266 ; CHECK-NEXT: .size: 8
267 ; CHECK-NEXT: .value_type: i8
268 ; CHECK-NEXT: .address_space: global
269 define amdgpu_kernel void @test_double16(<16 x double> %a)
270 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !15
271 !kernel_arg_base_type !15 !kernel_arg_type_qual !4 {
275 ; CHECK: .symbol: test_pointer.kd
276 ; CHECK: .name: test_pointer
277 ; CHECK: .language: OpenCL C
278 ; CHECK: .language_version:
282 ; CHECK-NEXT: - .type_name: 'int addrspace(5)*'
283 ; CHECK-NEXT: .value_kind: global_buffer
284 ; CHECK-NEXT: .name: a
285 ; CHECK-NEXT: .offset: 0
286 ; CHECK-NEXT: .size: 8
287 ; CHECK-NEXT: .value_type: i32
288 ; CHECK-NEXT: .address_space: global
289 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
290 ; CHECK-NEXT: .offset: 8
291 ; CHECK-NEXT: .size: 8
292 ; CHECK-NEXT: .value_type: i64
293 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
294 ; CHECK-NEXT: .offset: 16
295 ; CHECK-NEXT: .size: 8
296 ; CHECK-NEXT: .value_type: i64
297 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
298 ; CHECK-NEXT: .offset: 24
299 ; CHECK-NEXT: .size: 8
300 ; CHECK-NEXT: .value_type: i64
301 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
302 ; CHECK-NEXT: .offset: 32
303 ; CHECK-NEXT: .size: 8
304 ; CHECK-NEXT: .value_type: i8
305 ; CHECK-NEXT: .address_space: global
306 define amdgpu_kernel void @test_pointer(i32 addrspace(1)* %a)
307 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !16
308 !kernel_arg_base_type !16 !kernel_arg_type_qual !4 {
312 ; CHECK: .symbol: test_image.kd
313 ; CHECK: .name: test_image
314 ; CHECK: .language: OpenCL C
315 ; CHECK: .language_version:
319 ; CHECK-NEXT: - .type_name: image2d_t
320 ; CHECK-NEXT: .value_kind: image
321 ; CHECK-NEXT: .name: a
322 ; CHECK-NEXT: .offset: 0
323 ; CHECK-NEXT: .size: 8
324 ; CHECK-NEXT: .value_type: struct
325 ; CHECK-NEXT: .address_space: global
326 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
327 ; CHECK-NEXT: .offset: 8
328 ; CHECK-NEXT: .size: 8
329 ; CHECK-NEXT: .value_type: i64
330 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
331 ; CHECK-NEXT: .offset: 16
332 ; CHECK-NEXT: .size: 8
333 ; CHECK-NEXT: .value_type: i64
334 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
335 ; CHECK-NEXT: .offset: 24
336 ; CHECK-NEXT: .size: 8
337 ; CHECK-NEXT: .value_type: i64
338 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
339 ; CHECK-NEXT: .offset: 32
340 ; CHECK-NEXT: .size: 8
341 ; CHECK-NEXT: .value_type: i8
342 ; CHECK-NEXT: .address_space: global
343 define amdgpu_kernel void @test_image(%opencl.image2d_t addrspace(1)* %a)
344 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !17
345 !kernel_arg_base_type !17 !kernel_arg_type_qual !4 {
349 ; CHECK: .symbol: test_sampler.kd
350 ; CHECK: .name: test_sampler
351 ; CHECK: .language: OpenCL C
352 ; CHECK: .language_version:
356 ; CHECK-NEXT: - .type_name: sampler_t
357 ; CHECK-NEXT: .value_kind: sampler
358 ; CHECK-NEXT: .offset: 0
359 ; CHECK-NEXT: .size: 4
360 ; CHECK-NEXT: .value_type: i32
361 ; CHECK-NEXT: .name: a
362 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
363 ; CHECK-NEXT: .offset: 8
364 ; CHECK-NEXT: .size: 8
365 ; CHECK-NEXT: .value_type: i64
366 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
367 ; CHECK-NEXT: .offset: 16
368 ; CHECK-NEXT: .size: 8
369 ; CHECK-NEXT: .value_type: i64
370 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
371 ; CHECK-NEXT: .offset: 24
372 ; CHECK-NEXT: .size: 8
373 ; CHECK-NEXT: .value_type: i64
374 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
375 ; CHECK-NEXT: .offset: 32
376 ; CHECK-NEXT: .size: 8
377 ; CHECK-NEXT: .value_type: i8
378 ; CHECK-NEXT: .address_space: global
379 define amdgpu_kernel void @test_sampler(i32 %a)
380 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !18
381 !kernel_arg_base_type !18 !kernel_arg_type_qual !4 {
385 ; CHECK: .symbol: test_queue.kd
386 ; CHECK: .name: test_queue
387 ; CHECK: .language: OpenCL C
388 ; CHECK: .language_version:
392 ; CHECK-NEXT: - .type_name: queue_t
393 ; CHECK-NEXT: .value_kind: queue
394 ; CHECK-NEXT: .name: a
395 ; CHECK-NEXT: .offset: 0
396 ; CHECK-NEXT: .size: 8
397 ; CHECK-NEXT: .value_type: struct
398 ; CHECK-NEXT: .address_space: global
399 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
400 ; CHECK-NEXT: .offset: 8
401 ; CHECK-NEXT: .size: 8
402 ; CHECK-NEXT: .value_type: i64
403 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
404 ; CHECK-NEXT: .offset: 16
405 ; CHECK-NEXT: .size: 8
406 ; CHECK-NEXT: .value_type: i64
407 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
408 ; CHECK-NEXT: .offset: 24
409 ; CHECK-NEXT: .size: 8
410 ; CHECK-NEXT: .value_type: i64
411 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
412 ; CHECK-NEXT: .offset: 32
413 ; CHECK-NEXT: .size: 8
414 ; CHECK-NEXT: .value_type: i8
415 ; CHECK-NEXT: .address_space: global
416 define amdgpu_kernel void @test_queue(%opencl.queue_t addrspace(1)* %a)
417 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !19
418 !kernel_arg_base_type !19 !kernel_arg_type_qual !4 {
422 ; CHECK: .symbol: test_struct.kd
423 ; CHECK: .name: test_struct
424 ; CHECK: .language: OpenCL C
425 ; CHECK: .language_version:
429 ; CHECK-NEXT: - .type_name: struct A
430 ; CHECK-NEXT: .value_kind: global_buffer
431 ; CHECK-NEXT: .name: a
432 ; CHECK-NEXT: .offset: 0
433 ; CHECK-NEXT: .size: 4
434 ; CHECK-NEXT: .value_type: struct
435 ; CHECK-NEXT: .address_space: private
436 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
437 ; CHECK-NEXT: .offset: 8
438 ; CHECK-NEXT: .size: 8
439 ; CHECK-NEXT: .value_type: i64
440 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
441 ; CHECK-NEXT: .offset: 16
442 ; CHECK-NEXT: .size: 8
443 ; CHECK-NEXT: .value_type: i64
444 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
445 ; CHECK-NEXT: .offset: 24
446 ; CHECK-NEXT: .size: 8
447 ; CHECK-NEXT: .value_type: i64
448 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
449 ; CHECK-NEXT: .offset: 32
450 ; CHECK-NEXT: .size: 8
451 ; CHECK-NEXT: .value_type: i8
452 ; CHECK-NEXT: .address_space: global
453 define amdgpu_kernel void @test_struct(%struct.A addrspace(5)* byval %a)
454 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !20
455 !kernel_arg_base_type !20 !kernel_arg_type_qual !4 {
459 ; CHECK: .symbol: test_i128.kd
460 ; CHECK: .name: test_i128
461 ; CHECK: .language: OpenCL C
462 ; CHECK: .language_version:
466 ; CHECK-NEXT: - .type_name: i128
467 ; CHECK-NEXT: .value_kind: by_value
468 ; CHECK-NEXT: .offset: 0
469 ; CHECK-NEXT: .size: 16
470 ; CHECK-NEXT: .value_type: struct
471 ; CHECK-NEXT: .name: a
472 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
473 ; CHECK-NEXT: .offset: 16
474 ; CHECK-NEXT: .size: 8
475 ; CHECK-NEXT: .value_type: i64
476 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
477 ; CHECK-NEXT: .offset: 24
478 ; CHECK-NEXT: .size: 8
479 ; CHECK-NEXT: .value_type: i64
480 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
481 ; CHECK-NEXT: .offset: 32
482 ; CHECK-NEXT: .size: 8
483 ; CHECK-NEXT: .value_type: i64
484 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
485 ; CHECK-NEXT: .offset: 40
486 ; CHECK-NEXT: .size: 8
487 ; CHECK-NEXT: .value_type: i8
488 ; CHECK-NEXT: .address_space: global
489 define amdgpu_kernel void @test_i128(i128 %a)
490 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !21
491 !kernel_arg_base_type !21 !kernel_arg_type_qual !4 {
495 ; CHECK: .symbol: test_multi_arg.kd
496 ; CHECK: .name: test_multi_arg
497 ; CHECK: .language: OpenCL C
498 ; CHECK: .language_version:
502 ; CHECK-NEXT: - .type_name: int
503 ; CHECK-NEXT: .value_kind: by_value
504 ; CHECK-NEXT: .offset: 0
505 ; CHECK-NEXT: .size: 4
506 ; CHECK-NEXT: .value_type: i32
507 ; CHECK-NEXT: .name: a
508 ; CHECK-NEXT: - .type_name: short2
509 ; CHECK-NEXT: .value_kind: by_value
510 ; CHECK-NEXT: .offset: 4
511 ; CHECK-NEXT: .size: 4
512 ; CHECK-NEXT: .value_type: i16
513 ; CHECK-NEXT: .name: b
514 ; CHECK-NEXT: - .type_name: char3
515 ; CHECK-NEXT: .value_kind: by_value
516 ; CHECK-NEXT: .offset: 8
517 ; CHECK-NEXT: .size: 4
518 ; CHECK-NEXT: .value_type: i8
519 ; CHECK-NEXT: .name: c
520 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
521 ; CHECK-NEXT: .offset: 16
522 ; CHECK-NEXT: .size: 8
523 ; CHECK-NEXT: .value_type: i64
524 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
525 ; CHECK-NEXT: .offset: 24
526 ; CHECK-NEXT: .size: 8
527 ; CHECK-NEXT: .value_type: i64
528 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
529 ; CHECK-NEXT: .offset: 32
530 ; CHECK-NEXT: .size: 8
531 ; CHECK-NEXT: .value_type: i64
532 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
533 ; CHECK-NEXT: .offset: 40
534 ; CHECK-NEXT: .size: 8
535 ; CHECK-NEXT: .value_type: i8
536 ; CHECK-NEXT: .address_space: global
537 define amdgpu_kernel void @test_multi_arg(i32 %a, <2 x i16> %b, <3 x i8> %c)
538 !kernel_arg_addr_space !22 !kernel_arg_access_qual !23 !kernel_arg_type !24
539 !kernel_arg_base_type !24 !kernel_arg_type_qual !25 {
543 ; CHECK: .symbol: test_addr_space.kd
544 ; CHECK: .name: test_addr_space
545 ; CHECK: .language: OpenCL C
546 ; CHECK: .language_version:
550 ; CHECK-NEXT: - .type_name: 'int addrspace(5)*'
551 ; CHECK-NEXT: .value_kind: global_buffer
552 ; CHECK-NEXT: .name: g
553 ; CHECK-NEXT: .offset: 0
554 ; CHECK-NEXT: .size: 8
555 ; CHECK-NEXT: .value_type: i32
556 ; CHECK-NEXT: .address_space: global
557 ; CHECK-NEXT: - .type_name: 'int addrspace(5)*'
558 ; CHECK-NEXT: .value_kind: global_buffer
559 ; CHECK-NEXT: .name: c
560 ; CHECK-NEXT: .offset: 8
561 ; CHECK-NEXT: .size: 8
562 ; CHECK-NEXT: .value_type: i32
563 ; CHECK-NEXT: .address_space: constant
564 ; CHECK-NEXT: - .type_name: 'int addrspace(5)*'
565 ; CHECK-NEXT: .value_kind: dynamic_shared_pointer
566 ; CHECK-NEXT: .name: l
567 ; CHECK-NEXT: .offset: 16
568 ; CHECK-NEXT: .size: 4
569 ; CHECK-NEXT: .value_type: i32
570 ; CHECK-NEXT: .pointee_align: 4
571 ; CHECK-NEXT: .address_space: local
572 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
573 ; CHECK-NEXT: .offset: 24
574 ; CHECK-NEXT: .size: 8
575 ; CHECK-NEXT: .value_type: i64
576 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
577 ; CHECK-NEXT: .offset: 32
578 ; CHECK-NEXT: .size: 8
579 ; CHECK-NEXT: .value_type: i64
580 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
581 ; CHECK-NEXT: .offset: 40
582 ; CHECK-NEXT: .size: 8
583 ; CHECK-NEXT: .value_type: i64
584 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
585 ; CHECK-NEXT: .offset: 48
586 ; CHECK-NEXT: .size: 8
587 ; CHECK-NEXT: .value_type: i8
588 ; CHECK-NEXT: .address_space: global
589 define amdgpu_kernel void @test_addr_space(i32 addrspace(1)* %g,
590 i32 addrspace(4)* %c,
591 i32 addrspace(3)* %l)
592 !kernel_arg_addr_space !50 !kernel_arg_access_qual !23 !kernel_arg_type !51
593 !kernel_arg_base_type !51 !kernel_arg_type_qual !25 {
597 ; CHECK: .symbol: test_type_qual.kd
598 ; CHECK: .name: test_type_qual
599 ; CHECK: .language: OpenCL C
600 ; CHECK: .language_version:
604 ; CHECK-NEXT: - .type_name: 'int addrspace(5)*'
605 ; CHECK-NEXT: .value_kind: global_buffer
606 ; CHECK-NEXT: .name: a
607 ; CHECK-NEXT: .offset: 0
608 ; CHECK-NEXT: .size: 8
609 ; CHECK-NEXT: .is_volatile: true
610 ; CHECK-NEXT: .value_type: i32
611 ; CHECK-NEXT: .address_space: global
612 ; CHECK-NEXT: - .type_name: 'int addrspace(5)*'
613 ; CHECK-NEXT: .value_kind: global_buffer
614 ; CHECK-NEXT: .name: b
615 ; CHECK-NEXT: .is_const: true
616 ; CHECK-NEXT: .offset: 8
617 ; CHECK-NEXT: .size: 8
618 ; CHECK-NEXT: .is_restrict: true
619 ; CHECK-NEXT: .value_type: i32
620 ; CHECK-NEXT: .address_space: global
621 ; CHECK-NEXT: - .type_name: 'int addrspace(5)*'
622 ; CHECK-NEXT: .value_kind: pipe
623 ; CHECK-NEXT: .name: c
624 ; CHECK-NEXT: .offset: 16
625 ; CHECK-NEXT: .is_pipe: true
626 ; CHECK-NEXT: .size: 8
627 ; CHECK-NEXT: .value_type: struct
628 ; CHECK-NEXT: .address_space: global
629 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
630 ; CHECK-NEXT: .offset: 24
631 ; CHECK-NEXT: .size: 8
632 ; CHECK-NEXT: .value_type: i64
633 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
634 ; CHECK-NEXT: .offset: 32
635 ; CHECK-NEXT: .size: 8
636 ; CHECK-NEXT: .value_type: i64
637 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
638 ; CHECK-NEXT: .offset: 40
639 ; CHECK-NEXT: .size: 8
640 ; CHECK-NEXT: .value_type: i64
641 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
642 ; CHECK-NEXT: .offset: 48
643 ; CHECK-NEXT: .size: 8
644 ; CHECK-NEXT: .value_type: i8
645 ; CHECK-NEXT: .address_space: global
646 define amdgpu_kernel void @test_type_qual(i32 addrspace(1)* %a,
647 i32 addrspace(1)* %b,
648 %opencl.pipe_t addrspace(1)* %c)
649 !kernel_arg_addr_space !22 !kernel_arg_access_qual !23 !kernel_arg_type !51
650 !kernel_arg_base_type !51 !kernel_arg_type_qual !70 {
654 ; CHECK: .symbol: test_access_qual.kd
655 ; CHECK: .name: test_access_qual
656 ; CHECK: .language: OpenCL C
657 ; CHECK: .language_version:
661 ; CHECK-NEXT: - .type_name: image1d_t
662 ; CHECK-NEXT: .value_kind: image
663 ; CHECK-NEXT: .name: ro
664 ; CHECK-NEXT: .access: read_only
665 ; CHECK-NEXT: .offset: 0
666 ; CHECK-NEXT: .size: 8
667 ; CHECK-NEXT: .value_type: struct
668 ; CHECK-NEXT: .address_space: global
669 ; CHECK-NEXT: - .type_name: image2d_t
670 ; CHECK-NEXT: .value_kind: image
671 ; CHECK-NEXT: .name: wo
672 ; CHECK-NEXT: .access: write_only
673 ; CHECK-NEXT: .offset: 8
674 ; CHECK-NEXT: .size: 8
675 ; CHECK-NEXT: .value_type: struct
676 ; CHECK-NEXT: .address_space: global
677 ; CHECK-NEXT: - .type_name: image3d_t
678 ; CHECK-NEXT: .value_kind: image
679 ; CHECK-NEXT: .name: rw
680 ; CHECK-NEXT: .access: read_write
681 ; CHECK-NEXT: .offset: 16
682 ; CHECK-NEXT: .size: 8
683 ; CHECK-NEXT: .value_type: struct
684 ; CHECK-NEXT: .address_space: global
685 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
686 ; CHECK-NEXT: .offset: 24
687 ; CHECK-NEXT: .size: 8
688 ; CHECK-NEXT: .value_type: i64
689 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
690 ; CHECK-NEXT: .offset: 32
691 ; CHECK-NEXT: .size: 8
692 ; CHECK-NEXT: .value_type: i64
693 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
694 ; CHECK-NEXT: .offset: 40
695 ; CHECK-NEXT: .size: 8
696 ; CHECK-NEXT: .value_type: i64
697 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
698 ; CHECK-NEXT: .offset: 48
699 ; CHECK-NEXT: .size: 8
700 ; CHECK-NEXT: .value_type: i8
701 ; CHECK-NEXT: .address_space: global
702 define amdgpu_kernel void @test_access_qual(%opencl.image1d_t addrspace(1)* %ro,
703 %opencl.image2d_t addrspace(1)* %wo,
704 %opencl.image3d_t addrspace(1)* %rw)
705 !kernel_arg_addr_space !60 !kernel_arg_access_qual !61 !kernel_arg_type !62
706 !kernel_arg_base_type !62 !kernel_arg_type_qual !25 {
710 ; CHECK: .symbol: test_vec_type_hint_half.kd
711 ; CHECK: .name: test_vec_type_hint_half
712 ; CHECK: .language: OpenCL C
713 ; CHECK: .language_version:
717 ; CHECK-NEXT: - .type_name: int
718 ; CHECK-NEXT: .value_kind: by_value
719 ; CHECK-NEXT: .offset: 0
720 ; CHECK-NEXT: .size: 4
721 ; CHECK-NEXT: .value_type: i32
722 ; CHECK-NEXT: .name: a
723 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
724 ; CHECK-NEXT: .offset: 8
725 ; CHECK-NEXT: .size: 8
726 ; CHECK-NEXT: .value_type: i64
727 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
728 ; CHECK-NEXT: .offset: 16
729 ; CHECK-NEXT: .size: 8
730 ; CHECK-NEXT: .value_type: i64
731 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
732 ; CHECK-NEXT: .offset: 24
733 ; CHECK-NEXT: .size: 8
734 ; CHECK-NEXT: .value_type: i64
735 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
736 ; CHECK-NEXT: .offset: 32
737 ; CHECK-NEXT: .size: 8
738 ; CHECK-NEXT: .value_type: i8
739 ; CHECK-NEXT: .address_space: global
740 ; CHECK: .vec_type_hint: half
741 define amdgpu_kernel void @test_vec_type_hint_half(i32 %a)
742 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
743 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !26 {
747 ; CHECK: .symbol: test_vec_type_hint_float.kd
748 ; CHECK: .name: test_vec_type_hint_float
749 ; CHECK: .language: OpenCL C
750 ; CHECK: .language_version:
754 ; CHECK-NEXT: - .type_name: int
755 ; CHECK-NEXT: .value_kind: by_value
756 ; CHECK-NEXT: .offset: 0
757 ; CHECK-NEXT: .size: 4
758 ; CHECK-NEXT: .value_type: i32
759 ; CHECK-NEXT: .name: a
760 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
761 ; CHECK-NEXT: .offset: 8
762 ; CHECK-NEXT: .size: 8
763 ; CHECK-NEXT: .value_type: i64
764 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
765 ; CHECK-NEXT: .offset: 16
766 ; CHECK-NEXT: .size: 8
767 ; CHECK-NEXT: .value_type: i64
768 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
769 ; CHECK-NEXT: .offset: 24
770 ; CHECK-NEXT: .size: 8
771 ; CHECK-NEXT: .value_type: i64
772 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
773 ; CHECK-NEXT: .offset: 32
774 ; CHECK-NEXT: .size: 8
775 ; CHECK-NEXT: .value_type: i8
776 ; CHECK-NEXT: .address_space: global
777 ; CHECK: .vec_type_hint: float
778 define amdgpu_kernel void @test_vec_type_hint_float(i32 %a)
779 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
780 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !27 {
784 ; CHECK: .symbol: test_vec_type_hint_double.kd
785 ; CHECK: .name: test_vec_type_hint_double
786 ; CHECK: .language: OpenCL C
787 ; CHECK: .language_version:
791 ; CHECK-NEXT: - .type_name: int
792 ; CHECK-NEXT: .value_kind: by_value
793 ; CHECK-NEXT: .offset: 0
794 ; CHECK-NEXT: .size: 4
795 ; CHECK-NEXT: .value_type: i32
796 ; CHECK-NEXT: .name: a
797 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
798 ; CHECK-NEXT: .offset: 8
799 ; CHECK-NEXT: .size: 8
800 ; CHECK-NEXT: .value_type: i64
801 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
802 ; CHECK-NEXT: .offset: 16
803 ; CHECK-NEXT: .size: 8
804 ; CHECK-NEXT: .value_type: i64
805 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
806 ; CHECK-NEXT: .offset: 24
807 ; CHECK-NEXT: .size: 8
808 ; CHECK-NEXT: .value_type: i64
809 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
810 ; CHECK-NEXT: .offset: 32
811 ; CHECK-NEXT: .size: 8
812 ; CHECK-NEXT: .value_type: i8
813 ; CHECK-NEXT: .address_space: global
814 ; CHECK: .vec_type_hint: double
815 define amdgpu_kernel void @test_vec_type_hint_double(i32 %a)
816 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
817 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !28 {
821 ; CHECK: .symbol: test_vec_type_hint_char.kd
822 ; CHECK: .name: test_vec_type_hint_char
823 ; CHECK: .language: OpenCL C
824 ; CHECK: .language_version:
828 ; CHECK-NEXT: - .type_name: int
829 ; CHECK-NEXT: .value_kind: by_value
830 ; CHECK-NEXT: .offset: 0
831 ; CHECK-NEXT: .size: 4
832 ; CHECK-NEXT: .value_type: i32
833 ; CHECK-NEXT: .name: a
834 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
835 ; CHECK-NEXT: .offset: 8
836 ; CHECK-NEXT: .size: 8
837 ; CHECK-NEXT: .value_type: i64
838 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
839 ; CHECK-NEXT: .offset: 16
840 ; CHECK-NEXT: .size: 8
841 ; CHECK-NEXT: .value_type: i64
842 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
843 ; CHECK-NEXT: .offset: 24
844 ; CHECK-NEXT: .size: 8
845 ; CHECK-NEXT: .value_type: i64
846 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
847 ; CHECK-NEXT: .offset: 32
848 ; CHECK-NEXT: .size: 8
849 ; CHECK-NEXT: .value_type: i8
850 ; CHECK-NEXT: .address_space: global
851 ; CHECK: .vec_type_hint: char
852 define amdgpu_kernel void @test_vec_type_hint_char(i32 %a)
853 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
854 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !29 {
858 ; CHECK: .symbol: test_vec_type_hint_short.kd
859 ; CHECK: .name: test_vec_type_hint_short
860 ; CHECK: .language: OpenCL C
861 ; CHECK: .language_version:
865 ; CHECK-NEXT: - .type_name: int
866 ; CHECK-NEXT: .value_kind: by_value
867 ; CHECK-NEXT: .offset: 0
868 ; CHECK-NEXT: .size: 4
869 ; CHECK-NEXT: .value_type: i32
870 ; CHECK-NEXT: .name: a
871 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
872 ; CHECK-NEXT: .offset: 8
873 ; CHECK-NEXT: .size: 8
874 ; CHECK-NEXT: .value_type: i64
875 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
876 ; CHECK-NEXT: .offset: 16
877 ; CHECK-NEXT: .size: 8
878 ; CHECK-NEXT: .value_type: i64
879 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
880 ; CHECK-NEXT: .offset: 24
881 ; CHECK-NEXT: .size: 8
882 ; CHECK-NEXT: .value_type: i64
883 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
884 ; CHECK-NEXT: .offset: 32
885 ; CHECK-NEXT: .size: 8
886 ; CHECK-NEXT: .value_type: i8
887 ; CHECK-NEXT: .address_space: global
888 ; CHECK: .vec_type_hint: short
889 define amdgpu_kernel void @test_vec_type_hint_short(i32 %a)
890 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
891 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !30 {
895 ; CHECK: .symbol: test_vec_type_hint_long.kd
896 ; CHECK: .name: test_vec_type_hint_long
897 ; CHECK: .language: OpenCL C
898 ; CHECK: .language_version:
902 ; CHECK-NEXT: - .type_name: int
903 ; CHECK-NEXT: .value_kind: by_value
904 ; CHECK-NEXT: .offset: 0
905 ; CHECK-NEXT: .size: 4
906 ; CHECK-NEXT: .value_type: i32
907 ; CHECK-NEXT: .name: a
908 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
909 ; CHECK-NEXT: .offset: 8
910 ; CHECK-NEXT: .size: 8
911 ; CHECK-NEXT: .value_type: i64
912 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
913 ; CHECK-NEXT: .offset: 16
914 ; CHECK-NEXT: .size: 8
915 ; CHECK-NEXT: .value_type: i64
916 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
917 ; CHECK-NEXT: .offset: 24
918 ; CHECK-NEXT: .size: 8
919 ; CHECK-NEXT: .value_type: i64
920 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
921 ; CHECK-NEXT: .offset: 32
922 ; CHECK-NEXT: .size: 8
923 ; CHECK-NEXT: .value_type: i8
924 ; CHECK-NEXT: .address_space: global
925 ; CHECK: .vec_type_hint: long
926 define amdgpu_kernel void @test_vec_type_hint_long(i32 %a)
927 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
928 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !31 {
932 ; CHECK: .symbol: test_vec_type_hint_unknown.kd
933 ; CHECK: .name: test_vec_type_hint_unknown
934 ; CHECK: .language: OpenCL C
935 ; CHECK: .language_version:
939 ; CHECK-NEXT: - .type_name: int
940 ; CHECK-NEXT: .value_kind: by_value
941 ; CHECK-NEXT: .offset: 0
942 ; CHECK-NEXT: .size: 4
943 ; CHECK-NEXT: .value_type: i32
944 ; CHECK-NEXT: .name: a
945 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
946 ; CHECK-NEXT: .offset: 8
947 ; CHECK-NEXT: .size: 8
948 ; CHECK-NEXT: .value_type: i64
949 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
950 ; CHECK-NEXT: .offset: 16
951 ; CHECK-NEXT: .size: 8
952 ; CHECK-NEXT: .value_type: i64
953 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
954 ; CHECK-NEXT: .offset: 24
955 ; CHECK-NEXT: .size: 8
956 ; CHECK-NEXT: .value_type: i64
957 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
958 ; CHECK-NEXT: .offset: 32
959 ; CHECK-NEXT: .size: 8
960 ; CHECK-NEXT: .value_type: i8
961 ; CHECK-NEXT: .address_space: global
962 ; CHECK: .vec_type_hint: unknown
963 define amdgpu_kernel void @test_vec_type_hint_unknown(i32 %a)
964 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
965 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !32 {
969 ; CHECK: .reqd_workgroup_size:
973 ; CHECK: .symbol: test_reqd_wgs_vec_type_hint.kd
974 ; CHECK: .name: test_reqd_wgs_vec_type_hint
975 ; CHECK: .language: OpenCL C
976 ; CHECK: .language_version:
980 ; CHECK-NEXT: - .type_name: int
981 ; CHECK-NEXT: .value_kind: by_value
982 ; CHECK-NEXT: .offset: 0
983 ; CHECK-NEXT: .size: 4
984 ; CHECK-NEXT: .value_type: i32
985 ; CHECK-NEXT: .name: a
986 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
987 ; CHECK-NEXT: .offset: 8
988 ; CHECK-NEXT: .size: 8
989 ; CHECK-NEXT: .value_type: i64
990 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
991 ; CHECK-NEXT: .offset: 16
992 ; CHECK-NEXT: .size: 8
993 ; CHECK-NEXT: .value_type: i64
994 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
995 ; CHECK-NEXT: .offset: 24
996 ; CHECK-NEXT: .size: 8
997 ; CHECK-NEXT: .value_type: i64
998 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
999 ; CHECK-NEXT: .offset: 32
1000 ; CHECK-NEXT: .size: 8
1001 ; CHECK-NEXT: .value_type: i8
1002 ; CHECK-NEXT: .address_space: global
1003 ; CHECK: .vec_type_hint: int
1004 define amdgpu_kernel void @test_reqd_wgs_vec_type_hint(i32 %a)
1005 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
1006 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !5
1007 !reqd_work_group_size !6 {
1011 ; CHECK: .symbol: test_wgs_hint_vec_type_hint.kd
1012 ; CHECK: .workgroup_size_hint:
1016 ; CHECK: .name: test_wgs_hint_vec_type_hint
1017 ; CHECK: .language: OpenCL C
1018 ; CHECK: .language_version:
1022 ; CHECK-NEXT: - .type_name: int
1023 ; CHECK-NEXT: .value_kind: by_value
1024 ; CHECK-NEXT: .offset: 0
1025 ; CHECK-NEXT: .size: 4
1026 ; CHECK-NEXT: .value_type: i32
1027 ; CHECK-NEXT: .name: a
1028 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
1029 ; CHECK-NEXT: .offset: 8
1030 ; CHECK-NEXT: .size: 8
1031 ; CHECK-NEXT: .value_type: i64
1032 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
1033 ; CHECK-NEXT: .offset: 16
1034 ; CHECK-NEXT: .size: 8
1035 ; CHECK-NEXT: .value_type: i64
1036 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
1037 ; CHECK-NEXT: .offset: 24
1038 ; CHECK-NEXT: .size: 8
1039 ; CHECK-NEXT: .value_type: i64
1040 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
1041 ; CHECK-NEXT: .offset: 32
1042 ; CHECK-NEXT: .size: 8
1043 ; CHECK-NEXT: .value_type: i8
1044 ; CHECK-NEXT: .address_space: global
1045 ; CHECK: .vec_type_hint: uint4
1046 define amdgpu_kernel void @test_wgs_hint_vec_type_hint(i32 %a)
1047 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
1048 !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !7
1049 !work_group_size_hint !8 {
1053 ; CHECK: .symbol: test_arg_ptr_to_ptr.kd
1054 ; CHECK: .name: test_arg_ptr_to_ptr
1055 ; CHECK: .language: OpenCL C
1056 ; CHECK: .language_version:
1060 ; CHECK-NEXT: - .type_name: 'int addrspace(5)* addrspace(5)*'
1061 ; CHECK-NEXT: .value_kind: global_buffer
1062 ; CHECK-NEXT: .name: a
1063 ; CHECK-NEXT: .offset: 0
1064 ; CHECK-NEXT: .size: 8
1065 ; CHECK-NEXT: .value_type: i32
1066 ; CHECK-NEXT: .address_space: global
1067 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
1068 ; CHECK-NEXT: .offset: 8
1069 ; CHECK-NEXT: .size: 8
1070 ; CHECK-NEXT: .value_type: i64
1071 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
1072 ; CHECK-NEXT: .offset: 16
1073 ; CHECK-NEXT: .size: 8
1074 ; CHECK-NEXT: .value_type: i64
1075 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
1076 ; CHECK-NEXT: .offset: 24
1077 ; CHECK-NEXT: .size: 8
1078 ; CHECK-NEXT: .value_type: i64
1079 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
1080 ; CHECK-NEXT: .offset: 32
1081 ; CHECK-NEXT: .size: 8
1082 ; CHECK-NEXT: .value_type: i8
1083 ; CHECK-NEXT: .address_space: global
1084 define amdgpu_kernel void @test_arg_ptr_to_ptr(i32 addrspace(5)* addrspace(1)* %a)
1085 !kernel_arg_addr_space !81 !kernel_arg_access_qual !2 !kernel_arg_type !80
1086 !kernel_arg_base_type !80 !kernel_arg_type_qual !4 {
1090 ; CHECK: .symbol: test_arg_struct_contains_ptr.kd
1091 ; CHECK: .name: test_arg_struct_contains_ptr
1092 ; CHECK: .language: OpenCL C
1093 ; CHECK: .language_version:
1097 ; CHECK-NEXT: - .type_name: struct B
1098 ; CHECK-NEXT: .value_kind: global_buffer
1099 ; CHECK-NEXT: .name: a
1100 ; CHECK-NEXT: .offset: 0
1101 ; CHECK-NEXT: .size: 4
1102 ; CHECK-NEXT: .value_type: struct
1103 ; CHECK-NEXT: .address_space: private
1104 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
1105 ; CHECK-NEXT: .offset: 8
1106 ; CHECK-NEXT: .size: 8
1107 ; CHECK-NEXT: .value_type: i64
1108 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
1109 ; CHECK-NEXT: .offset: 16
1110 ; CHECK-NEXT: .size: 8
1111 ; CHECK-NEXT: .value_type: i64
1112 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
1113 ; CHECK-NEXT: .offset: 24
1114 ; CHECK-NEXT: .size: 8
1115 ; CHECK-NEXT: .value_type: i64
1116 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
1117 ; CHECK-NEXT: .offset: 32
1118 ; CHECK-NEXT: .size: 8
1119 ; CHECK-NEXT: .value_type: i8
1120 ; CHECK-NEXT: .address_space: global
1121 define amdgpu_kernel void @test_arg_struct_contains_ptr(%struct.B addrspace(5)* byval %a)
1122 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !82
1123 !kernel_arg_base_type !82 !kernel_arg_type_qual !4 {
1127 ; CHECK: .symbol: test_arg_vector_of_ptr.kd
1128 ; CHECK: .name: test_arg_vector_of_ptr
1129 ; CHECK: .language: OpenCL C
1130 ; CHECK: .language_version:
1134 ; CHECK-NEXT: - .type_name: 'global int addrspace(5)* __attribute__((ext_vector_type(2)))'
1135 ; CHECK-NEXT: .value_kind: by_value
1136 ; CHECK-NEXT: .offset: 0
1137 ; CHECK-NEXT: .size: 16
1138 ; CHECK-NEXT: .value_type: i32
1139 ; CHECK-NEXT: .name: a
1140 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
1141 ; CHECK-NEXT: .offset: 16
1142 ; CHECK-NEXT: .size: 8
1143 ; CHECK-NEXT: .value_type: i64
1144 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
1145 ; CHECK-NEXT: .offset: 24
1146 ; CHECK-NEXT: .size: 8
1147 ; CHECK-NEXT: .value_type: i64
1148 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
1149 ; CHECK-NEXT: .offset: 32
1150 ; CHECK-NEXT: .size: 8
1151 ; CHECK-NEXT: .value_type: i64
1152 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
1153 ; CHECK-NEXT: .offset: 40
1154 ; CHECK-NEXT: .size: 8
1155 ; CHECK-NEXT: .value_type: i8
1156 ; CHECK-NEXT: .address_space: global
1157 define amdgpu_kernel void @test_arg_vector_of_ptr(<2 x i32 addrspace(1)*> %a)
1158 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !83
1159 !kernel_arg_base_type !83 !kernel_arg_type_qual !4 {
1163 ; CHECK: .symbol: test_arg_unknown_builtin_type.kd
1164 ; CHECK: .name: test_arg_unknown_builtin_type
1165 ; CHECK: .language: OpenCL C
1166 ; CHECK: .language_version:
1170 ; CHECK-NEXT: - .type_name: clk_event_t
1171 ; CHECK-NEXT: .value_kind: global_buffer
1172 ; CHECK-NEXT: .name: a
1173 ; CHECK-NEXT: .offset: 0
1174 ; CHECK-NEXT: .size: 8
1175 ; CHECK-NEXT: .value_type: struct
1176 ; CHECK-NEXT: .address_space: global
1177 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
1178 ; CHECK-NEXT: .offset: 8
1179 ; CHECK-NEXT: .size: 8
1180 ; CHECK-NEXT: .value_type: i64
1181 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
1182 ; CHECK-NEXT: .offset: 16
1183 ; CHECK-NEXT: .size: 8
1184 ; CHECK-NEXT: .value_type: i64
1185 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
1186 ; CHECK-NEXT: .offset: 24
1187 ; CHECK-NEXT: .size: 8
1188 ; CHECK-NEXT: .value_type: i64
1189 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
1190 ; CHECK-NEXT: .offset: 32
1191 ; CHECK-NEXT: .size: 8
1192 ; CHECK-NEXT: .value_type: i8
1193 ; CHECK-NEXT: .address_space: global
1194 define amdgpu_kernel void @test_arg_unknown_builtin_type(
1195 %opencl.clk_event_t addrspace(1)* %a)
1196 !kernel_arg_addr_space !81 !kernel_arg_access_qual !2 !kernel_arg_type !84
1197 !kernel_arg_base_type !84 !kernel_arg_type_qual !4 {
1201 ; CHECK: .symbol: test_pointee_align.kd
1202 ; CHECK: .name: test_pointee_align
1203 ; CHECK: .language: OpenCL C
1204 ; CHECK: .language_version:
1208 ; CHECK-NEXT: - .type_name: 'long addrspace(5)*'
1209 ; CHECK-NEXT: .value_kind: global_buffer
1210 ; CHECK-NEXT: .name: a
1211 ; CHECK-NEXT: .offset: 0
1212 ; CHECK-NEXT: .size: 8
1213 ; CHECK-NEXT: .value_type: i64
1214 ; CHECK-NEXT: .address_space: global
1215 ; CHECK-NEXT: - .type_name: 'char addrspace(5)*'
1216 ; CHECK-NEXT: .value_kind: dynamic_shared_pointer
1217 ; CHECK-NEXT: .name: b
1218 ; CHECK-NEXT: .offset: 8
1219 ; CHECK-NEXT: .size: 4
1220 ; CHECK-NEXT: .value_type: i8
1221 ; CHECK-NEXT: .pointee_align: 1
1222 ; CHECK-NEXT: .address_space: local
1223 ; CHECK-NEXT: - .type_name: 'char2 addrspace(5)*'
1224 ; CHECK-NEXT: .value_kind: dynamic_shared_pointer
1225 ; CHECK-NEXT: .name: c
1226 ; CHECK-NEXT: .offset: 12
1227 ; CHECK-NEXT: .size: 4
1228 ; CHECK-NEXT: .value_type: i8
1229 ; CHECK-NEXT: .pointee_align: 2
1230 ; CHECK-NEXT: .address_space: local
1231 ; CHECK-NEXT: - .type_name: 'char3 addrspace(5)*'
1232 ; CHECK-NEXT: .value_kind: dynamic_shared_pointer
1233 ; CHECK-NEXT: .name: d
1234 ; CHECK-NEXT: .offset: 16
1235 ; CHECK-NEXT: .size: 4
1236 ; CHECK-NEXT: .value_type: i8
1237 ; CHECK-NEXT: .pointee_align: 4
1238 ; CHECK-NEXT: .address_space: local
1239 ; CHECK-NEXT: - .type_name: 'char4 addrspace(5)*'
1240 ; CHECK-NEXT: .value_kind: dynamic_shared_pointer
1241 ; CHECK-NEXT: .name: e
1242 ; CHECK-NEXT: .offset: 20
1243 ; CHECK-NEXT: .size: 4
1244 ; CHECK-NEXT: .value_type: i8
1245 ; CHECK-NEXT: .pointee_align: 4
1246 ; CHECK-NEXT: .address_space: local
1247 ; CHECK-NEXT: - .type_name: 'char8 addrspace(5)*'
1248 ; CHECK-NEXT: .value_kind: dynamic_shared_pointer
1249 ; CHECK-NEXT: .name: f
1250 ; CHECK-NEXT: .offset: 24
1251 ; CHECK-NEXT: .size: 4
1252 ; CHECK-NEXT: .value_type: i8
1253 ; CHECK-NEXT: .pointee_align: 8
1254 ; CHECK-NEXT: .address_space: local
1255 ; CHECK-NEXT: - .type_name: 'char16 addrspace(5)*'
1256 ; CHECK-NEXT: .value_kind: dynamic_shared_pointer
1257 ; CHECK-NEXT: .name: g
1258 ; CHECK-NEXT: .offset: 28
1259 ; CHECK-NEXT: .size: 4
1260 ; CHECK-NEXT: .value_type: i8
1261 ; CHECK-NEXT: .pointee_align: 16
1262 ; CHECK-NEXT: .address_space: local
1263 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
1264 ; CHECK-NEXT: .offset: 32
1265 ; CHECK-NEXT: .size: 8
1266 ; CHECK-NEXT: .value_type: i64
1267 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
1268 ; CHECK-NEXT: .offset: 40
1269 ; CHECK-NEXT: .size: 8
1270 ; CHECK-NEXT: .value_type: i64
1271 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
1272 ; CHECK-NEXT: .offset: 48
1273 ; CHECK-NEXT: .size: 8
1274 ; CHECK-NEXT: .value_type: i64
1275 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
1276 ; CHECK-NEXT: .offset: 56
1277 ; CHECK-NEXT: .size: 8
1278 ; CHECK-NEXT: .value_type: i8
1279 ; CHECK-NEXT: .address_space: global
1280 define amdgpu_kernel void @test_pointee_align(i64 addrspace(1)* %a,
1281 i8 addrspace(3)* %b,
1282 <2 x i8> addrspace(3)* %c,
1283 <3 x i8> addrspace(3)* %d,
1284 <4 x i8> addrspace(3)* %e,
1285 <8 x i8> addrspace(3)* %f,
1286 <16 x i8> addrspace(3)* %g)
1287 !kernel_arg_addr_space !91 !kernel_arg_access_qual !92 !kernel_arg_type !93
1288 !kernel_arg_base_type !93 !kernel_arg_type_qual !94 {
1292 ; CHECK: .symbol: __test_block_invoke_kernel.kd
1293 ; CHECK: .device_enqueue_symbol: __test_block_invoke_kernel_runtime_handle
1294 ; CHECK: .name: __test_block_invoke_kernel
1295 ; CHECK: .language: OpenCL C
1296 ; CHECK: .language_version:
1300 ; CHECK-NEXT: - .type_name: __block_literal
1301 ; CHECK-NEXT: .value_kind: by_value
1302 ; CHECK-NEXT: .offset: 0
1303 ; CHECK-NEXT: .size: 25
1304 ; CHECK-NEXT: .value_type: struct
1305 ; CHECK-NEXT: .name: arg
1306 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
1307 ; CHECK-NEXT: .offset: 32
1308 ; CHECK-NEXT: .size: 8
1309 ; CHECK-NEXT: .value_type: i64
1310 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
1311 ; CHECK-NEXT: .offset: 40
1312 ; CHECK-NEXT: .size: 8
1313 ; CHECK-NEXT: .value_type: i64
1314 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
1315 ; CHECK-NEXT: .offset: 48
1316 ; CHECK-NEXT: .size: 8
1317 ; CHECK-NEXT: .value_type: i64
1318 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
1319 ; CHECK-NEXT: .offset: 56
1320 ; CHECK-NEXT: .size: 8
1321 ; CHECK-NEXT: .value_type: i8
1322 ; CHECK-NEXT: .address_space: global
1323 define amdgpu_kernel void @__test_block_invoke_kernel(
1324 <{ i32, i32, i8*, i8 addrspace(1)*, i8 }> %arg) #0
1325 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !110
1326 !kernel_arg_base_type !110 !kernel_arg_type_qual !4 {
1330 ; CHECK: .symbol: test_enqueue_kernel_caller.kd
1331 ; CHECK: .name: test_enqueue_kernel_caller
1332 ; CHECK: .language: OpenCL C
1333 ; CHECK: .language_version:
1337 ; CHECK-NEXT: - .type_name: char
1338 ; CHECK-NEXT: .value_kind: by_value
1339 ; CHECK-NEXT: .offset: 0
1340 ; CHECK-NEXT: .size: 1
1341 ; CHECK-NEXT: .value_type: i8
1342 ; CHECK-NEXT: .name: a
1343 ; CHECK-NEXT: - .value_kind: hidden_global_offset_x
1344 ; CHECK-NEXT: .offset: 8
1345 ; CHECK-NEXT: .size: 8
1346 ; CHECK-NEXT: .value_type: i64
1347 ; CHECK-NEXT: - .value_kind: hidden_global_offset_y
1348 ; CHECK-NEXT: .offset: 16
1349 ; CHECK-NEXT: .size: 8
1350 ; CHECK-NEXT: .value_type: i64
1351 ; CHECK-NEXT: - .value_kind: hidden_global_offset_z
1352 ; CHECK-NEXT: .offset: 24
1353 ; CHECK-NEXT: .size: 8
1354 ; CHECK-NEXT: .value_type: i64
1355 ; CHECK-NEXT: - .value_kind: hidden_printf_buffer
1356 ; CHECK-NEXT: .offset: 32
1357 ; CHECK-NEXT: .size: 8
1358 ; CHECK-NEXT: .value_type: i8
1359 ; CHECK-NEXT: .address_space: global
1360 ; CHECK-NEXT: - .value_kind: hidden_default_queue
1361 ; CHECK-NEXT: .offset: 40
1362 ; CHECK-NEXT: .size: 8
1363 ; CHECK-NEXT: .value_type: i8
1364 ; CHECK-NEXT: .address_space: global
1365 ; CHECK-NEXT: - .value_kind: hidden_completion_action
1366 ; CHECK-NEXT: .offset: 48
1367 ; CHECK-NEXT: .size: 8
1368 ; CHECK-NEXT: .value_type: i8
1369 ; CHECK-NEXT: .address_space: global
1370 define amdgpu_kernel void @test_enqueue_kernel_caller(i8 %a) #1
1371 !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !9
1372 !kernel_arg_base_type !9 !kernel_arg_type_qual !4 {
1376 ; CHECK: .symbol: unknown_addrspace_kernarg.kd
1377 ; CHECK: .name: unknown_addrspace_kernarg
1379 ; CHECK-NEXT: .value_kind: global_buffer
1380 ; CHECK-NEXT: .offset: 0
1381 ; CHECK-NEXT: .size: 8
1382 ; CHECK-NEXT: .value_type: i32
1383 ; CHECK-NEXT: .name: ptr
1384 define amdgpu_kernel void @unknown_addrspace_kernarg(i32 addrspace(12345)* %ptr) #0 {
1388 ; CHECK: amdhsa.version:
1391 ; CHECK: amdhsa.printf:
1392 ; CHECK-NEXT: - '1:1:4:%d\n'
1393 ; CHECK-NEXT: - '2:1:8:%g\n'
1395 attributes #0 = { "runtime-handle"="__test_block_invoke_kernel_runtime_handle" }
1396 attributes #1 = { "calls-enqueue-kernel" }
1398 !llvm.printf.fmts = !{!100, !101}
1404 !5 = !{i32 undef, i32 1}
1405 !6 = !{i32 1, i32 2, i32 4}
1406 !7 = !{<4 x i32> undef, i32 0}
1407 !8 = !{i32 8, i32 16, i32 32}
1414 !15 = !{!"double16"}
1415 !16 = !{!"int addrspace(5)*"}
1416 !17 = !{!"image2d_t"}
1417 !18 = !{!"sampler_t"}
1419 !20 = !{!"struct A"}
1421 !22 = !{i32 0, i32 0, i32 0}
1422 !23 = !{!"none", !"none", !"none"}
1423 !24 = !{!"int", !"short2", !"char3"}
1424 !25 = !{!"", !"", !""}
1425 !26 = !{half undef, i32 1}
1426 !27 = !{float undef, i32 1}
1427 !28 = !{double undef, i32 1}
1428 !29 = !{i8 undef, i32 1}
1429 !30 = !{i16 undef, i32 1}
1430 !31 = !{i64 undef, i32 1}
1431 !32 = !{i32 addrspace(5)*undef, i32 1}
1432 !50 = !{i32 1, i32 2, i32 3}
1433 !51 = !{!"int addrspace(5)*", !"int addrspace(5)*", !"int addrspace(5)*"}
1434 !60 = !{i32 1, i32 1, i32 1}
1435 !61 = !{!"read_only", !"write_only", !"read_write"}
1436 !62 = !{!"image1d_t", !"image2d_t", !"image3d_t"}
1437 !70 = !{!"volatile", !"const restrict", !"pipe"}
1438 !80 = !{!"int addrspace(5)* addrspace(5)*"}
1440 !82 = !{!"struct B"}
1441 !83 = !{!"global int addrspace(5)* __attribute__((ext_vector_type(2)))"}
1442 !84 = !{!"clk_event_t"}
1443 !opencl.ocl.version = !{!90}
1444 !90 = !{i32 2, i32 0}
1445 !91 = !{i32 0, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3}
1446 !92 = !{!"none", !"none", !"none", !"none", !"none", !"none", !"none"}
1447 !93 = !{!"long addrspace(5)*", !"char addrspace(5)*", !"char2 addrspace(5)*", !"char3 addrspace(5)*", !"char4 addrspace(5)*", !"char8 addrspace(5)*", !"char16 addrspace(5)*"}
1448 !94 = !{!"", !"", !"", !"", !"", !"", !""}
1449 !100 = !{!"1:1:4:%d\5Cn"}
1450 !101 = !{!"2:1:8:%g\5Cn"}
1451 !110 = !{!"__block_literal"}
1453 ; PARSER: AMDGPU HSA Metadata Parser Test: PASS