]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/AMDGPU/hsa-metadata-from-llvm-ir-full.ll
Vendor import of llvm trunk r351319 (just before the release_80 branch
[FreeBSD/FreeBSD.git] / test / CodeGen / AMDGPU / hsa-metadata-from-llvm-ir-full.ll
1 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -mattr=-code-object-v3 -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 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx802 -mattr=-code-object-v3 -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 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -mattr=-code-object-v3 -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 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -mattr=-code-object-v3 -amdgpu-dump-hsa-metadata -amdgpu-verify-hsa-metadata -filetype=obj -o - < %s 2>&1 | FileCheck --check-prefix=PARSER %s
5 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx802 -mattr=-code-object-v3 -amdgpu-dump-hsa-metadata -amdgpu-verify-hsa-metadata -filetype=obj -o - < %s 2>&1 | FileCheck --check-prefix=PARSER %s
6 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -mattr=-code-object-v3 -amdgpu-dump-hsa-metadata -amdgpu-verify-hsa-metadata -filetype=obj -o - < %s 2>&1 | FileCheck --check-prefix=PARSER %s
7
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
16
17 @__test_block_invoke_kernel_runtime_handle = external addrspace(1) externally_initialized constant i8 addrspace(1)*
18
19 ; CHECK: ---
20 ; CHECK:  Version: [ 1, 0 ]
21 ; CHECK:  Printf:
22 ; CHECK:    - '1:1:4:%d\n'
23 ; CHECK:    - '2:1:8:%g\n'
24 ; CHECK:  Kernels:
25
26 ; CHECK:      - Name:            test_char
27 ; CHECK-NEXT:   SymbolName:      'test_char@kd'
28 ; CHECK-NEXT:   Language:        OpenCL C
29 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
30 ; CHECK-NEXT:   Args:
31 ; CHECK-NEXT:     - Name:          a
32 ; CHECK-NEXT:       TypeName:      char
33 ; CHECK-NEXT:       Size:          1
34 ; CHECK-NEXT:       Align:         1
35 ; CHECK-NEXT:       ValueKind:     ByValue
36 ; CHECK-NEXT:       ValueType:     I8
37 ; CHECK-NEXT:       AccQual:       Default
38 ; CHECK-NEXT:     - Size:          8
39 ; CHECK-NEXT:       Align:         8
40 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
41 ; CHECK-NEXT:       ValueType:     I64
42 ; CHECK-NEXT:     - Size:          8
43 ; CHECK-NEXT:       Align:         8
44 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
45 ; CHECK-NEXT:       ValueType:     I64
46 ; CHECK-NEXT:     - Size:          8
47 ; CHECK-NEXT:       Align:         8
48 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
49 ; CHECK-NEXT:       ValueType:     I64
50 ; CHECK-NEXT:     - Size:          8
51 ; CHECK-NEXT:       Align:         8
52 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
53 ; CHECK-NEXT:       ValueType:     I8
54 ; CHECK-NEXT:       AddrSpaceQual: Global
55 ; CHECK-NOT:        ValueKind:     HiddenDefaultQueue
56 ; CHECK-NOT:        ValueKind:     HiddenCompletionAction
57 define amdgpu_kernel void @test_char(i8 %a) #0
58     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !9
59     !kernel_arg_base_type !9 !kernel_arg_type_qual !4 {
60   ret void
61 }
62
63 ; CHECK:      - Name:            test_ushort2
64 ; CHECK-NEXT:   SymbolName:      'test_ushort2@kd'
65 ; CHECK-NEXT:   Language:        OpenCL C
66 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
67 ; CHECK-NEXT:   Args:
68 ; CHECK-NEXT:     - Name:          a
69 ; CHECK-NEXT:       TypeName:      ushort2
70 ; CHECK-NEXT:       Size:          4
71 ; CHECK-NEXT:       Align:         4
72 ; CHECK-NEXT:       ValueKind:     ByValue
73 ; CHECK-NEXT:       ValueType:     U16
74 ; CHECK-NEXT:       AccQual:       Default
75 ; CHECK-NEXT:     - Size:          8
76 ; CHECK-NEXT:       Align:         8
77 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
78 ; CHECK-NEXT:       ValueType:     I64
79 ; CHECK-NEXT:     - Size:          8
80 ; CHECK-NEXT:       Align:         8
81 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
82 ; CHECK-NEXT:       ValueType:     I64
83 ; CHECK-NEXT:     - Size:          8
84 ; CHECK-NEXT:       Align:         8
85 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
86 ; CHECK-NEXT:       ValueType:     I64
87 ; CHECK-NEXT:     - Size:          8
88 ; CHECK-NEXT:       Align:         8
89 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
90 ; CHECK-NEXT:       ValueType:     I8
91 ; CHECK-NEXT:       AddrSpaceQual: Global
92 define amdgpu_kernel void @test_ushort2(<2 x i16> %a) #0
93     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !10
94     !kernel_arg_base_type !10 !kernel_arg_type_qual !4 {
95   ret void
96 }
97
98 ; CHECK:      - Name:            test_int3
99 ; CHECK-NEXT:   SymbolName:      'test_int3@kd'
100 ; CHECK-NEXT:   Language:        OpenCL C
101 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
102 ; CHECK-NEXT:   Args:
103 ; CHECK-NEXT:     - Name:          a
104 ; CHECK-NEXT:       TypeName:      int3
105 ; CHECK-NEXT:       Size:          16
106 ; CHECK-NEXT:       Align:         16
107 ; CHECK-NEXT:       ValueKind:     ByValue
108 ; CHECK-NEXT:       ValueType:     I32
109 ; CHECK-NEXT:       AccQual:       Default
110 ; CHECK-NEXT:     - Size:          8
111 ; CHECK-NEXT:       Align:         8
112 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
113 ; CHECK-NEXT:       ValueType:     I64
114 ; CHECK-NEXT:     - Size:          8
115 ; CHECK-NEXT:       Align:         8
116 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
117 ; CHECK-NEXT:       ValueType:     I64
118 ; CHECK-NEXT:     - Size:          8
119 ; CHECK-NEXT:       Align:         8
120 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
121 ; CHECK-NEXT:       ValueType:     I64
122 ; CHECK-NEXT:     - Size:          8
123 ; CHECK-NEXT:       Align:         8
124 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
125 ; CHECK-NEXT:       ValueType:     I8
126 ; CHECK-NEXT:       AddrSpaceQual: Global
127 define amdgpu_kernel void @test_int3(<3 x i32> %a) #0
128     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !11
129     !kernel_arg_base_type !11 !kernel_arg_type_qual !4 {
130   ret void
131 }
132
133 ; CHECK:      - Name:            test_ulong4
134 ; CHECK-NEXT:   SymbolName:      'test_ulong4@kd'
135 ; CHECK-NEXT:   Language:        OpenCL C
136 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
137 ; CHECK-NEXT:   Args:
138 ; CHECK-NEXT:     - Name:          a
139 ; CHECK-NEXT:       TypeName:      ulong4
140 ; CHECK-NEXT:       Size:          32
141 ; CHECK-NEXT:       Align:         32
142 ; CHECK-NEXT:       ValueKind:     ByValue
143 ; CHECK-NEXT:       ValueType:     U64
144 ; CHECK-NEXT:       AccQual:       Default
145 ; CHECK-NEXT:     - Size:          8
146 ; CHECK-NEXT:       Align:         8
147 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
148 ; CHECK-NEXT:       ValueType:     I64
149 ; CHECK-NEXT:     - Size:          8
150 ; CHECK-NEXT:       Align:         8
151 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
152 ; CHECK-NEXT:       ValueType:     I64
153 ; CHECK-NEXT:     - Size:          8
154 ; CHECK-NEXT:       Align:         8
155 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
156 ; CHECK-NEXT:       ValueType:     I64
157 ; CHECK-NEXT:     - Size:          8
158 ; CHECK-NEXT:       Align:         8
159 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
160 ; CHECK-NEXT:       ValueType:     I8
161 ; CHECK-NEXT:       AddrSpaceQual: Global
162 define amdgpu_kernel void @test_ulong4(<4 x i64> %a) #0
163     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !12
164     !kernel_arg_base_type !12 !kernel_arg_type_qual !4 {
165   ret void
166 }
167
168 ; CHECK:      - Name:            test_half8
169 ; CHECK-NEXT:   SymbolName:      'test_half8@kd'
170 ; CHECK-NEXT:   Language:        OpenCL C
171 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
172 ; CHECK-NEXT:   Args:
173 ; CHECK-NEXT:     - Name:          a
174 ; CHECK-NEXT:       TypeName:      half8
175 ; CHECK-NEXT:       Size:          16
176 ; CHECK-NEXT:       Align:         16
177 ; CHECK-NEXT:       ValueKind:     ByValue
178 ; CHECK-NEXT:       ValueType:     F16
179 ; CHECK-NEXT:       AccQual:       Default
180 ; CHECK-NEXT:     - Size:          8
181 ; CHECK-NEXT:       Align:         8
182 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
183 ; CHECK-NEXT:       ValueType:     I64
184 ; CHECK-NEXT:     - Size:          8
185 ; CHECK-NEXT:       Align:         8
186 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
187 ; CHECK-NEXT:       ValueType:     I64
188 ; CHECK-NEXT:     - Size:          8
189 ; CHECK-NEXT:       Align:         8
190 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
191 ; CHECK-NEXT:       ValueType:     I64
192 ; CHECK-NEXT:     - Size:          8
193 ; CHECK-NEXT:       Align:         8
194 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
195 ; CHECK-NEXT:       ValueType:     I8
196 ; CHECK-NEXT:       AddrSpaceQual: Global
197 define amdgpu_kernel void @test_half8(<8 x half> %a) #0
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 {
200   ret void
201 }
202
203 ; CHECK:      - Name:            test_float16
204 ; CHECK-NEXT:   SymbolName:      'test_float16@kd'
205 ; CHECK-NEXT:   Language:        OpenCL C
206 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
207 ; CHECK-NEXT:   Args:
208 ; CHECK-NEXT:     - Name:          a
209 ; CHECK-NEXT:       TypeName:      float16
210 ; CHECK-NEXT:       Size:          64
211 ; CHECK-NEXT:       Align:         64
212 ; CHECK-NEXT:       ValueKind:     ByValue
213 ; CHECK-NEXT:       ValueType:     F32
214 ; CHECK-NEXT:       AccQual:       Default
215 ; CHECK-NEXT:     - Size:          8
216 ; CHECK-NEXT:       Align:         8
217 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
218 ; CHECK-NEXT:       ValueType:     I64
219 ; CHECK-NEXT:     - Size:          8
220 ; CHECK-NEXT:       Align:         8
221 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
222 ; CHECK-NEXT:       ValueType:     I64
223 ; CHECK-NEXT:     - Size:          8
224 ; CHECK-NEXT:       Align:         8
225 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
226 ; CHECK-NEXT:       ValueType:     I64
227 ; CHECK-NEXT:     - Size:          8
228 ; CHECK-NEXT:       Align:         8
229 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
230 ; CHECK-NEXT:       ValueType:     I8
231 ; CHECK-NEXT:       AddrSpaceQual: Global
232 define amdgpu_kernel void @test_float16(<16 x float> %a) #0
233     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !14
234     !kernel_arg_base_type !14 !kernel_arg_type_qual !4 {
235   ret void
236 }
237
238 ; CHECK:      - Name:            test_double16
239 ; CHECK-NEXT:   SymbolName:      'test_double16@kd'
240 ; CHECK-NEXT:   Language:        OpenCL C
241 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
242 ; CHECK-NEXT:   Args:
243 ; CHECK-NEXT:     - Name:          a
244 ; CHECK-NEXT:       TypeName:      double16
245 ; CHECK-NEXT:       Size:          128
246 ; CHECK-NEXT:       Align:         128
247 ; CHECK-NEXT:       ValueKind:     ByValue
248 ; CHECK-NEXT:       ValueType:     F64
249 ; CHECK-NEXT:       AccQual:       Default
250 ; CHECK-NEXT:     - Size:          8
251 ; CHECK-NEXT:       Align:         8
252 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
253 ; CHECK-NEXT:       ValueType:     I64
254 ; CHECK-NEXT:     - Size:          8
255 ; CHECK-NEXT:       Align:         8
256 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
257 ; CHECK-NEXT:       ValueType:     I64
258 ; CHECK-NEXT:     - Size:          8
259 ; CHECK-NEXT:       Align:         8
260 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
261 ; CHECK-NEXT:       ValueType:     I64
262 ; CHECK-NEXT:     - Size:          8
263 ; CHECK-NEXT:       Align:         8
264 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
265 ; CHECK-NEXT:       ValueType:     I8
266 ; CHECK-NEXT:       AddrSpaceQual: Global
267 define amdgpu_kernel void @test_double16(<16 x double> %a) #0
268     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !15
269     !kernel_arg_base_type !15 !kernel_arg_type_qual !4 {
270   ret void
271 }
272
273 ; CHECK:      - Name:            test_pointer
274 ; CHECK-NEXT:   SymbolName:      'test_pointer@kd'
275 ; CHECK-NEXT:   Language:        OpenCL C
276 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
277 ; CHECK-NEXT:   Args:
278 ; CHECK-NEXT:     - Name:          a
279 ; CHECK-NEXT:       TypeName:      'int  addrspace(5)*'
280 ; CHECK-NEXT:       Size:          8
281 ; CHECK-NEXT:       Align:         8
282 ; CHECK-NEXT:       ValueKind:     GlobalBuffer
283 ; CHECK-NEXT:       ValueType:     I32
284 ; CHECK-NEXT:       AddrSpaceQual: Global
285 ; CHECK-NEXT:       AccQual:       Default
286 ; CHECK-NEXT:     - Size:          8
287 ; CHECK-NEXT:       Align:         8
288 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
289 ; CHECK-NEXT:       ValueType:     I64
290 ; CHECK-NEXT:     - Size:          8
291 ; CHECK-NEXT:       Align:         8
292 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
293 ; CHECK-NEXT:       ValueType:     I64
294 ; CHECK-NEXT:     - Size:          8
295 ; CHECK-NEXT:       Align:         8
296 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
297 ; CHECK-NEXT:       ValueType:     I64
298 ; CHECK-NEXT:     - Size:          8
299 ; CHECK-NEXT:       Align:         8
300 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
301 ; CHECK-NEXT:       ValueType:     I8
302 ; CHECK-NEXT:       AddrSpaceQual: Global
303 define amdgpu_kernel void @test_pointer(i32 addrspace(1)* %a) #0
304     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !16
305     !kernel_arg_base_type !16 !kernel_arg_type_qual !4 {
306   ret void
307 }
308
309 ; CHECK:      - Name:            test_image
310 ; CHECK-NEXT:   SymbolName:      'test_image@kd'
311 ; CHECK-NEXT:   Language:        OpenCL C
312 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
313 ; CHECK-NEXT:   Args:
314 ; CHECK-NEXT:     - Name:          a
315 ; CHECK-NEXT:       TypeName:      image2d_t
316 ; CHECK-NEXT:       Size:          8
317 ; CHECK-NEXT:       Align:         8
318 ; CHECK-NEXT:       ValueKind:     Image
319 ; CHECK-NEXT:       ValueType:     Struct
320 ; CHECK-NEXT:       AddrSpaceQual: Global
321 ; CHECK-NEXT:       AccQual:       Default
322 ; CHECK-NEXT:     - Size:          8
323 ; CHECK-NEXT:       Align:         8
324 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
325 ; CHECK-NEXT:       ValueType:     I64
326 ; CHECK-NEXT:     - Size:          8
327 ; CHECK-NEXT:       Align:         8
328 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
329 ; CHECK-NEXT:       ValueType:     I64
330 ; CHECK-NEXT:     - Size:          8
331 ; CHECK-NEXT:       Align:         8
332 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
333 ; CHECK-NEXT:       ValueType:     I64
334 ; CHECK-NEXT:     - Size:          8
335 ; CHECK-NEXT:       Align:         8
336 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
337 ; CHECK-NEXT:       ValueType:     I8
338 ; CHECK-NEXT:       AddrSpaceQual: Global
339 define amdgpu_kernel void @test_image(%opencl.image2d_t addrspace(1)* %a) #0
340     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !17
341     !kernel_arg_base_type !17 !kernel_arg_type_qual !4 {
342   ret void
343 }
344
345 ; CHECK:      - Name:            test_sampler
346 ; CHECK-NEXT:   SymbolName:      'test_sampler@kd'
347 ; CHECK-NEXT:   Language:        OpenCL C
348 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
349 ; CHECK-NEXT:   Args:
350 ; CHECK-NEXT:     - Name:          a
351 ; CHECK-NEXT:       TypeName:      sampler_t
352 ; CHECK-NEXT:       Size:          4
353 ; CHECK-NEXT:       Align:         4
354 ; CHECK-NEXT:       ValueKind:     Sampler
355 ; CHECK-NEXT:       ValueType:     I32
356 ; CHECK-NEXT:       AccQual:       Default
357 ; CHECK-NEXT:     - Size:          8
358 ; CHECK-NEXT:       Align:         8
359 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
360 ; CHECK-NEXT:       ValueType:     I64
361 ; CHECK-NEXT:     - Size:          8
362 ; CHECK-NEXT:       Align:         8
363 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
364 ; CHECK-NEXT:       ValueType:     I64
365 ; CHECK-NEXT:     - Size:          8
366 ; CHECK-NEXT:       Align:         8
367 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
368 ; CHECK-NEXT:       ValueType:     I64
369 ; CHECK-NEXT:     - Size:          8
370 ; CHECK-NEXT:       Align:         8
371 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
372 ; CHECK-NEXT:       ValueType:     I8
373 ; CHECK-NEXT:       AddrSpaceQual: Global
374 define amdgpu_kernel void @test_sampler(i32 %a) #0
375     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !18
376     !kernel_arg_base_type !18 !kernel_arg_type_qual !4 {
377   ret void
378 }
379
380 ; CHECK:      - Name:            test_queue
381 ; CHECK-NEXT:   SymbolName:      'test_queue@kd'
382 ; CHECK-NEXT:   Language:        OpenCL C
383 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
384 ; CHECK-NEXT:   Args:
385 ; CHECK-NEXT:     - Name:          a
386 ; CHECK-NEXT:       TypeName:      queue_t
387 ; CHECK-NEXT:       Size:          8
388 ; CHECK-NEXT:       Align:         8
389 ; CHECK-NEXT:       ValueKind:     Queue
390 ; CHECK-NEXT:       ValueType:     Struct
391 ; CHECK-NEXT:       AddrSpaceQual: Global
392 ; CHECK-NEXT:       AccQual:       Default
393 ; CHECK-NEXT:     - Size:          8
394 ; CHECK-NEXT:       Align:         8
395 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
396 ; CHECK-NEXT:       ValueType:     I64
397 ; CHECK-NEXT:     - Size:          8
398 ; CHECK-NEXT:       Align:         8
399 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
400 ; CHECK-NEXT:       ValueType:     I64
401 ; CHECK-NEXT:     - Size:          8
402 ; CHECK-NEXT:       Align:         8
403 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
404 ; CHECK-NEXT:       ValueType:     I64
405 ; CHECK-NEXT:     - Size:          8
406 ; CHECK-NEXT:       Align:         8
407 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
408 ; CHECK-NEXT:       ValueType:     I8
409 ; CHECK-NEXT:       AddrSpaceQual: Global
410 define amdgpu_kernel void @test_queue(%opencl.queue_t addrspace(1)* %a) #0
411     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !19
412     !kernel_arg_base_type !19 !kernel_arg_type_qual !4 {
413   ret void
414 }
415
416 ; CHECK:      - Name:            test_struct
417 ; CHECK-NEXT:   SymbolName:      'test_struct@kd'
418 ; CHECK-NEXT:   Language:        OpenCL C
419 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
420 ; CHECK-NEXT:   Args:
421 ; CHECK-NEXT:     - Name:          a
422 ; CHECK-NEXT:       TypeName:      struct A
423 ; CHECK-NEXT:       Size:          4
424 ; CHECK-NEXT:       Align:         4
425 ; CHECK-NEXT:       ValueKind:     GlobalBuffer
426 ; CHECK-NEXT:       ValueType:     Struct
427 ; CHECK-NEXT:       AddrSpaceQual: Private
428 ; CHECK-NEXT:       AccQual:       Default
429 ; CHECK-NEXT:     - Size:          8
430 ; CHECK-NEXT:       Align:         8
431 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
432 ; CHECK-NEXT:       ValueType:     I64
433 ; CHECK-NEXT:     - Size:          8
434 ; CHECK-NEXT:       Align:         8
435 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
436 ; CHECK-NEXT:       ValueType:     I64
437 ; CHECK-NEXT:     - Size:          8
438 ; CHECK-NEXT:       Align:         8
439 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
440 ; CHECK-NEXT:       ValueType:     I64
441 ; CHECK-NEXT:     - Size:          8
442 ; CHECK-NEXT:       Align:         8
443 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
444 ; CHECK-NEXT:       ValueType:     I8
445 ; CHECK-NEXT:       AddrSpaceQual: Global
446 define amdgpu_kernel void @test_struct(%struct.A addrspace(5)* byval %a) #0
447     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !20
448     !kernel_arg_base_type !20 !kernel_arg_type_qual !4 {
449   ret void
450 }
451
452 ; CHECK:      - Name:            test_i128
453 ; CHECK-NEXT:   SymbolName:      'test_i128@kd'
454 ; CHECK-NEXT:   Language:        OpenCL C
455 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
456 ; CHECK-NEXT:   Args:
457 ; CHECK-NEXT:     - Name:          a
458 ; CHECK-NEXT:       TypeName:      i128
459 ; CHECK-NEXT:       Size:          16
460 ; CHECK-NEXT:       Align:         8
461 ; CHECK-NEXT:       ValueKind:     ByValue
462 ; CHECK-NEXT:       ValueType:     Struct
463 ; CHECK-NEXT:       AccQual:       Default
464 ; CHECK-NEXT:     - Size:          8
465 ; CHECK-NEXT:       Align:         8
466 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
467 ; CHECK-NEXT:       ValueType:     I64
468 ; CHECK-NEXT:     - Size:          8
469 ; CHECK-NEXT:       Align:         8
470 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
471 ; CHECK-NEXT:       ValueType:     I64
472 ; CHECK-NEXT:     - Size:          8
473 ; CHECK-NEXT:       Align:         8
474 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
475 ; CHECK-NEXT:       ValueType:     I64
476 ; CHECK-NEXT:     - Size:          8
477 ; CHECK-NEXT:       Align:         8
478 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
479 ; CHECK-NEXT:       ValueType:     I8
480 ; CHECK-NEXT:       AddrSpaceQual: Global
481 define amdgpu_kernel void @test_i128(i128 %a) #0
482     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !21
483     !kernel_arg_base_type !21 !kernel_arg_type_qual !4 {
484   ret void
485 }
486
487 ; CHECK:      - Name:            test_multi_arg
488 ; CHECK-NEXT:   SymbolName:      'test_multi_arg@kd'
489 ; CHECK-NEXT:   Language:        OpenCL C
490 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
491 ; CHECK-NEXT:   Args:
492 ; CHECK-NEXT:     - Name:          a
493 ; CHECK-NEXT:       TypeName:      int
494 ; CHECK-NEXT:       Size:          4
495 ; CHECK-NEXT:       Align:         4
496 ; CHECK-NEXT:       ValueKind:     ByValue
497 ; CHECK-NEXT:       ValueType:     I32
498 ; CHECK-NEXT:       AccQual:       Default
499 ; CHECK-NEXT:     - Name:          b
500 ; CHECK-NEXT:       TypeName:      short2
501 ; CHECK-NEXT:       Size:          4
502 ; CHECK-NEXT:       Align:         4
503 ; CHECK-NEXT:       ValueKind:     ByValue
504 ; CHECK-NEXT:       ValueType:     I16
505 ; CHECK-NEXT:       AccQual:       Default
506 ; CHECK-NEXT:     - Name:          c
507 ; CHECK-NEXT:       TypeName:      char3
508 ; CHECK-NEXT:       Size:          4
509 ; CHECK-NEXT:       Align:         4
510 ; CHECK-NEXT:       ValueKind:     ByValue
511 ; CHECK-NEXT:       ValueType:     I8
512 ; CHECK-NEXT:       AccQual:       Default
513 ; CHECK-NEXT:     - Size:          8
514 ; CHECK-NEXT:       Align:         8
515 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
516 ; CHECK-NEXT:       ValueType:     I64
517 ; CHECK-NEXT:     - Size:          8
518 ; CHECK-NEXT:       Align:         8
519 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
520 ; CHECK-NEXT:       ValueType:     I64
521 ; CHECK-NEXT:     - Size:          8
522 ; CHECK-NEXT:       Align:         8
523 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
524 ; CHECK-NEXT:       ValueType:     I64
525 ; CHECK-NEXT:     - Size:          8
526 ; CHECK-NEXT:       Align:         8
527 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
528 ; CHECK-NEXT:       ValueType:     I8
529 ; CHECK-NEXT:       AddrSpaceQual: Global
530 define amdgpu_kernel void @test_multi_arg(i32 %a, <2 x i16> %b, <3 x i8> %c) #0
531     !kernel_arg_addr_space !22 !kernel_arg_access_qual !23 !kernel_arg_type !24
532     !kernel_arg_base_type !24 !kernel_arg_type_qual !25 {
533   ret void
534 }
535
536 ; CHECK:      - Name:            test_addr_space
537 ; CHECK-NEXT:   SymbolName:      'test_addr_space@kd'
538 ; CHECK-NEXT:   Language:        OpenCL C
539 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
540 ; CHECK-NEXT:   Args:
541 ; CHECK-NEXT:     - Name:          g
542 ; CHECK-NEXT:       TypeName:      'int  addrspace(5)*'
543 ; CHECK-NEXT:       Size:          8
544 ; CHECK-NEXT:       Align:         8
545 ; CHECK-NEXT:       ValueKind:     GlobalBuffer
546 ; CHECK-NEXT:       ValueType:     I32
547 ; CHECK-NEXT:       AddrSpaceQual: Global
548 ; CHECK-NEXT:       AccQual:       Default
549 ; CHECK-NEXT:     - Name:          c
550 ; CHECK-NEXT:       TypeName:      'int  addrspace(5)*'
551 ; CHECK-NEXT:       Size:          8
552 ; CHECK-NEXT:       Align:         8
553 ; CHECK-NEXT:       ValueKind:     GlobalBuffer
554 ; CHECK-NEXT:       ValueType:     I32
555 ; CHECK-NEXT:       AddrSpaceQual: Constant
556 ; CHECK-NEXT:       AccQual:       Default
557 ; CHECK-NEXT:     - Name:          l
558 ; CHECK-NEXT:       TypeName:      'int  addrspace(5)*'
559 ; CHECK-NEXT:       Size:          4
560 ; CHECK-NEXT:       Align:         4
561 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
562 ; CHECK-NEXT:       ValueType:     I32
563 ; CHECK-NEXT:       PointeeAlign:  4
564 ; CHECK-NEXT:       AddrSpaceQual: Local
565 ; CHECK-NEXT:       AccQual:       Default
566 ; CHECK-NEXT:     - Size:          8
567 ; CHECK-NEXT:       Align:         8
568 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
569 ; CHECK-NEXT:       ValueType:     I64
570 ; CHECK-NEXT:     - Size:          8
571 ; CHECK-NEXT:       Align:         8
572 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
573 ; CHECK-NEXT:       ValueType:     I64
574 ; CHECK-NEXT:     - Size:          8
575 ; CHECK-NEXT:       Align:         8
576 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
577 ; CHECK-NEXT:       ValueType:     I64
578 ; CHECK-NEXT:     - Size:          8
579 ; CHECK-NEXT:       Align:         8
580 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
581 ; CHECK-NEXT:       ValueType:     I8
582 ; CHECK-NEXT:       AddrSpaceQual: Global
583 define amdgpu_kernel void @test_addr_space(i32 addrspace(1)* %g,
584                                            i32 addrspace(4)* %c,
585                                            i32 addrspace(3)* %l) #0
586     !kernel_arg_addr_space !50 !kernel_arg_access_qual !23 !kernel_arg_type !51
587     !kernel_arg_base_type !51 !kernel_arg_type_qual !25 {
588   ret void
589 }
590
591 ; CHECK:      - Name:            test_type_qual
592 ; CHECK-NEXT:   SymbolName:      'test_type_qual@kd'
593 ; CHECK-NEXT:   Language:        OpenCL C
594 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
595 ; CHECK-NEXT:   Args:
596 ; CHECK-NEXT:     - Name:          a
597 ; CHECK-NEXT:       TypeName:      'int  addrspace(5)*'
598 ; CHECK-NEXT:       Size:          8
599 ; CHECK-NEXT:       Align:         8
600 ; CHECK-NEXT:       ValueKind:     GlobalBuffer
601 ; CHECK-NEXT:       ValueType:     I32
602 ; CHECK-NEXT:       AddrSpaceQual: Global
603 ; CHECK-NEXT:       AccQual:       Default
604 ; CHECK-NEXT:       IsVolatile:    true
605 ; CHECK-NEXT:     - Name:          b
606 ; CHECK-NEXT:       TypeName:      'int  addrspace(5)*'
607 ; CHECK-NEXT:       Size:          8
608 ; CHECK-NEXT:       Align:         8
609 ; CHECK-NEXT:       ValueKind:     GlobalBuffer
610 ; CHECK-NEXT:       ValueType:     I32
611 ; CHECK-NEXT:       AddrSpaceQual: Global
612 ; CHECK-NEXT:       AccQual:       Default
613 ; CHECK-NEXT:       IsConst:       true
614 ; CHECK-NEXT:       IsRestrict:    true
615 ; CHECK-NEXT:     - Name:          c
616 ; CHECK-NEXT:       TypeName:      'int  addrspace(5)*'
617 ; CHECK-NEXT:       Size:          8
618 ; CHECK-NEXT:       Align:         8
619 ; CHECK-NEXT:       ValueKind:     Pipe
620 ; CHECK-NEXT:       ValueType:     Struct
621 ; CHECK-NEXT:       AddrSpaceQual: Global
622 ; CHECK-NEXT:       AccQual:       Default
623 ; CHECK-NEXT:       IsPipe:        true
624 ; CHECK-NEXT:     - Size:          8
625 ; CHECK-NEXT:       Align:         8
626 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
627 ; CHECK-NEXT:       ValueType:     I64
628 ; CHECK-NEXT:     - Size:          8
629 ; CHECK-NEXT:       Align:         8
630 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
631 ; CHECK-NEXT:       ValueType:     I64
632 ; CHECK-NEXT:     - Size:          8
633 ; CHECK-NEXT:       Align:         8
634 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
635 ; CHECK-NEXT:       ValueType:     I64
636 ; CHECK-NEXT:     - Size:          8
637 ; CHECK-NEXT:       Align:         8
638 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
639 ; CHECK-NEXT:       ValueType:     I8
640 ; CHECK-NEXT:       AddrSpaceQual: Global
641 define amdgpu_kernel void @test_type_qual(i32 addrspace(1)* %a,
642                                           i32 addrspace(1)* %b,
643                                           %opencl.pipe_t addrspace(1)* %c) #0
644     !kernel_arg_addr_space !22 !kernel_arg_access_qual !23 !kernel_arg_type !51
645     !kernel_arg_base_type !51 !kernel_arg_type_qual !70 {
646   ret void
647 }
648
649 ; CHECK:      - Name:            test_access_qual
650 ; CHECK-NEXT:   SymbolName:      'test_access_qual@kd'
651 ; CHECK-NEXT:   Language:        OpenCL C
652 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
653 ; CHECK-NEXT:   Args:
654 ; CHECK-NEXT:     - Name:          ro
655 ; CHECK-NEXT:       TypeName:      image1d_t
656 ; CHECK-NEXT:       Size:          8
657 ; CHECK-NEXT:       Align:         8
658 ; CHECK-NEXT:       ValueKind:     Image
659 ; CHECK-NEXT:       ValueType:     Struct
660 ; CHECK-NEXT:       AddrSpaceQual: Global
661 ; CHECK-NEXT:       AccQual:       ReadOnly
662 ; CHECK-NEXT:     - Name:          wo
663 ; CHECK-NEXT:       TypeName:      image2d_t
664 ; CHECK-NEXT:       Size:          8
665 ; CHECK-NEXT:       Align:         8
666 ; CHECK-NEXT:       ValueKind:     Image
667 ; CHECK-NEXT:       ValueType:     Struct
668 ; CHECK-NEXT:       AddrSpaceQual: Global
669 ; CHECK-NEXT:       AccQual:       WriteOnly
670 ; CHECK-NEXT:     - Name:          rw
671 ; CHECK-NEXT:       TypeName:      image3d_t
672 ; CHECK-NEXT:       Size:          8
673 ; CHECK-NEXT:       Align:         8
674 ; CHECK-NEXT:       ValueKind:     Image
675 ; CHECK-NEXT:       ValueType:     Struct
676 ; CHECK-NEXT:       AddrSpaceQual: Global
677 ; CHECK-NEXT:       AccQual:       ReadWrite
678 ; CHECK-NEXT:     - Size:          8
679 ; CHECK-NEXT:       Align:         8
680 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
681 ; CHECK-NEXT:       ValueType:     I64
682 ; CHECK-NEXT:     - Size:          8
683 ; CHECK-NEXT:       Align:         8
684 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
685 ; CHECK-NEXT:       ValueType:     I64
686 ; CHECK-NEXT:     - Size:          8
687 ; CHECK-NEXT:       Align:         8
688 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
689 ; CHECK-NEXT:       ValueType:     I64
690 ; CHECK-NEXT:     - Size:          8
691 ; CHECK-NEXT:       Align:         8
692 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
693 ; CHECK-NEXT:       ValueType:     I8
694 ; CHECK-NEXT:       AddrSpaceQual: Global
695 define amdgpu_kernel void @test_access_qual(%opencl.image1d_t addrspace(1)* %ro,
696                                             %opencl.image2d_t addrspace(1)* %wo,
697                                             %opencl.image3d_t addrspace(1)* %rw) #0
698     !kernel_arg_addr_space !60 !kernel_arg_access_qual !61 !kernel_arg_type !62
699     !kernel_arg_base_type !62 !kernel_arg_type_qual !25 {
700   ret void
701 }
702
703 ; CHECK:      - Name:            test_vec_type_hint_half
704 ; CHECK-NEXT:   SymbolName:      'test_vec_type_hint_half@kd'
705 ; CHECK-NEXT:   Language:        OpenCL C
706 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
707 ; CHECK-NEXT:   Attrs:
708 ; CHECK-NEXT:       VecTypeHint:   half
709 ; CHECK-NEXT:   Args:
710 ; CHECK-NEXT:     - Name:          a
711 ; CHECK-NEXT:       TypeName:      int
712 ; CHECK-NEXT:       Size:          4
713 ; CHECK-NEXT:       Align:         4
714 ; CHECK-NEXT:       ValueKind:     ByValue
715 ; CHECK-NEXT:       ValueType:     I32
716 ; CHECK-NEXT:       AccQual:       Default
717 ; CHECK-NEXT:     - Size:          8
718 ; CHECK-NEXT:       Align:         8
719 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
720 ; CHECK-NEXT:       ValueType:     I64
721 ; CHECK-NEXT:     - Size:          8
722 ; CHECK-NEXT:       Align:         8
723 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
724 ; CHECK-NEXT:       ValueType:     I64
725 ; CHECK-NEXT:     - Size:          8
726 ; CHECK-NEXT:       Align:         8
727 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
728 ; CHECK-NEXT:       ValueType:     I64
729 ; CHECK-NEXT:     - Size:          8
730 ; CHECK-NEXT:       Align:         8
731 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
732 ; CHECK-NEXT:       ValueType:     I8
733 ; CHECK-NEXT:       AddrSpaceQual: Global
734 define amdgpu_kernel void @test_vec_type_hint_half(i32 %a) #0
735     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
736     !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !26 {
737   ret void
738 }
739
740 ; CHECK:      - Name:            test_vec_type_hint_float
741 ; CHECK-NEXT:   SymbolName:      'test_vec_type_hint_float@kd'
742 ; CHECK-NEXT:   Language:        OpenCL C
743 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
744 ; CHECK-NEXT:   Attrs:
745 ; CHECK-NEXT:       VecTypeHint:   float
746 ; CHECK-NEXT:   Args:
747 ; CHECK-NEXT:     - Name:          a
748 ; CHECK-NEXT:       TypeName:      int
749 ; CHECK-NEXT:       Size:          4
750 ; CHECK-NEXT:       Align:         4
751 ; CHECK-NEXT:       ValueKind:     ByValue
752 ; CHECK-NEXT:       ValueType:     I32
753 ; CHECK-NEXT:       AccQual:       Default
754 ; CHECK-NEXT:     - Size:          8
755 ; CHECK-NEXT:       Align:         8
756 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
757 ; CHECK-NEXT:       ValueType:     I64
758 ; CHECK-NEXT:     - Size:          8
759 ; CHECK-NEXT:       Align:         8
760 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
761 ; CHECK-NEXT:       ValueType:     I64
762 ; CHECK-NEXT:     - Size:          8
763 ; CHECK-NEXT:       Align:         8
764 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
765 ; CHECK-NEXT:       ValueType:     I64
766 ; CHECK-NEXT:     - Size:          8
767 ; CHECK-NEXT:       Align:         8
768 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
769 ; CHECK-NEXT:       ValueType:     I8
770 ; CHECK-NEXT:       AddrSpaceQual: Global
771 define amdgpu_kernel void @test_vec_type_hint_float(i32 %a) #0
772     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
773     !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !27 {
774   ret void
775 }
776
777 ; CHECK:      - Name:            test_vec_type_hint_double
778 ; CHECK-NEXT:   SymbolName:      'test_vec_type_hint_double@kd'
779 ; CHECK-NEXT:   Language:        OpenCL C
780 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
781 ; CHECK-NEXT:   Attrs:
782 ; CHECK-NEXT:       VecTypeHint:   double
783 ; CHECK-NEXT:   Args:
784 ; CHECK-NEXT:     - Name:          a
785 ; CHECK-NEXT:       TypeName:      int
786 ; CHECK-NEXT:       Size:          4
787 ; CHECK-NEXT:       Align:         4
788 ; CHECK-NEXT:       ValueKind:     ByValue
789 ; CHECK-NEXT:       ValueType:     I32
790 ; CHECK-NEXT:       AccQual:       Default
791 ; CHECK-NEXT:     - Size:          8
792 ; CHECK-NEXT:       Align:         8
793 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
794 ; CHECK-NEXT:       ValueType:     I64
795 ; CHECK-NEXT:     - Size:          8
796 ; CHECK-NEXT:       Align:         8
797 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
798 ; CHECK-NEXT:       ValueType:     I64
799 ; CHECK-NEXT:     - Size:          8
800 ; CHECK-NEXT:       Align:         8
801 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
802 ; CHECK-NEXT:       ValueType:     I64
803 ; CHECK-NEXT:     - Size:          8
804 ; CHECK-NEXT:       Align:         8
805 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
806 ; CHECK-NEXT:       ValueType:     I8
807 ; CHECK-NEXT:       AddrSpaceQual: Global
808 define amdgpu_kernel void @test_vec_type_hint_double(i32 %a) #0
809     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
810     !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !28 {
811   ret void
812 }
813
814 ; CHECK:      - Name:            test_vec_type_hint_char
815 ; CHECK-NEXT:   SymbolName:      'test_vec_type_hint_char@kd'
816 ; CHECK-NEXT:   Language:        OpenCL C
817 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
818 ; CHECK-NEXT:   Attrs:
819 ; CHECK-NEXT:       VecTypeHint:   char
820 ; CHECK-NEXT:   Args:
821 ; CHECK-NEXT:     - Name:          a
822 ; CHECK-NEXT:       TypeName:      int
823 ; CHECK-NEXT:       Size:          4
824 ; CHECK-NEXT:       Align:         4
825 ; CHECK-NEXT:       ValueKind:     ByValue
826 ; CHECK-NEXT:       ValueType:     I32
827 ; CHECK-NEXT:       AccQual:       Default
828 ; CHECK-NEXT:     - Size:          8
829 ; CHECK-NEXT:       Align:         8
830 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
831 ; CHECK-NEXT:       ValueType:     I64
832 ; CHECK-NEXT:     - Size:          8
833 ; CHECK-NEXT:       Align:         8
834 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
835 ; CHECK-NEXT:       ValueType:     I64
836 ; CHECK-NEXT:     - Size:          8
837 ; CHECK-NEXT:       Align:         8
838 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
839 ; CHECK-NEXT:       ValueType:     I64
840 ; CHECK-NEXT:     - Size:          8
841 ; CHECK-NEXT:       Align:         8
842 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
843 ; CHECK-NEXT:       ValueType:     I8
844 ; CHECK-NEXT:       AddrSpaceQual: Global
845 define amdgpu_kernel void @test_vec_type_hint_char(i32 %a) #0
846     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
847     !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !29 {
848   ret void
849 }
850
851 ; CHECK:      - Name:            test_vec_type_hint_short
852 ; CHECK-NEXT:   SymbolName:      'test_vec_type_hint_short@kd'
853 ; CHECK-NEXT:   Language:        OpenCL C
854 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
855 ; CHECK-NEXT:   Attrs:
856 ; CHECK-NEXT:       VecTypeHint:   short
857 ; CHECK-NEXT:   Args:
858 ; CHECK-NEXT:     - Name:          a
859 ; CHECK-NEXT:       TypeName:      int
860 ; CHECK-NEXT:       Size:          4
861 ; CHECK-NEXT:       Align:         4
862 ; CHECK-NEXT:       ValueKind:     ByValue
863 ; CHECK-NEXT:       ValueType:     I32
864 ; CHECK-NEXT:       AccQual:       Default
865 ; CHECK-NEXT:     - Size:          8
866 ; CHECK-NEXT:       Align:         8
867 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
868 ; CHECK-NEXT:       ValueType:     I64
869 ; CHECK-NEXT:     - Size:          8
870 ; CHECK-NEXT:       Align:         8
871 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
872 ; CHECK-NEXT:       ValueType:     I64
873 ; CHECK-NEXT:     - Size:          8
874 ; CHECK-NEXT:       Align:         8
875 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
876 ; CHECK-NEXT:       ValueType:     I64
877 ; CHECK-NEXT:     - Size:          8
878 ; CHECK-NEXT:       Align:         8
879 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
880 ; CHECK-NEXT:       ValueType:     I8
881 ; CHECK-NEXT:       AddrSpaceQual: Global
882 define amdgpu_kernel void @test_vec_type_hint_short(i32 %a) #0
883     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
884     !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !30 {
885   ret void
886 }
887
888 ; CHECK:      - Name:            test_vec_type_hint_long
889 ; CHECK-NEXT:   SymbolName:      'test_vec_type_hint_long@kd'
890 ; CHECK-NEXT:   Language:        OpenCL C
891 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
892 ; CHECK-NEXT:   Attrs:
893 ; CHECK-NEXT:       VecTypeHint:   long
894 ; CHECK-NEXT:   Args:
895 ; CHECK-NEXT:     - Name:          a
896 ; CHECK-NEXT:       TypeName:      int
897 ; CHECK-NEXT:       Size:          4
898 ; CHECK-NEXT:       Align:         4
899 ; CHECK-NEXT:       ValueKind:     ByValue
900 ; CHECK-NEXT:       ValueType:     I32
901 ; CHECK-NEXT:       AccQual:       Default
902 ; CHECK-NEXT:     - Size:          8
903 ; CHECK-NEXT:       Align:         8
904 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
905 ; CHECK-NEXT:       ValueType:     I64
906 ; CHECK-NEXT:     - Size:          8
907 ; CHECK-NEXT:       Align:         8
908 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
909 ; CHECK-NEXT:       ValueType:     I64
910 ; CHECK-NEXT:     - Size:          8
911 ; CHECK-NEXT:       Align:         8
912 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
913 ; CHECK-NEXT:       ValueType:     I64
914 ; CHECK-NEXT:     - Size:          8
915 ; CHECK-NEXT:       Align:         8
916 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
917 ; CHECK-NEXT:       ValueType:     I8
918 ; CHECK-NEXT:       AddrSpaceQual: Global
919 define amdgpu_kernel void @test_vec_type_hint_long(i32 %a) #0
920     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
921     !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !31 {
922   ret void
923 }
924
925 ; CHECK:      - Name:            test_vec_type_hint_unknown
926 ; CHECK-NEXT:   SymbolName:      'test_vec_type_hint_unknown@kd'
927 ; CHECK-NEXT:   Language:        OpenCL C
928 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
929 ; CHECK-NEXT:   Attrs:
930 ; CHECK-NEXT:       VecTypeHint:   unknown
931 ; CHECK-NEXT:   Args:
932 ; CHECK-NEXT:     - Name:          a
933 ; CHECK-NEXT:       TypeName:      int
934 ; CHECK-NEXT:       Size:          4
935 ; CHECK-NEXT:       Align:         4
936 ; CHECK-NEXT:       ValueKind:     ByValue
937 ; CHECK-NEXT:       ValueType:     I32
938 ; CHECK-NEXT:       AccQual:       Default
939 ; CHECK-NEXT:     - Size:          8
940 ; CHECK-NEXT:       Align:         8
941 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
942 ; CHECK-NEXT:       ValueType:     I64
943 ; CHECK-NEXT:     - Size:          8
944 ; CHECK-NEXT:       Align:         8
945 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
946 ; CHECK-NEXT:       ValueType:     I64
947 ; CHECK-NEXT:     - Size:          8
948 ; CHECK-NEXT:       Align:         8
949 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
950 ; CHECK-NEXT:       ValueType:     I64
951 ; CHECK-NEXT:     - Size:          8
952 ; CHECK-NEXT:       Align:         8
953 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
954 ; CHECK-NEXT:       ValueType:     I8
955 ; CHECK-NEXT:       AddrSpaceQual: Global
956 define amdgpu_kernel void @test_vec_type_hint_unknown(i32 %a) #0
957     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
958     !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !32 {
959   ret void
960 }
961
962 ; CHECK:      - Name:            test_reqd_wgs_vec_type_hint
963 ; CHECK-NEXT:   SymbolName:      'test_reqd_wgs_vec_type_hint@kd'
964 ; CHECK-NEXT:   Language:        OpenCL C
965 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
966 ; CHECK-NEXT:   Attrs:
967 ; CHECK-NEXT:       ReqdWorkGroupSize: [ 1, 2, 4 ]
968 ; CHECK-NEXT:       VecTypeHint:       int
969 ; CHECK-NEXT:   Args:
970 ; CHECK-NEXT:     - Name:              a
971 ; CHECK-NEXT:       TypeName:          int
972 ; CHECK-NEXT:       Size:              4
973 ; CHECK-NEXT:       Align:             4
974 ; CHECK-NEXT:       ValueKind:         ByValue
975 ; CHECK-NEXT:       ValueType:         I32
976 ; CHECK-NEXT:       AccQual:           Default
977 ; CHECK-NEXT:     - Size:              8
978 ; CHECK-NEXT:       Align:             8
979 ; CHECK-NEXT:       ValueKind:         HiddenGlobalOffsetX
980 ; CHECK-NEXT:       ValueType:         I64
981 ; CHECK-NEXT:     - Size:              8
982 ; CHECK-NEXT:       Align:             8
983 ; CHECK-NEXT:       ValueKind:         HiddenGlobalOffsetY
984 ; CHECK-NEXT:       ValueType:         I64
985 ; CHECK-NEXT:     - Size:              8
986 ; CHECK-NEXT:       Align:             8
987 ; CHECK-NEXT:       ValueKind:         HiddenGlobalOffsetZ
988 ; CHECK-NEXT:       ValueType:         I64
989 ; CHECK-NEXT:     - Size:              8
990 ; CHECK-NEXT:       Align:             8
991 ; CHECK-NEXT:       ValueKind:         HiddenPrintfBuffer
992 ; CHECK-NEXT:       ValueType:         I8
993 ; CHECK-NEXT:       AddrSpaceQual:     Global
994 define amdgpu_kernel void @test_reqd_wgs_vec_type_hint(i32 %a) #0
995     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
996     !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !5
997     !reqd_work_group_size !6 {
998   ret void
999 }
1000
1001 ; CHECK:      - Name:            test_wgs_hint_vec_type_hint
1002 ; CHECK-NEXT:   SymbolName:      'test_wgs_hint_vec_type_hint@kd'
1003 ; CHECK-NEXT:   Language:        OpenCL C
1004 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
1005 ; CHECK-NEXT:   Attrs:
1006 ; CHECK-NEXT:       WorkGroupSizeHint: [ 8, 16, 32 ]
1007 ; CHECK-NEXT:       VecTypeHint:       uint4
1008 ; CHECK-NEXT:   Args:
1009 ; CHECK-NEXT:     - Name:              a
1010 ; CHECK-NEXT:       TypeName:          int
1011 ; CHECK-NEXT:       Size:              4
1012 ; CHECK-NEXT:       Align:             4
1013 ; CHECK-NEXT:       ValueKind:         ByValue
1014 ; CHECK-NEXT:       ValueType:         I32
1015 ; CHECK-NEXT:       AccQual:           Default
1016 ; CHECK-NEXT:     - Size:              8
1017 ; CHECK-NEXT:       Align:             8
1018 ; CHECK-NEXT:       ValueKind:         HiddenGlobalOffsetX
1019 ; CHECK-NEXT:       ValueType:         I64
1020 ; CHECK-NEXT:     - Size:              8
1021 ; CHECK-NEXT:       Align:             8
1022 ; CHECK-NEXT:       ValueKind:         HiddenGlobalOffsetY
1023 ; CHECK-NEXT:       ValueType:         I64
1024 ; CHECK-NEXT:     - Size:              8
1025 ; CHECK-NEXT:       Align:             8
1026 ; CHECK-NEXT:       ValueKind:         HiddenGlobalOffsetZ
1027 ; CHECK-NEXT:       ValueType:         I64
1028 ; CHECK-NEXT:     - Size:              8
1029 ; CHECK-NEXT:       Align:             8
1030 ; CHECK-NEXT:       ValueKind:         HiddenPrintfBuffer
1031 ; CHECK-NEXT:       ValueType:         I8
1032 ; CHECK-NEXT:       AddrSpaceQual:     Global
1033 define amdgpu_kernel void @test_wgs_hint_vec_type_hint(i32 %a) #0
1034     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !3
1035     !kernel_arg_base_type !3 !kernel_arg_type_qual !4 !vec_type_hint !7
1036     !work_group_size_hint !8 {
1037   ret void
1038 }
1039
1040 ; CHECK:      - Name:            test_arg_ptr_to_ptr
1041 ; CHECK-NEXT:   SymbolName:      'test_arg_ptr_to_ptr@kd'
1042 ; CHECK-NEXT:   Language:        OpenCL C
1043 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
1044 ; CHECK-NEXT:   Args:
1045 ; CHECK-NEXT:     - Name:          a
1046 ; CHECK-NEXT:       TypeName:      'int  addrspace(5)* addrspace(5)*'
1047 ; CHECK-NEXT:       Size:          8
1048 ; CHECK-NEXT:       Align:         8
1049 ; CHECK-NEXT:       ValueKind:     GlobalBuffer
1050 ; CHECK-NEXT:       ValueType:     I32
1051 ; CHECK-NEXT:       AddrSpaceQual: Global
1052 ; CHECK-NEXT:       AccQual:       Default
1053 ; CHECK-NEXT:     - Size:          8
1054 ; CHECK-NEXT:       Align:         8
1055 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
1056 ; CHECK-NEXT:       ValueType:     I64
1057 ; CHECK-NEXT:     - Size:          8
1058 ; CHECK-NEXT:       Align:         8
1059 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
1060 ; CHECK-NEXT:       ValueType:     I64
1061 ; CHECK-NEXT:     - Size:          8
1062 ; CHECK-NEXT:       Align:         8
1063 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
1064 ; CHECK-NEXT:       ValueType:     I64
1065 ; CHECK-NEXT:     - Size:          8
1066 ; CHECK-NEXT:       Align:         8
1067 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
1068 ; CHECK-NEXT:       ValueType:     I8
1069 ; CHECK-NEXT:       AddrSpaceQual: Global
1070 define amdgpu_kernel void @test_arg_ptr_to_ptr(i32 addrspace(5)* addrspace(1)* %a) #0
1071     !kernel_arg_addr_space !81 !kernel_arg_access_qual !2 !kernel_arg_type !80
1072     !kernel_arg_base_type !80 !kernel_arg_type_qual !4 {
1073   ret void
1074 }
1075
1076 ; CHECK:      - Name:            test_arg_struct_contains_ptr
1077 ; CHECK-NEXT:   SymbolName:      'test_arg_struct_contains_ptr@kd'
1078 ; CHECK-NEXT:   Language:        OpenCL C
1079 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
1080 ; CHECK-NEXT:   Args:
1081 ; CHECK-NEXT:     - Name:          a
1082 ; CHECK-NEXT:       TypeName:      struct B
1083 ; CHECK-NEXT:       Size:          4
1084 ; CHECK-NEXT:       Align:         4
1085 ; CHECK-NEXT:       ValueKind:     GlobalBuffer
1086 ; CHECK-NEXT:       ValueType:     Struct
1087 ; CHECK-NEXT:       AddrSpaceQual: Private
1088 ; CHECK-NEXT:       AccQual:       Default
1089 ; CHECK-NEXT:     - Size:          8
1090 ; CHECK-NEXT:       Align:         8
1091 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
1092 ; CHECK-NEXT:       ValueType:     I64
1093 ; CHECK-NEXT:     - Size:          8
1094 ; CHECK-NEXT:       Align:         8
1095 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
1096 ; CHECK-NEXT:       ValueType:     I64
1097 ; CHECK-NEXT:     - Size:          8
1098 ; CHECK-NEXT:       Align:         8
1099 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
1100 ; CHECK-NEXT:       ValueType:     I64
1101 ; CHECK-NEXT:     - Size:          8
1102 ; CHECK-NEXT:       Align:         8
1103 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
1104 ; CHECK-NEXT:       ValueType:     I8
1105 ; CHECK-NEXT:       AddrSpaceQual: Global
1106 define amdgpu_kernel void @test_arg_struct_contains_ptr(%struct.B addrspace(5)* byval %a) #0
1107     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !82
1108     !kernel_arg_base_type !82 !kernel_arg_type_qual !4 {
1109  ret void
1110 }
1111
1112 ; CHECK:      - Name:            test_arg_vector_of_ptr
1113 ; CHECK-NEXT:   SymbolName:      'test_arg_vector_of_ptr@kd'
1114 ; CHECK-NEXT:   Language:        OpenCL C
1115 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
1116 ; CHECK-NEXT:   Args:
1117 ; CHECK-NEXT:     - Name:          a
1118 ; CHECK-NEXT:       TypeName:      'global int addrspace(5)* __attribute__((ext_vector_type(2)))'
1119 ; CHECK-NEXT:       Size:          16
1120 ; CHECK-NEXT:       Align:         16
1121 ; CHECK-NEXT:       ValueKind:     ByValue
1122 ; CHECK-NEXT:       ValueType:     I32
1123 ; CHECK-NEXT:       AccQual:       Default
1124 ; CHECK-NEXT:     - Size:          8
1125 ; CHECK-NEXT:       Align:         8
1126 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
1127 ; CHECK-NEXT:       ValueType:     I64
1128 ; CHECK-NEXT:     - Size:          8
1129 ; CHECK-NEXT:       Align:         8
1130 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
1131 ; CHECK-NEXT:       ValueType:     I64
1132 ; CHECK-NEXT:     - Size:          8
1133 ; CHECK-NEXT:       Align:         8
1134 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
1135 ; CHECK-NEXT:       ValueType:     I64
1136 ; CHECK-NEXT:     - Size:          8
1137 ; CHECK-NEXT:       Align:         8
1138 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
1139 ; CHECK-NEXT:       ValueType:     I8
1140 ; CHECK-NEXT:       AddrSpaceQual: Global
1141 define amdgpu_kernel void @test_arg_vector_of_ptr(<2 x i32 addrspace(1)*> %a) #0
1142     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !83
1143     !kernel_arg_base_type !83 !kernel_arg_type_qual !4 {
1144   ret void
1145 }
1146
1147 ; CHECK:      - Name:            test_arg_unknown_builtin_type
1148 ; CHECK-NEXT:   SymbolName:      'test_arg_unknown_builtin_type@kd'
1149 ; CHECK-NEXT:   Language:        OpenCL C
1150 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
1151 ; CHECK-NEXT:   Args:
1152 ; CHECK-NEXT:     - Name:          a
1153 ; CHECK-NEXT:       TypeName:      clk_event_t
1154 ; CHECK-NEXT:       Size:          8
1155 ; CHECK-NEXT:       Align:         8
1156 ; CHECK-NEXT:       ValueKind:     GlobalBuffer
1157 ; CHECK-NEXT:       ValueType:     Struct
1158 ; CHECK-NEXT:       AddrSpaceQual: Global
1159 ; CHECK-NEXT:       AccQual:       Default
1160 ; CHECK-NEXT:     - Size:          8
1161 ; CHECK-NEXT:       Align:         8
1162 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
1163 ; CHECK-NEXT:       ValueType:     I64
1164 ; CHECK-NEXT:     - Size:          8
1165 ; CHECK-NEXT:       Align:         8
1166 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
1167 ; CHECK-NEXT:       ValueType:     I64
1168 ; CHECK-NEXT:     - Size:          8
1169 ; CHECK-NEXT:       Align:         8
1170 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
1171 ; CHECK-NEXT:       ValueType:     I64
1172 ; CHECK-NEXT:     - Size:          8
1173 ; CHECK-NEXT:       Align:         8
1174 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
1175 ; CHECK-NEXT:       ValueType:     I8
1176 ; CHECK-NEXT:       AddrSpaceQual: Global
1177 define amdgpu_kernel void @test_arg_unknown_builtin_type(
1178     %opencl.clk_event_t addrspace(1)* %a) #0
1179     !kernel_arg_addr_space !81 !kernel_arg_access_qual !2 !kernel_arg_type !84
1180     !kernel_arg_base_type !84 !kernel_arg_type_qual !4 {
1181   ret void
1182 }
1183
1184 ; CHECK:      - Name:            test_pointee_align
1185 ; CHECK-NEXT:   SymbolName:      'test_pointee_align@kd'
1186 ; CHECK-NEXT:   Language:        OpenCL C
1187 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
1188 ; CHECK-NEXT:   Args:
1189 ; CHECK-NEXT:     - Name:          a
1190 ; CHECK-NEXT:       TypeName:      'long  addrspace(5)*'
1191 ; CHECK-NEXT:       Size:          8
1192 ; CHECK-NEXT:       Align:         8
1193 ; CHECK-NEXT:       ValueKind:     GlobalBuffer
1194 ; CHECK-NEXT:       ValueType:     I64
1195 ; CHECK-NEXT:       AddrSpaceQual: Global
1196 ; CHECK-NEXT:       AccQual:       Default
1197 ; CHECK-NEXT:     - Name:          b
1198 ; CHECK-NEXT:       TypeName:      'char  addrspace(5)*'
1199 ; CHECK-NEXT:       Size:          4
1200 ; CHECK-NEXT:       Align:         4
1201 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1202 ; CHECK-NEXT:       ValueType:     I8
1203 ; CHECK-NEXT:       PointeeAlign:  1
1204 ; CHECK-NEXT:       AddrSpaceQual: Local
1205 ; CHECK-NEXT:       AccQual:       Default
1206 ; CHECK-NEXT:     - Name:          c
1207 ; CHECK-NEXT:       TypeName:      'char2  addrspace(5)*'
1208 ; CHECK-NEXT:       Size:          4
1209 ; CHECK-NEXT:       Align:         4
1210 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1211 ; CHECK-NEXT:       ValueType:     I8
1212 ; CHECK-NEXT:       PointeeAlign:  2
1213 ; CHECK-NEXT:       AddrSpaceQual: Local
1214 ; CHECK-NEXT:       AccQual:       Default
1215 ; CHECK-NEXT:     - Name:          d
1216 ; CHECK-NEXT:       TypeName:      'char3  addrspace(5)*'
1217 ; CHECK-NEXT:       Size:          4
1218 ; CHECK-NEXT:       Align:         4
1219 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1220 ; CHECK-NEXT:       ValueType:     I8
1221 ; CHECK-NEXT:       PointeeAlign:  4
1222 ; CHECK-NEXT:       AddrSpaceQual: Local
1223 ; CHECK-NEXT:       AccQual:       Default
1224 ; CHECK-NEXT:     - Name:          e
1225 ; CHECK-NEXT:       TypeName:      'char4  addrspace(5)*'
1226 ; CHECK-NEXT:       Size:          4
1227 ; CHECK-NEXT:       Align:         4
1228 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1229 ; CHECK-NEXT:       ValueType:     I8
1230 ; CHECK-NEXT:       PointeeAlign:  4
1231 ; CHECK-NEXT:       AddrSpaceQual: Local
1232 ; CHECK-NEXT:       AccQual:       Default
1233 ; CHECK-NEXT:     - Name:          f
1234 ; CHECK-NEXT:       TypeName:      'char8  addrspace(5)*'
1235 ; CHECK-NEXT:       Size:          4
1236 ; CHECK-NEXT:       Align:         4
1237 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1238 ; CHECK-NEXT:       ValueType:     I8
1239 ; CHECK-NEXT:       PointeeAlign:  8
1240 ; CHECK-NEXT:       AddrSpaceQual: Local
1241 ; CHECK-NEXT:       AccQual:       Default
1242 ; CHECK-NEXT:     - Name:          g
1243 ; CHECK-NEXT:       TypeName:      'char16  addrspace(5)*'
1244 ; CHECK-NEXT:       Size:          4
1245 ; CHECK-NEXT:       Align:         4
1246 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1247 ; CHECK-NEXT:       ValueType:     I8
1248 ; CHECK-NEXT:       PointeeAlign:  16
1249 ; CHECK-NEXT:       AddrSpaceQual: Local
1250 ; CHECK-NEXT:       AccQual:       Default
1251 ; CHECK-NEXT:      - Name:            h
1252 ; CHECK-NEXT:        Size:            4
1253 ; CHECK-NEXT:        Align:           4
1254 ; CHECK-NEXT:        ValueKind:       DynamicSharedPointer
1255 ; CHECK-NEXT:        ValueType:       Struct
1256 ; CHECK-NEXT:        PointeeAlign:    1
1257 ; CHECK-NEXT:        AddrSpaceQual:   Local
1258 ; CHECK-NEXT:     - Size:          8
1259 ; CHECK-NEXT:       Align:         8
1260 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
1261 ; CHECK-NEXT:       ValueType:     I64
1262 ; CHECK-NEXT:     - Size:          8
1263 ; CHECK-NEXT:       Align:         8
1264 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
1265 ; CHECK-NEXT:       ValueType:     I64
1266 ; CHECK-NEXT:     - Size:          8
1267 ; CHECK-NEXT:       Align:         8
1268 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
1269 ; CHECK-NEXT:       ValueType:     I64
1270 ; CHECK-NEXT:     - Size:          8
1271 ; CHECK-NEXT:       Align:         8
1272 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
1273 ; CHECK-NEXT:       ValueType:     I8
1274 ; CHECK-NEXT:       AddrSpaceQual: Global
1275 define amdgpu_kernel void @test_pointee_align(i64 addrspace(1)* %a,
1276                                               i8 addrspace(3)* %b,
1277                                               <2 x i8> addrspace(3)* %c,
1278                                               <3 x i8> addrspace(3)* %d,
1279                                               <4 x i8> addrspace(3)* %e,
1280                                               <8 x i8> addrspace(3)* %f,
1281                                               <16 x i8> addrspace(3)* %g,
1282                                               {} addrspace(3)* %h) #0
1283     !kernel_arg_addr_space !91 !kernel_arg_access_qual !92 !kernel_arg_type !93
1284     !kernel_arg_base_type !93 !kernel_arg_type_qual !94 {
1285   ret void
1286 }
1287
1288 ; CHECK:      - Name:            test_pointee_align_attribute
1289 ; CHECK-NEXT:   SymbolName:      'test_pointee_align_attribute@kd'
1290 ; CHECK-NEXT:   Language:        OpenCL C
1291 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
1292 ; CHECK-NEXT:   Args:
1293 ; CHECK-NEXT:     - Name:          a
1294 ; CHECK-NEXT:       TypeName:      'long  addrspace(5)*'
1295 ; CHECK-NEXT:       Size:          8
1296 ; CHECK-NEXT:       Align:         8
1297 ; CHECK-NEXT:       ValueKind:     GlobalBuffer
1298 ; CHECK-NEXT:       ValueType:     I64
1299 ; CHECK-NEXT:       AddrSpaceQual: Global
1300 ; CHECK-NEXT:       AccQual:       Default
1301 ; CHECK-NEXT:     - Name:          b
1302 ; CHECK-NEXT:       TypeName:      'char  addrspace(5)*'
1303 ; CHECK-NEXT:       Size:          4
1304 ; CHECK-NEXT:       Align:         4
1305 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1306 ; CHECK-NEXT:       ValueType:     I8
1307 ; CHECK-NEXT:       PointeeAlign:  8
1308 ; CHECK-NEXT:       AddrSpaceQual: Local
1309 ; CHECK-NEXT:       AccQual:       Default
1310 ; CHECK-NEXT:     - Name:          c
1311 ; CHECK-NEXT:       TypeName:      'char2  addrspace(5)*'
1312 ; CHECK-NEXT:       Size:          4
1313 ; CHECK-NEXT:       Align:         4
1314 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1315 ; CHECK-NEXT:       ValueType:     I8
1316 ; CHECK-NEXT:       PointeeAlign:  32
1317 ; CHECK-NEXT:       AddrSpaceQual: Local
1318 ; CHECK-NEXT:       AccQual:       Default
1319 ; CHECK-NEXT:     - Name:          d
1320 ; CHECK-NEXT:       TypeName:      'char3  addrspace(5)*'
1321 ; CHECK-NEXT:       Size:          4
1322 ; CHECK-NEXT:       Align:         4
1323 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1324 ; CHECK-NEXT:       ValueType:     I8
1325 ; CHECK-NEXT:       PointeeAlign:  64
1326 ; CHECK-NEXT:       AddrSpaceQual: Local
1327 ; CHECK-NEXT:       AccQual:       Default
1328 ; CHECK-NEXT:     - Name:          e
1329 ; CHECK-NEXT:       TypeName:      'char4  addrspace(5)*'
1330 ; CHECK-NEXT:       Size:          4
1331 ; CHECK-NEXT:       Align:         4
1332 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1333 ; CHECK-NEXT:       ValueType:     I8
1334 ; CHECK-NEXT:       PointeeAlign:  256
1335 ; CHECK-NEXT:       AddrSpaceQual: Local
1336 ; CHECK-NEXT:       AccQual:       Default
1337 ; CHECK-NEXT:     - Name:          f
1338 ; CHECK-NEXT:       TypeName:      'char8  addrspace(5)*'
1339 ; CHECK-NEXT:       Size:          4
1340 ; CHECK-NEXT:       Align:         4
1341 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1342 ; CHECK-NEXT:       ValueType:     I8
1343 ; CHECK-NEXT:       PointeeAlign:  128
1344 ; CHECK-NEXT:       AddrSpaceQual: Local
1345 ; CHECK-NEXT:       AccQual:       Default
1346 ; CHECK-NEXT:     - Name:          g
1347 ; CHECK-NEXT:       TypeName:      'char16  addrspace(5)*'
1348 ; CHECK-NEXT:       Size:          4
1349 ; CHECK-NEXT:       Align:         4
1350 ; CHECK-NEXT:       ValueKind:     DynamicSharedPointer
1351 ; CHECK-NEXT:       ValueType:     I8
1352 ; CHECK-NEXT:       PointeeAlign:  1024
1353 ; CHECK-NEXT:       AddrSpaceQual: Local
1354 ; CHECK-NEXT:       AccQual:       Default
1355 ; CHECK-NEXT:      - Name:            h
1356 ; CHECK-NEXT:        Size:            4
1357 ; CHECK-NEXT:        Align:           4
1358 ; CHECK-NEXT:        ValueKind:       DynamicSharedPointer
1359 ; CHECK-NEXT:        ValueType:       Struct
1360 ; CHECK-NEXT:        PointeeAlign:    16
1361 ; CHECK-NEXT:        AddrSpaceQual:   Local
1362 ; CHECK-NEXT:     - Size:          8
1363 ; CHECK-NEXT:       Align:         8
1364 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
1365 ; CHECK-NEXT:       ValueType:     I64
1366 ; CHECK-NEXT:     - Size:          8
1367 ; CHECK-NEXT:       Align:         8
1368 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
1369 ; CHECK-NEXT:       ValueType:     I64
1370 ; CHECK-NEXT:     - Size:          8
1371 ; CHECK-NEXT:       Align:         8
1372 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
1373 ; CHECK-NEXT:       ValueType:     I64
1374 ; CHECK-NEXT:     - Size:          8
1375 ; CHECK-NEXT:       Align:         8
1376 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
1377 ; CHECK-NEXT:       ValueType:     I8
1378 ; CHECK-NEXT:       AddrSpaceQual: Global
1379 define amdgpu_kernel void @test_pointee_align_attribute(i64 addrspace(1)* align 16 %a,
1380                                                         i8 addrspace(3)* align 8 %b,
1381                                                         <2 x i8> addrspace(3)* align 32 %c,
1382                                                         <3 x i8> addrspace(3)* align 64 %d,
1383                                                         <4 x i8> addrspace(3)* align 256 %e,
1384                                                         <8 x i8> addrspace(3)* align 128 %f,
1385                                                         <16 x i8> addrspace(3)* align 1024 %g,
1386                                                         {} addrspace(3)* align 16 %h) #0
1387     !kernel_arg_addr_space !91 !kernel_arg_access_qual !92 !kernel_arg_type !93
1388     !kernel_arg_base_type !93 !kernel_arg_type_qual !94 {
1389   ret void
1390 }
1391
1392
1393 ; CHECK:      - Name:            __test_block_invoke_kernel
1394 ; CHECK-NEXT:   SymbolName:      '__test_block_invoke_kernel@kd'
1395 ; CHECK-NEXT:   Language:        OpenCL C
1396 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
1397 ; CHECK-NEXT:   Attrs:
1398 ; CHECK-NEXT:       RuntimeHandle: __test_block_invoke_kernel_runtime_handle
1399 ; CHECK-NEXT:   Args:
1400 ; CHECK-NEXT:     - Name:          arg
1401 ; CHECK-NEXT:       TypeName:      __block_literal
1402 ; CHECK-NEXT:       Size:          25
1403 ; CHECK-NEXT:       Align:         1
1404 ; CHECK-NEXT:       ValueKind:     ByValue
1405 ; CHECK-NEXT:       ValueType:     Struct
1406 ; CHECK-NEXT:       AccQual:       Default
1407 ; CHECK-NEXT:     - Size:          8
1408 ; CHECK-NEXT:       Align:         8
1409 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
1410 ; CHECK-NEXT:       ValueType:     I64
1411 ; CHECK-NEXT:     - Size:          8
1412 ; CHECK-NEXT:       Align:         8
1413 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
1414 ; CHECK-NEXT:       ValueType:     I64
1415 ; CHECK-NEXT:     - Size:          8
1416 ; CHECK-NEXT:       Align:         8
1417 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
1418 ; CHECK-NEXT:       ValueType:     I64
1419 ; CHECK-NEXT:     - Size:          8
1420 ; CHECK-NEXT:       Align:         8
1421 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
1422 ; CHECK-NEXT:       ValueType:     I8
1423 ; CHECK-NEXT:       AddrSpaceQual: Global
1424 define amdgpu_kernel void @__test_block_invoke_kernel(
1425     <{ i32, i32, i8*, i8 addrspace(1)*, i8 }> %arg) #1
1426     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !110
1427     !kernel_arg_base_type !110 !kernel_arg_type_qual !4 {
1428   ret void
1429 }
1430
1431 ; CHECK:      - Name:            test_enqueue_kernel_caller
1432 ; CHECK-NEXT:   SymbolName:      'test_enqueue_kernel_caller@kd'
1433 ; CHECK-NEXT:   Language:        OpenCL C
1434 ; CHECK-NEXT:   LanguageVersion: [ 2, 0 ]
1435 ; CHECK-NEXT:   Args:
1436 ; CHECK-NEXT:     - Name:          a
1437 ; CHECK-NEXT:       TypeName:      char
1438 ; CHECK-NEXT:       Size:          1
1439 ; CHECK-NEXT:       Align:         1
1440 ; CHECK-NEXT:       ValueKind:     ByValue
1441 ; CHECK-NEXT:       ValueType:     I8
1442 ; CHECK-NEXT:       AccQual:       Default
1443 ; CHECK-NEXT:     - Size:          8
1444 ; CHECK-NEXT:       Align:         8
1445 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetX
1446 ; CHECK-NEXT:       ValueType:     I64
1447 ; CHECK-NEXT:     - Size:          8
1448 ; CHECK-NEXT:       Align:         8
1449 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetY
1450 ; CHECK-NEXT:       ValueType:     I64
1451 ; CHECK-NEXT:     - Size:          8
1452 ; CHECK-NEXT:       Align:         8
1453 ; CHECK-NEXT:       ValueKind:     HiddenGlobalOffsetZ
1454 ; CHECK-NEXT:       ValueType:     I64
1455 ; CHECK-NEXT:     - Size:          8
1456 ; CHECK-NEXT:       Align:         8
1457 ; CHECK-NEXT:       ValueKind:     HiddenPrintfBuffer
1458 ; CHECK-NEXT:       ValueType:     I8
1459 ; CHECK-NEXT:       AddrSpaceQual: Global
1460 ; CHECK-NEXT:     - Size:          8
1461 ; CHECK-NEXT:       Align:         8
1462 ; CHECK-NEXT:       ValueKind:     HiddenDefaultQueue
1463 ; CHECK-NEXT:       ValueType:     I8
1464 ; CHECK-NEXT:       AddrSpaceQual: Global
1465 ; CHECK-NEXT:     - Size:          8
1466 ; CHECK-NEXT:       Align:         8
1467 ; CHECK-NEXT:       ValueKind:     HiddenCompletionAction
1468 ; CHECK-NEXT:       ValueType:     I8
1469 ; CHECK-NEXT:       AddrSpaceQual: Global
1470 define amdgpu_kernel void @test_enqueue_kernel_caller(i8 %a) #2
1471     !kernel_arg_addr_space !1 !kernel_arg_access_qual !2 !kernel_arg_type !9
1472     !kernel_arg_base_type !9 !kernel_arg_type_qual !4 {
1473   ret void
1474 }
1475
1476 ; CHECK: - Name:            unknown_addrspace_kernarg
1477 ; CHECK: Args:
1478 ; CHECK-NEXT: - Name:            ptr
1479 ; CHECK-NEXT: Size:            8
1480 ; CHECK-NEXT: Align:           8
1481 ; CHECK-NEXT: ValueKind:       GlobalBuffer
1482 ; CHECK-NEXT: ValueType:       I32
1483 define amdgpu_kernel void @unknown_addrspace_kernarg(i32 addrspace(12345)* %ptr) #0 {
1484   ret void
1485 }
1486
1487 attributes #0 = { "amdgpu-implicitarg-num-bytes"="48" }
1488 attributes #1 = { "amdgpu-implicitarg-num-bytes"="48" "runtime-handle"="__test_block_invoke_kernel_runtime_handle" }
1489 attributes #2 = { "amdgpu-implicitarg-num-bytes"="48" "calls-enqueue-kernel" }
1490
1491 !llvm.printf.fmts = !{!100, !101}
1492
1493 !1 = !{i32 0}
1494 !2 = !{!"none"}
1495 !3 = !{!"int"}
1496 !4 = !{!""}
1497 !5 = !{i32 undef, i32 1}
1498 !6 = !{i32 1, i32 2, i32 4}
1499 !7 = !{<4 x i32> undef, i32 0}
1500 !8 = !{i32 8, i32 16, i32 32}
1501 !9 = !{!"char"}
1502 !10 = !{!"ushort2"}
1503 !11 = !{!"int3"}
1504 !12 = !{!"ulong4"}
1505 !13 = !{!"half8"}
1506 !14 = !{!"float16"}
1507 !15 = !{!"double16"}
1508 !16 = !{!"int  addrspace(5)*"}
1509 !17 = !{!"image2d_t"}
1510 !18 = !{!"sampler_t"}
1511 !19 = !{!"queue_t"}
1512 !20 = !{!"struct A"}
1513 !21 = !{!"i128"}
1514 !22 = !{i32 0, i32 0, i32 0}
1515 !23 = !{!"none", !"none", !"none"}
1516 !24 = !{!"int", !"short2", !"char3"}
1517 !25 = !{!"", !"", !""}
1518 !26 = !{half undef, i32 1}
1519 !27 = !{float undef, i32 1}
1520 !28 = !{double undef, i32 1}
1521 !29 = !{i8 undef, i32 1}
1522 !30 = !{i16 undef, i32 1}
1523 !31 = !{i64 undef, i32 1}
1524 !32 = !{i32  addrspace(5)*undef, i32 1}
1525 !50 = !{i32 1, i32 2, i32 3}
1526 !51 = !{!"int  addrspace(5)*", !"int  addrspace(5)*", !"int  addrspace(5)*"}
1527 !60 = !{i32 1, i32 1, i32 1}
1528 !61 = !{!"read_only", !"write_only", !"read_write"}
1529 !62 = !{!"image1d_t", !"image2d_t", !"image3d_t"}
1530 !70 = !{!"volatile", !"const restrict", !"pipe"}
1531 !80 = !{!"int  addrspace(5)* addrspace(5)*"}
1532 !81 = !{i32 1}
1533 !82 = !{!"struct B"}
1534 !83 = !{!"global int addrspace(5)* __attribute__((ext_vector_type(2)))"}
1535 !84 = !{!"clk_event_t"}
1536 !opencl.ocl.version = !{!90}
1537 !90 = !{i32 2, i32 0}
1538 !91 = !{i32 0, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3}
1539 !92 = !{!"none", !"none", !"none", !"none", !"none", !"none", !"none"}
1540 !93 = !{!"long  addrspace(5)*", !"char  addrspace(5)*", !"char2  addrspace(5)*", !"char3  addrspace(5)*", !"char4  addrspace(5)*", !"char8  addrspace(5)*", !"char16  addrspace(5)*"}
1541 !94 = !{!"", !"", !"", !"", !"", !"", !""}
1542 !100 = !{!"1:1:4:%d\5Cn"}
1543 !101 = !{!"2:1:8:%g\5Cn"}
1544 !110 = !{!"__block_literal"}
1545
1546 ; PARSER: AMDGPU HSA Metadata Parser Test: PASS