source: CLRX/CLRadeonExtender/trunk/tests/amdbin/ROCmMetadata.cpp @ 3758

Last change on this file since 3758 was 3758, checked in by matszpk, 2 years ago

CLRadeonExtender: ROCm: Add handling of the YAML type specifiers.

File size: 56.5 KB
Line 
1/*
2 *  CLRadeonExtender - Unofficial OpenCL Radeon Extensions Library
3 *  Copyright (C) 2014-2018 Mateusz Szpakowski
4 *
5 *  This library is free software; you can redistribute it and/or
6 *  modify it under the terms of the GNU Lesser General Public
7 *  License as published by the Free Software Foundation; either
8 *  version 2.1 of the License, or (at your option) any later version.
9 *
10 *  This library is distributed in the hope that it will be useful,
11 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 *  Lesser General Public License for more details.
14 *
15 *  You should have received a copy of the GNU Lesser General Public
16 *  License along with this library; if not, write to the Free Software
17 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18 */
19
20#include <CLRX/Config.h>
21#include <iostream>
22#include <sstream>
23#include <string>
24#include <cstring>
25#include <memory>
26#include <CLRX/utils/Containers.h>
27#include <CLRX/amdbin/ROCmBinaries.h>
28#include "../TestUtils.h"
29
30using namespace CLRX;
31
32struct ROCmMetadataTestCase
33{
34    const char* input;      // input metadata string
35    ROCmMetadata expected;
36    bool good;
37    const char* error;
38};
39
40static const ROCmMetadataTestCase rocmMetadataTestCases[] =
41{
42    {   // test 0
43        R"ffDXD(---
44Version:         [ 1, 0 ]
45Printf:         
46  - '1:1:4:index\72%d\n'
47  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
48Kernels:         
49  - Name:            vectorAdd
50    SymbolName:      'vectorAdd@kd'
51    Language:        OpenCL C
52    LanguageVersion: [ 1, 2 ]
53    Args:           
54      - Name:            n
55        TypeName:        uint
56        Size:            4
57        Align:           4
58        ValueKind:       ByValue
59        ValueType:       U32
60        AccQual:         Default
61      - Name:            a
62        TypeName:        'float*'
63        Size:            8
64        Align:           8
65        ValueKind:       GlobalBuffer
66        ValueType:       F32
67        AddrSpaceQual:   Global
68        AccQual:         Default
69        IsConst:         true
70      - Name:            b
71        TypeName:        'float*'
72        Size:            8
73        Align:           8
74        ValueKind:       GlobalBuffer
75        ValueType:       F32
76        AddrSpaceQual:   Global
77        AccQual:         Default
78        IsConst:         true
79      - Name:            c
80        TypeName:        'float*'
81        Size:            8
82        Align:           8
83        ValueKind:       GlobalBuffer
84        ValueType:       F32
85        AddrSpaceQual:   Global
86        AccQual:         Default
87      - Size:            8
88        Align:           8
89        ValueKind:       HiddenGlobalOffsetX
90        ValueType:       I64
91      - Size:            8
92        Align:           8
93        ValueKind:       HiddenGlobalOffsetY
94        ValueType:       I64
95      - Size:            8
96        Align:           8
97        ValueKind:       HiddenGlobalOffsetZ
98        ValueType:       I64
99      - Size:            8
100        Align:           8
101        ValueKind:       HiddenPrintfBuffer
102        ValueType:       I8
103        AddrSpaceQual:   Global
104    CodeProps:       
105      KernargSegmentSize: 64
106      GroupSegmentFixedSize: 0
107      PrivateSegmentFixedSize: 0
108      KernargSegmentAlign: 8
109      WavefrontSize:   64
110      NumSGPRs:        14
111      NumVGPRs:        11
112      MaxFlatWorkGroupSize: 256
113...
114)ffDXD",
115        {
116            { 1, 0 }, // version
117            {    // printfInfos
118                { 1, { 4 }, "index:%d\n" },
119                { 2, { 4, 4, 4, 4 }, "i=%d,a=%f,b=%f,c=%f\n" }
120            },
121            {
122                {   // kernel 0
123                    "vectorAdd", "vectorAdd@kd",
124                    {   // arguments
125                        { "n", "uint", 4, 4, 0, ROCmValueKind::BY_VALUE,
126                          ROCmValueType::UINT32, ROCmAddressSpace::NONE,
127                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
128                          false, false, false, false },
129                        { "a", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
130                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
131                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
132                          true, false, false, false },
133                        { "b", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
134                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
135                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
136                          true, false, false, false },
137                        { "c", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
138                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
139                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
140                          false, false, false, false },
141                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_X,
142                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
143                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
144                          false, false, false, false },
145                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Y,
146                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
147                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
148                          false, false, false, false },
149                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Z,
150                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
151                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
152                          false, false, false, false },
153                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_PRINTF_BUFFER,
154                          ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
155                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
156                          false, false, false, false }
157                    },
158                    "OpenCL C", { 1, 2 },
159                    { 0, 0, 0 },
160                    { 0, 0, 0 },
161                    "", "", 64, 0, 0, 8, 64,
162                    14, 11, 256,
163                    { 0, 0, 0 },
164                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
165                }
166            }
167        },
168        true, ""
169    },
170    {   // test 1
171        R"ffDXD(---
172Version:         [ 1, 0 ]
173Printf:         
174  - '1:1:4:index\72%d\n'
175  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
176Kernels:         
177  - Name:            vectorAdd
178    SymbolName:      'vectorAdd@kd'
179    Language:        OpenCL C
180    LanguageVersion: [ 1, 2 ]
181    Attrs:
182      ReqdWorkGroupSize:
183        - 7
184        - 9
185        - 11
186      WorkGroupSizeHint:
187        - 112
188        - 33
189        - 66
190      VecTypeHint: uint8
191      RuntimeHandle:  kernelRT
192    Args:           
193      - Name:            n
194        TypeName:        uint
195        Size:            4
196        Align:           4
197        ValueKind:       ByValue
198        ValueType:       U32
199        AccQual:         Default
200        ActualAccQual:   Default
201      - Name:            a
202        TypeName:        'float*'
203        Size:            8
204        Align:           16
205        PointeeAlign:    32
206        ValueKind:       GlobalBuffer
207        ValueType:       F32
208        AddrSpaceQual:   Global
209        AccQual:         ReadOnly
210        ActualAccQual:   ReadWrite
211        IsConst:         true
212      - Name:            b
213        TypeName:        'float*'
214        Size:            8
215        Align:           16
216        PointeeAlign:    32
217        ValueKind:       GlobalBuffer
218        ValueType:       F32
219        AddrSpaceQual:   Global
220        AccQual:         WriteOnly
221        ActualAccQual:   WriteOnly
222        IsConst:         true
223      - Name:            c
224        TypeName:        'float*'
225        Size:            8
226        Align:           8
227        ValueKind:       GlobalBuffer
228        ValueType:       F32
229        AddrSpaceQual:   Global
230        AccQual:         ReadWrite
231        ActualAccQual:   ReadOnly
232      - Size:            8
233        Align:           8
234        ValueKind:       HiddenGlobalOffsetX
235        ValueType:       I64
236      - Size:            8
237        Align:           8
238        ValueKind:       HiddenGlobalOffsetY
239        ValueType:       I64
240      - Size:            8
241        Align:           8
242        ValueKind:       HiddenGlobalOffsetZ
243        ValueType:       I64
244      - Size:            8
245        Align:           8
246        ValueKind:       HiddenPrintfBuffer
247        ValueType:       I8
248        AddrSpaceQual:   Global
249      - Size:            8
250        Align:           8
251        ValueKind:       HiddenCompletionAction
252        ValueType:       I8
253        AddrSpaceQual:   Global
254      - Size:            8
255        Align:           8
256        ValueKind:       HiddenNone
257        ValueType:       I8
258        AddrSpaceQual:   Global
259      - Size:            8
260        Align:           8
261        ValueKind:       HiddenDefaultQueue
262        ValueType:       I8
263        AddrSpaceQual:   Global
264    CodeProps:       
265      KernargSegmentSize: 64
266      GroupSegmentFixedSize: 120
267      PrivateSegmentFixedSize: 408
268      KernargSegmentAlign: 8
269      WavefrontSize:   64
270      NumSGPRs:        14
271      NumVGPRs:        11
272      MaxFlatWorkGroupSize: 256
273      FixedWorkGroupSize: [ 11, 91, 96 ]
274      NumSpilledSGPRs: 12
275      NumSpilledVGPRs: 37
276...
277)ffDXD",
278        {
279            { 1, 0 }, // version
280            {    // printfInfos
281                { 1, { 4 }, "index:%d\n" },
282                { 2, { 4, 4, 4, 4 }, "i=%d,a=%f,b=%f,c=%f\n" }
283            },
284            {
285                {   // kernel 0
286                    "vectorAdd", "vectorAdd@kd",
287                    {   // arguments
288                        { "n", "uint", 4, 4, 0, ROCmValueKind::BY_VALUE,
289                          ROCmValueType::UINT32, ROCmAddressSpace::NONE,
290                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
291                          false, false, false, false },
292                        { "a", "float*", 8, 16, 32, ROCmValueKind::GLOBAL_BUFFER,
293                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
294                          ROCmAccessQual::READ_ONLY, ROCmAccessQual::READ_WRITE,
295                          true, false, false, false },
296                        { "b", "float*", 8, 16, 32, ROCmValueKind::GLOBAL_BUFFER,
297                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
298                          ROCmAccessQual::WRITE_ONLY, ROCmAccessQual::WRITE_ONLY,
299                          true, false, false, false },
300                        { "c", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
301                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
302                          ROCmAccessQual::READ_WRITE, ROCmAccessQual::READ_ONLY,
303                          false, false, false, false },
304                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_X,
305                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
306                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
307                          false, false, false, false },
308                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Y,
309                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
310                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
311                          false, false, false, false },
312                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Z,
313                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
314                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
315                          false, false, false, false },
316                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_PRINTF_BUFFER,
317                          ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
318                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
319                          false, false, false, false },
320                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_COMPLETION_ACTION,
321                          ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
322                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
323                          false, false, false, false },
324                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_NONE,
325                          ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
326                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
327                          false, false, false, false },
328                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_DEFAULT_QUEUE,
329                          ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
330                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
331                          false, false, false, false }
332                    },
333                    "OpenCL C", { 1, 2 },
334                    { 7, 9, 11 },
335                    { 112, 33, 66 },
336                    "uint8", "kernelRT", 64, 120, 408, 8, 64,
337                    14, 11, 256,
338                    { 11, 91, 96 },
339                    12, 37
340                }
341            }
342        },
343        true, ""
344    },
345    {   // test 2 - printf
346        R"ffDXD(---
347Version:         [ 1, 0 ]
348Printf:         
349  - '1:1:4:index\72%d\n'
350  - '  2  :  4  :8  : 12  :  4 :  120 :i=%d,a=%f,b=%f,c=%f\n'
351  - '3:0:index\72%d\t\v\f\a\n'
352...
353)ffDXD",
354        {
355            { 1, 0 }, // version
356            { // printfInfos
357                { 1, { 4 }, "index:%d\n" },
358                { 2, {  8, 12, 4, 120 }, "i=%d,a=%f,b=%f,c=%f\n" },
359                { 3, { }, "index:%d\t\v\f\a\n" },
360            },
361            { }
362        },
363        true, ""
364    },
365    {   // test 3 - printf (in array)
366        R"ffDXD(---
367Version:         [ 1, 0 ]
368Printf: [
369  "1:1:4:index\72%d\n",
370  '  2  :  4  :8  : 12  :  4 :  120 :i=%d,a=%f,b=%f,c=%f\n',
371  '3:0:index\72%d\t\v\f\a\n' ]
372...
373)ffDXD",
374        {
375            { 1, 0 }, // version
376            { // printfInfos
377                { 1, { 4 }, "index:%d\n" },
378                { 2, {  8, 12, 4, 120 }, "i=%d,a=%f,b=%f,c=%f\n" },
379                { 3, { }, "index:%d\t\v\f\a\n" },
380            },
381            { }
382        },
383        true, ""
384    },
385    {   // test 4 - argument types
386        R"ffDXD(---
387Version:         [ 1, 0 ]
388Printf:         
389  - '1:1:4:index\72%d\n'
390  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
391Kernels:         
392  - Name:            vectorAdd
393    SymbolName:      'vectorAdd@kd'
394    Language:        OpenCL C
395    LanguageVersion: [ 1, 2 ]
396    Args:           
397      - Name:            n
398        TypeName:        uint
399        Size:            4
400        Align:           4
401        ValueKind:       ByValue
402        ValueType:       U32
403        AccQual:         Default
404      - Name:            a
405        TypeName:        'float*'
406        Size:            8
407        Align:           8
408        ValueKind:       GlobalBuffer
409        ValueType:       I8
410        AddrSpaceQual:   Global
411        AccQual:         Default
412        IsConst:         true
413      - Name:            b
414        TypeName:        'float*'
415        Size:            8
416        Align:           8
417        ValueKind:       GlobalBuffer
418        ValueType:       U8
419        AddrSpaceQual:   Global
420        AccQual:         Default
421        IsConst:         true
422      - Name:            c
423        TypeName:        'float*'
424        Size:            8
425        Align:           8
426        ValueKind:       GlobalBuffer
427        ValueType:       I16
428        AddrSpaceQual:   Global
429        AccQual:         Default
430      - Name:            d
431        TypeName:        'float*'
432        Size:            8
433        Align:           8
434        ValueKind:       GlobalBuffer
435        ValueType:       U16
436        AddrSpaceQual:   Global
437        AccQual:         Default
438      - Name:            e
439        TypeName:        'float*'
440        Size:            8
441        Align:           8
442        ValueKind:       GlobalBuffer
443        ValueType:       F16
444        AddrSpaceQual:   Global
445        AccQual:         Default
446      - Name:            f
447        TypeName:        'float*'
448        Size:            8
449        Align:           8
450        ValueKind:       GlobalBuffer
451        ValueType:       I32
452        AddrSpaceQual:   Global
453        AccQual:         Default
454      - Name:            g
455        TypeName:        'float*'
456        Size:            8
457        Align:           8
458        ValueKind:       GlobalBuffer
459        ValueType:       U32
460        AddrSpaceQual:   Global
461        AccQual:         Default
462      - Name:            h
463        TypeName:        'float*'
464        Size:            8
465        Align:           8
466        ValueKind:       GlobalBuffer
467        ValueType:       F32
468        AddrSpaceQual:   Global
469        AccQual:         Default
470      - Name:            i
471        TypeName:        'float*'
472        Size:            8
473        Align:           8
474        ValueKind:       GlobalBuffer
475        ValueType:       I64
476        AddrSpaceQual:   Global
477        AccQual:         Default
478      - Name:            j
479        TypeName:        'float*'
480        Size:            8
481        Align:           8
482        ValueKind:       GlobalBuffer
483        ValueType:       U64
484        AddrSpaceQual:   Global
485        AccQual:         Default
486      - Name:            k
487        TypeName:        'float*'
488        Size:            8
489        Align:           8
490        ValueKind:       GlobalBuffer
491        ValueType:       F64
492        AddrSpaceQual:   Global
493        AccQual:         Default
494      - Name:            l
495        TypeName:        'float*'
496        Size:            8
497        Align:           8
498        ValueKind:       GlobalBuffer
499        ValueType:       Struct
500        AddrSpaceQual:   Global
501        AccQual:         Default
502      - Name:            aa
503        TypeName:        'float*'
504        Size:            8
505        Align:           8
506        ValueKind:       GlobalBuffer
507        ValueType:       I8
508        AddrSpaceQual:   Region
509        AccQual:         Default
510        IsConst:         1
511        IsPipe:          0
512      - Name:            ab
513        TypeName:        'float*'
514        Size:            8
515        Align:           8
516        ValueKind:       GlobalBuffer
517        ValueType:       I8
518        AddrSpaceQual:   Constant
519        AccQual:         Default
520        IsConst:         on
521        IsPipe:          off
522      - Name:            ac
523        TypeName:        'float*'
524        Size:            8
525        Align:           8
526        ValueKind:       GlobalBuffer
527        ValueType:       I8
528        AddrSpaceQual:   Private
529        AccQual:         Default
530        IsConst:         true
531        IsPipe:          no
532      - Name:            ad
533        TypeName:        'float*'
534        Size:            8
535        Align:           8
536        ValueKind:       GlobalBuffer
537        ValueType:       I8
538        AddrSpaceQual:   Local
539        AccQual:         Default
540        IsConst:         true
541        IsVolatile:      true
542        IsRestrict:      false
543      - Name:            ae
544        TypeName:        'float*'
545        Size:            8
546        Align:           8
547        ValueKind:       GlobalBuffer
548        ValueType:       I8
549        AddrSpaceQual:   Generic
550        AccQual:         Default
551        IsConst:         true
552        IsRestrict:      true
553        IsPipe:          false
554      - Name:            pip
555        TypeName:        'float*'
556        Size:            8
557        Align:           8
558        ValueKind:       Pipe
559        ValueType:       I8
560        AddrSpaceQual:   Global
561        AccQual:         Default
562        IsPipe:          true
563      - Name:            dp
564        TypeName:        'void*'
565        Size:            4
566        Align:           4
567        ValueKind:       DynamicSharedPointer
568        ValueType:       I8
569        PointeeAlign:    1
570        AddrSpaceQual:   Local
571        AccQual:         Default
572        IsConst:         true
573      - Name:            img
574        TypeName:        image2d_t
575        Size:            8
576        Align:           8
577        ValueKind:       Image
578        ValueType:       Struct
579        AddrSpaceQual:   Constant
580        AccQual:         WriteOnly
581      - Name:            samp
582        TypeName:        sampler_t
583        Size:            8
584        Align:           8
585        ValueKind:       Sampler
586        ValueType:       Struct
587        AddrSpaceQual:   Constant
588        AccQual:         Default
589      - Name:            queue
590        TypeName:        queue_t
591        Size:            8
592        Align:           8
593        ValueKind:       Queue
594        ValueType:       Struct
595        AddrSpaceQual:   Constant
596        AccQual:         Default
597      - Size:            8
598        Align:           8
599        ValueKind:       HiddenGlobalOffsetX
600        ValueType:       I64
601      - Size:            8
602        Align:           8
603        ValueKind:       HiddenGlobalOffsetY
604        ValueType:       I64
605      - Size:            8
606        Align:           8
607        ValueKind:       HiddenGlobalOffsetZ
608        ValueType:       I64
609      - Size:            8
610        Align:           8
611        ValueKind:       HiddenPrintfBuffer
612        ValueType:       I8
613        AddrSpaceQual:   Global
614    CodeProps:       
615      KernargSegmentSize: 64
616      GroupSegmentFixedSize: 0
617      PrivateSegmentFixedSize: 0
618      KernargSegmentAlign: 8
619      WavefrontSize:   64
620      NumSGPRs:        14
621      NumVGPRs:        11
622      MaxFlatWorkGroupSize: 256
623...
624)ffDXD",
625        {
626            { 1, 0 }, // version
627            {    // printfInfos
628                { 1, { 4 }, "index:%d\n" },
629                { 2, { 4, 4, 4, 4 }, "i=%d,a=%f,b=%f,c=%f\n" }
630            },
631            {
632                {   // kernel 0
633                    "vectorAdd", "vectorAdd@kd",
634                    {   // arguments
635                        { "n", "uint", 4, 4, 0, ROCmValueKind::BY_VALUE,
636                          ROCmValueType::UINT32, ROCmAddressSpace::NONE,
637                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
638                          false, false, false, false },
639                        { "a", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
640                          ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
641                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
642                          true, false, false, false },
643                        { "b", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
644                          ROCmValueType::UINT8, ROCmAddressSpace::GLOBAL,
645                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
646                          true, false, false, false },
647                        { "c", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
648                          ROCmValueType::INT16, ROCmAddressSpace::GLOBAL,
649                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
650                          false, false, false, false },
651                        { "d", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
652                          ROCmValueType::UINT16, ROCmAddressSpace::GLOBAL,
653                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
654                          false, false, false, false },
655                        { "e", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
656                          ROCmValueType::FLOAT16, ROCmAddressSpace::GLOBAL,
657                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
658                          false, false, false, false },
659                        { "f", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
660                          ROCmValueType::INT32, ROCmAddressSpace::GLOBAL,
661                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
662                          false, false, false, false },
663                        { "g", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
664                          ROCmValueType::UINT32, ROCmAddressSpace::GLOBAL,
665                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
666                          false, false, false, false },
667                        { "h", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
668                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
669                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
670                          false, false, false, false },
671                        { "i", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
672                          ROCmValueType::INT64, ROCmAddressSpace::GLOBAL,
673                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
674                          false, false, false, false },
675                        { "j", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
676                          ROCmValueType::UINT64, ROCmAddressSpace::GLOBAL,
677                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
678                          false, false, false, false },
679                        { "k", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
680                          ROCmValueType::FLOAT64, ROCmAddressSpace::GLOBAL,
681                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
682                          false, false, false, false },
683                        { "l", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
684                          ROCmValueType::STRUCTURE, ROCmAddressSpace::GLOBAL,
685                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
686                          false, false, false, false },
687                        { "aa", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
688                          ROCmValueType::INT8, ROCmAddressSpace::REGION,
689                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
690                          true, false, false, false },
691                        { "ab", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
692                          ROCmValueType::INT8, ROCmAddressSpace::CONSTANT,
693                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
694                          true, false, false, false },
695                        { "ac", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
696                          ROCmValueType::INT8, ROCmAddressSpace::PRIVATE,
697                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
698                          true, false, false, false },
699                        { "ad", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
700                          ROCmValueType::INT8, ROCmAddressSpace::LOCAL,
701                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
702                          true, false, true, false },
703                        { "ae", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
704                          ROCmValueType::INT8, ROCmAddressSpace::GENERIC,
705                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
706                          true, true, false, false },
707                        { "pip", "float*", 8, 8, 0, ROCmValueKind::PIPE,
708                          ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
709                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
710                          false, false, false, true },
711                        { "dp", "void*", 4, 4, 1, ROCmValueKind::DYN_SHARED_PTR,
712                          ROCmValueType::INT8, ROCmAddressSpace::LOCAL,
713                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
714                          true, false, false, false },
715                        { "img", "image2d_t", 8, 8, 0, ROCmValueKind::IMAGE,
716                          ROCmValueType::STRUCTURE, ROCmAddressSpace::CONSTANT,
717                          ROCmAccessQual::WRITE_ONLY, ROCmAccessQual::DEFAULT,
718                          false, false, false, false },
719                        { "samp", "sampler_t", 8, 8, 0, ROCmValueKind::SAMPLER,
720                          ROCmValueType::STRUCTURE, ROCmAddressSpace::CONSTANT,
721                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
722                          false, false, false, false },
723                        { "queue", "queue_t", 8, 8, 0, ROCmValueKind::QUEUE,
724                          ROCmValueType::STRUCTURE, ROCmAddressSpace::CONSTANT,
725                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
726                          false, false, false, false },
727                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_X,
728                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
729                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
730                          false, false, false, false },
731                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Y,
732                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
733                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
734                          false, false, false, false },
735                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Z,
736                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
737                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
738                          false, false, false, false },
739                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_PRINTF_BUFFER,
740                          ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
741                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
742                          false, false, false, false }
743                    },
744                    "OpenCL C", { 1, 2 },
745                    { 0, 0, 0 },
746                    { 0, 0, 0 },
747                    "", "", 64, 0, 0, 8, 64,
748                    14, 11, 256,
749                    { 0, 0, 0 },
750                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
751                }
752            }
753        },
754        true, ""
755    },
756    {   // test 5 - block strings
757        R"ffDXD(---
758Version:         [ 1, 0 ]
759Printf:         
760  - '1:1:4:index\72%d\n'
761  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
762Kernels:         
763  - Name:            vectorAdd
764    SymbolName:    aaa bbb xxxxx   
765    Language:        OpenCL C
766    LanguageVersion: [ 1, 2 ]
767    CodeProps:       
768      KernargSegmentSize: 64
769      GroupSegmentFixedSize: 0
770      PrivateSegmentFixedSize: 0
771      KernargSegmentAlign: 8
772      WavefrontSize:   64
773      NumSGPRs:        14
774      NumVGPRs:        11
775      MaxFlatWorkGroupSize: 256
776  - Name:            vectorAdd1
777    SymbolName:    "ala ma kota\n\t\a"
778    Language:        OpenCL C
779    LanguageVersion: [ 1, 2 ]
780    CodeProps:       
781      KernargSegmentSize: 64
782      GroupSegmentFixedSize: 0
783      PrivateSegmentFixedSize: 0
784      KernargSegmentAlign: 8
785      WavefrontSize:   64
786      NumSGPRs:        14
787      NumVGPRs:        11
788      MaxFlatWorkGroupSize: 256
789  - Name:            vectorAdd2
790    SymbolName: |
791      somebody
792      in the
793     
794 
795      place
796    Language:        OpenCL C
797    LanguageVersion: [ 1, 2 ]
798    CodeProps:       
799      KernargSegmentSize: 64
800      GroupSegmentFixedSize: 0
801      PrivateSegmentFixedSize: 0
802      KernargSegmentAlign: 8
803      WavefrontSize:   64
804      NumSGPRs:        14
805      NumVGPRs:        11
806      MaxFlatWorkGroupSize: 256
807  - Name:            vectorAdd3
808    SymbolName: >
809      somebody
810      in the
811     
812 
813      place
814    Language:        OpenCL C
815    LanguageVersion: [ 1, 2 ]
816    CodeProps:       
817      KernargSegmentSize: 64
818      GroupSegmentFixedSize: 0
819      PrivateSegmentFixedSize: 0
820      KernargSegmentAlign: 8
821      WavefrontSize:   64
822      NumSGPRs:        14
823      NumVGPRs:        11
824      MaxFlatWorkGroupSize: 256
825  - Name:            vectorAdd4
826    SymbolName: |
827      somebody
828      in the
829        #ala
830      #ma kota
831     
832 
833      place
834    Language:        OpenCL C
835    LanguageVersion: [ 1, 2 ]
836    CodeProps:       
837      KernargSegmentSize: 64
838      GroupSegmentFixedSize: 0
839      PrivateSegmentFixedSize: 0
840      KernargSegmentAlign: 8
841      WavefrontSize:   64
842      NumSGPRs:        14
843      NumVGPRs:        11
844      MaxFlatWorkGroupSize: 256
845...
846)ffDXD",
847        {
848            { 1, 0 }, // version
849            {    // printfInfos
850                { 1, { 4 }, "index:%d\n" },
851                { 2, { 4, 4, 4, 4 }, "i=%d,a=%f,b=%f,c=%f\n" }
852            },
853            {
854                {   // kernel 0
855                    "vectorAdd", "aaa bbb xxxxx",
856                    { },
857                    "OpenCL C", { 1, 2 },
858                    { 0, 0, 0 },
859                    { 0, 0, 0 },
860                    "", "", 64, 0, 0, 8, 64,
861                    14, 11, 256,
862                    { 0, 0, 0 },
863                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
864                },
865                {   // kernel 1
866                    "vectorAdd1", "ala ma kota\n\t\a",
867                    { },
868                    "OpenCL C", { 1, 2 },
869                    { 0, 0, 0 },
870                    { 0, 0, 0 },
871                    "", "", 64, 0, 0, 8, 64,
872                    14, 11, 256,
873                    { 0, 0, 0 },
874                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
875                },
876                {   // kernel 2
877                    "vectorAdd2", "somebody\nin the\n\n\nplace\n",
878                    { },
879                    "OpenCL C", { 1, 2 },
880                    { 0, 0, 0 },
881                    { 0, 0, 0 },
882                    "", "", 64, 0, 0, 8, 64,
883                    14, 11, 256,
884                    { 0, 0, 0 },
885                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
886                },
887                {   // kernel 3
888                    "vectorAdd3", "somebody in the\n\nplace\n",
889                    { },
890                    "OpenCL C", { 1, 2 },
891                    { 0, 0, 0 },
892                    { 0, 0, 0 },
893                    "", "", 64, 0, 0, 8, 64,
894                    14, 11, 256,
895                    { 0, 0, 0 },
896                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
897                },
898                {   // kernel 4
899                    "vectorAdd4", "somebody\nin the\n  #ala\n#ma kota\n\n\nplace\n",
900                    { },
901                    "OpenCL C", { 1, 2 },
902                    { 0, 0, 0 },
903                    { 0, 0, 0 },
904                    "", "", 64, 0, 0, 8, 64,
905                    14, 11, 256,
906                    { 0, 0, 0 },
907                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
908                }
909            }
910        },
911        true, ""
912    },
913    {   // test 6 - comments and spaces
914        R"ffDXD(---
915Version:         [ 1, 0 ]#xxxxxxxx
916# list of printfs
917Printf:         
918  - '1:1:4:index\72%d\n'
919  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
920# kernels
921Kernels:         # kernels
922  - Name:            vectorAdd
923    SymbolName:      'vectorAdd@kd'
924    Language:        OpenCL C#aaaaaaaa
925    XExex: aaaaaa 111
926    XExex: [ 1,
927    4,
928    5 ] # aaaa
929    XExey: |
930      aaaa
931      -----
932     
933      xxxxxx
934    XExey: >
935      aaaa
936      -----
937       
938     
939      xxxxxx
940    XExey: >
941      aaaa
942      -----
943       
944      shorter empty line
945   
946      xxxxxx
947    YXaya:
948      aaaa
949      bbbb
950  # some comment
951      xxxxxx
952    LanguageVersion: [ 1
953  # ...............
954    ,
955    # zzzz
956    2 ] ##aaaa
957    Args:
958      - Name:            n
959        TypeName:        uint
960        Size:            4
961        Align:           4
962        ValueKind:       ByValue
963        ValueType:       U32
964        AccQual:         Default
965      - Name:            a
966        TypeName:        'float*'
967        Size:            8
968        Align:           8
969        ValueKind:       GlobalBuffer     
970        ValueType:       F32
971        AddrSpaceQual:   Global
972        AccQual:         Default
973        IsConst:         true
974      - Name:            b
975        TypeName:        'float*'
976        Size:            8
977        Align:           8
978        ValueKind:       GlobalBuffer       
979        ValueType:       F32
980        AddrSpaceQual:   Global
981        AccQual:         Default
982        IsConst:         true
983      - Name:            c
984        TypeName:        'float*'
985        Size:            8
986        # some comment
987        Align:           8
988        ValueKind:       GlobalBuffer
989        ValueType:       F32
990        AddrSpaceQual:   Global
991        AccQual:         Default
992      - Size:            8
993        Align:           8
994        ValueKind:       HiddenGlobalOffsetX
995        ValueType:       I64
996#aaaaaaaaaa
997      - Size:            8
998      ## aaaa
999        Align:           8 # aaaaa
1000        ValueKind:       HiddenGlobalOffsetY
1001        ValueType:       I64
1002      - Size:            8
1003        Align:           8#aaaaaaaaaaa
1004        ValueKind:       HiddenGlobalOffsetZ
1005        ValueType:       I64
1006      # end of arguments
1007      - Size:            8
1008        Align:           8
1009        ValueKind:       HiddenPrintfBuffer
1010        ValueType:       I8
1011        AddrSpaceQual:   Global
1012    CodeProps: #aaaaaa xxx
1013      KernargSegmentSize: 64
1014      GroupSegmentFixedSize: 0
1015      PrivateSegmentFixedSize: 0
1016      KernargSegmentAlign: 8
1017      WavefrontSize:   64
1018      NumSGPRs:        14
1019      NumVGPRs:        11
1020      MaxFlatWorkGroupSize: 256
1021      #
1022      #
1023      # 
1024...
1025)ffDXD",
1026        {
1027            { 1, 0 }, // version
1028            {    // printfInfos
1029                { 1, { 4 }, "index:%d\n" },
1030                { 2, { 4, 4, 4, 4 }, "i=%d,a=%f,b=%f,c=%f\n" }
1031            },
1032            {
1033                {   // kernel 0
1034                    "vectorAdd", "vectorAdd@kd",
1035                    {   // arguments
1036                        { "n", "uint", 4, 4, 0, ROCmValueKind::BY_VALUE,
1037                          ROCmValueType::UINT32, ROCmAddressSpace::NONE,
1038                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1039                          false, false, false, false },
1040                        { "a", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
1041                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
1042                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1043                          true, false, false, false },
1044                        { "b", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
1045                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
1046                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1047                          true, false, false, false },
1048                        { "c", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
1049                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
1050                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1051                          false, false, false, false },
1052                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_X,
1053                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
1054                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1055                          false, false, false, false },
1056                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Y,
1057                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
1058                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1059                          false, false, false, false },
1060                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Z,
1061                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
1062                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1063                          false, false, false, false },
1064                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_PRINTF_BUFFER,
1065                          ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
1066                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1067                          false, false, false, false }
1068                    },
1069                    "OpenCL C", { 1, 2 },
1070                    { 0, 0, 0 },
1071                    { 0, 0, 0 },
1072                    "", "", 64, 0, 0, 8, 64,
1073                    14, 11, 256,
1074                    { 0, 0, 0 },
1075                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
1076                }
1077            }
1078        },
1079        true, ""
1080    },
1081    {   // test 7 - error
1082        R"ffDXD(---
1083Version:         [ 1, 0 ]
1084Printf:         
1085  - '1:1:4:index\72%d\n'
1086  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
1087 - '3:1:2:index\72%d\n'
1088Kernels:         
1089  - Name:            vectorAdd
1090)ffDXD",
1091        { },
1092        false, "6: Unexpected nesting level"
1093    },
1094    {   // test 8 - error
1095        R"ffDXD(---
1096Version:[ 1, 0 ]
1097Printf:         
1098  - '1:1:4:index\72%d\n'
1099  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
1100  - '3:1:2:index\72%d\n'
1101Kernels:         
1102  - Name:            vectorAdd
1103)ffDXD",
1104        { },
1105        false, "2: After key and colon must be space"
1106    },
1107    {   // test 9 - error
1108        R"ffDXD(---
1109Version:   [ 111xx, 0 ]
1110Printf:         
1111  - '1:1:4:index\72%d\n'
1112  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
1113  - '3:1:2:index\72%d\n'
1114Kernels:         
1115  - Name:            vectorAdd
1116)ffDXD",
1117        { },
1118        false, "2: Expected ','"
1119    },
1120    { // test 10
1121        R"ffDXD(---
1122Version:         [ 1, 0 ]
1123Printf:         
1124  - '1:1:4:index\72%d\n'
1125  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
1126Kernels:         
1127  - Name:            vectorAdd
1128    SymbolName:      'vectorAdd@kd'
1129    Language:        OpenCL C
1130    LanguageVersion: [ 1, 2 ]
1131    Attrs:
1132      ReqdWorkGroupSize:
1133        - 7
1134        - 9
1135        - 11
1136      WorkGroupSizeHint:
1137        - 112
1138        - 33
1139        - 66
1140      VecTypeHint: uint8
1141      RuntimeHandle:  kernelRT
1142    Args:           
1143      - Name:            n
1144        TypeName:        uint
1145        Size:            4
1146        Align:           4
1147        ValueKind:       ByValue
1148        ValueType:       U32
1149        AccQual:         Default
1150        ActualAccQual:   Default
1151      - Name:            a
1152        TypeName:        'float*'
1153        Size:            8
1154        Align:           16
1155        PointeeAlign:    32
1156        ValueKind:       GlxobalBuffer
1157        ValueType:       F32
1158        AddrSpaceQual:   Global
1159        AccQual:         ReadOnly
1160        ActualAccQual:   ReadWrite
1161        IsConst:         true
1162      - Name:            b
1163        TypeName:        'float*'
1164        Size:            8
1165        Align:           16
1166        PointeeAlign:    32
1167        ValueKind:       GlobalBuffer
1168        ValueType:       F32
1169        AddrSpaceQual:   Global
1170        AccQual:         WriteOnly
1171        ActualAccQual:   WriteOnly
1172        IsConst:         true
1173)ffDXD",
1174        { },
1175        false, "36: Wrong argument value kind"
1176    },
1177    {   // test 11 - with type specifier
1178        R"ffDXD(---
1179Version:   !!seq      [ 1, 0 ]
1180Printf:         
1181  - '1:1:4:index\72%d\n'
1182  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
1183Kernels:         
1184  - Name:            vectorAdd
1185    SymbolName: !!str     'vectorAdd@kd'
1186    Language:        OpenCL C
1187    LanguageVersion: [ 1, 2 ]
1188    Args:           
1189      - Name:            n
1190        TypeName:        uint
1191        Size:       !!int     4
1192        Align:           4
1193        ValueKind:       ByValue
1194        ValueType:       U32
1195        AccQual:         Default
1196      - Name:            a
1197        TypeName:        'float*'
1198        Size:            8
1199        Align:           8
1200        ValueKind:  !!str     GlobalBuffer
1201        ValueType:       F32
1202        AddrSpaceQual:   Global
1203        AccQual:         Default
1204        IsConst:    !!bool     true
1205      - Name:            b
1206        TypeName:        'float*'
1207        Size:            8
1208        Align:           8
1209        ValueKind:       GlobalBuffer
1210        ValueType:       F32
1211        AddrSpaceQual:   Global
1212        AccQual:         Default
1213        IsConst:         true
1214      - Name:            c
1215        TypeName:        'float*'
1216        Size:            8
1217        Align:           8
1218        ValueKind:       GlobalBuffer
1219        ValueType:       F32
1220        AddrSpaceQual:   Global
1221        AccQual:         Default
1222      - Size:            8
1223        Align:           8
1224        ValueKind:       HiddenGlobalOffsetX
1225        ValueType:       I64
1226      - Size:            8
1227        Align:           8
1228        ValueKind:       HiddenGlobalOffsetY
1229        ValueType:       I64
1230      - Size:            8
1231        Align:           8
1232        ValueKind:       HiddenGlobalOffsetZ
1233        ValueType:       I64
1234      - Size:            8
1235        Align:           8
1236        ValueKind:       HiddenPrintfBuffer
1237        ValueType:       I8
1238        AddrSpaceQual:   Global
1239    CodeProps:       
1240      KernargSegmentSize: 64
1241      GroupSegmentFixedSize: 0
1242      PrivateSegmentFixedSize: 0
1243      KernargSegmentAlign: 8
1244      WavefrontSize:   64
1245      NumSGPRs:        14
1246      NumVGPRs:        11
1247      MaxFlatWorkGroupSize: 256
1248...
1249)ffDXD",
1250        {
1251            { 1, 0 }, // version
1252            {    // printfInfos
1253                { 1, { 4 }, "index:%d\n" },
1254                { 2, { 4, 4, 4, 4 }, "i=%d,a=%f,b=%f,c=%f\n" }
1255            },
1256            {
1257                {   // kernel 0
1258                    "vectorAdd", "vectorAdd@kd",
1259                    {   // arguments
1260                        { "n", "uint", 4, 4, 0, ROCmValueKind::BY_VALUE,
1261                          ROCmValueType::UINT32, ROCmAddressSpace::NONE,
1262                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1263                          false, false, false, false },
1264                        { "a", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
1265                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
1266                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1267                          true, false, false, false },
1268                        { "b", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
1269                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
1270                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1271                          true, false, false, false },
1272                        { "c", "float*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
1273                          ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
1274                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1275                          false, false, false, false },
1276                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_X,
1277                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
1278                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1279                          false, false, false, false },
1280                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Y,
1281                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
1282                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1283                          false, false, false, false },
1284                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Z,
1285                          ROCmValueType::INT64, ROCmAddressSpace::NONE,
1286                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1287                          false, false, false, false },
1288                        { "", "", 8, 8, 0, ROCmValueKind::HIDDEN_PRINTF_BUFFER,
1289                          ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
1290                          ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
1291                          false, false, false, false }
1292                    },
1293                    "OpenCL C", { 1, 2 },
1294                    { 0, 0, 0 },
1295                    { 0, 0, 0 },
1296                    "", "", 64, 0, 0, 8, 64,
1297                    14, 11, 256,
1298                    { 0, 0, 0 },
1299                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
1300                }
1301            }
1302        },
1303        true, ""
1304    },
1305    {   // test 11 - with type specifier (error)
1306        R"ffDXD(---
1307Version:   !!float      [ 1, 0 ]
1308Printf:         
1309  - '1:1:4:index\72%d\n'
1310  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
1311Kernels:         
1312  - Name:            vectorAdd
1313    SymbolName: !!int     'vectorAdd@kd'
1314    Language:        OpenCL C
1315    LanguageVersion: [ 1, 2 ]
1316)ffDXD",
1317        { },
1318        false, "2: Expected value of sequence type"
1319    },
1320    {   // test 12 - with type specifier (error)
1321        R"ffDXD(---
1322Version:         [ 1, 0 ]
1323Printf:         
1324  - '1:1:4:index\72%d\n'
1325  - '2:4:4:4:4:4:i=%d,a=%f,b=%f,c=%f\n'
1326Kernels:         
1327  - Name:            vectorAdd
1328    SymbolName: !!int     'vectorAdd@kd'
1329    Language:        OpenCL C
1330    LanguageVersion: [ 1, 2 ]
1331)ffDXD",
1332        { },
1333        false, "8: Expected value of string type"
1334    }
1335};
1336
1337static void testROCmMetadataCase(cxuint testId, const ROCmMetadataTestCase& testCase)
1338{
1339    ROCmInput rocmInput{};
1340    rocmInput.deviceType = GPUDeviceType::FIJI;
1341    rocmInput.archMinor = 0;
1342    rocmInput.archStepping = 3;
1343    rocmInput.newBinFormat = true;
1344    rocmInput.target = "amdgcn-amd-amdhsa-amdgizcl-gfx803";
1345    rocmInput.metadataSize = ::strlen(testCase.input);
1346    rocmInput.metadata = testCase.input;
1347    // generate simple binary with metadata
1348    Array<cxbyte> output;
1349    {
1350        ROCmBinGenerator binGen(&rocmInput);
1351        binGen.generate(output);
1352    }
1353    // now we load binary
1354    const ROCmMetadata& expected = testCase.expected;
1355    ROCmMetadata result;
1356    bool good = true;
1357    CString error;
1358    try
1359    {
1360        ROCmBinary binary(output.size(), output.data(), ROCMBIN_CREATE_METADATAINFO);
1361        result = binary.getMetadataInfo();
1362    }
1363    catch(const ParseException& ex)
1364    {
1365        good = false;
1366        error = ex.what();
1367    }
1368   
1369    char testName[30];
1370    snprintf(testName, 30, "Test #%u", testId);
1371    assertValue(testName, "good", testCase.good, good);
1372    assertString(testName, "error", testCase.error, error.c_str());
1373    if (!good)
1374        // do not check if test failed
1375        return;
1376   
1377    assertValue(testName, "version[0]", expected.version[0], result.version[0]);
1378    assertValue(testName, "version[1]", expected.version[1], result.version[1]);
1379    assertValue(testName, "printfInfosNum", expected.printfInfos.size(),
1380                result.printfInfos.size());
1381    char buf[32];
1382    for (cxuint i = 0; i < expected.printfInfos.size(); i++)
1383    {
1384        snprintf(buf, 32, "Printf[%u].", i);
1385        std::string caseName(buf);
1386        const ROCmPrintfInfo& expPrintf = expected.printfInfos[i];
1387        const ROCmPrintfInfo& resPrintf = result.printfInfos[i];
1388        assertValue(testName, caseName+"id", expPrintf.id, resPrintf.id);
1389        assertValue(testName, caseName+"argSizesNum", expPrintf.argSizes.size(),
1390                    resPrintf.argSizes.size());
1391        char buf2[32];
1392        for (cxuint j = 0; j < expPrintf.argSizes.size(); j++)
1393        {
1394            snprintf(buf2, 32, "argSizes[%u]", j);
1395            std::string caseName2(caseName);
1396            caseName2 += buf2;
1397            assertValue(testName, caseName2, expPrintf.argSizes[j], resPrintf.argSizes[j]);
1398        }
1399        assertValue(testName, caseName+"format", expPrintf.format, resPrintf.format);
1400    }
1401   
1402    assertValue(testName, "kernelsNum", expected.kernels.size(), result.kernels.size());
1403    // kernels
1404    for (cxuint i = 0; i < expected.kernels.size(); i++)
1405    {
1406        snprintf(buf, 32, "Kernel[%u].", i);
1407        std::string caseName(buf);
1408        const ROCmKernelMetadata& expKernel = expected.kernels[i];
1409        const ROCmKernelMetadata& resKernel = result.kernels[i];
1410       
1411        assertValue(testName, caseName+"name", expKernel.name, resKernel.name);
1412        assertValue(testName, caseName+"symbolName",
1413                    expKernel.symbolName, resKernel.symbolName);
1414        assertValue(testName, caseName+"argsNum",
1415                    expKernel.argInfos.size(), resKernel.argInfos.size());
1416       
1417        char buf2[32];
1418        for (cxuint j = 0; j < expKernel.argInfos.size(); j++)
1419        {
1420            snprintf(buf2, 32, "args[%u].", j);
1421            std::string caseName2(caseName);
1422            caseName2 += buf2;
1423            const ROCmKernelArgInfo& expArgInfo = expKernel.argInfos[j];
1424            const ROCmKernelArgInfo& resArgInfo = resKernel.argInfos[j];
1425            assertValue(testName, caseName2+"name", expArgInfo.name, resArgInfo.name);
1426            assertValue(testName, caseName2+"typeName",
1427                        expArgInfo.typeName, resArgInfo.typeName);
1428            assertValue(testName, caseName2+"size",
1429                        expArgInfo.size, resArgInfo.size);
1430            assertValue(testName, caseName2+"align",
1431                        expArgInfo.align, resArgInfo.align);
1432            assertValue(testName, caseName2+"pointeeAlign",
1433                        expArgInfo.pointeeAlign, resArgInfo.pointeeAlign);
1434            assertValue(testName, caseName2+"valueKind",
1435                        cxuint(expArgInfo.valueKind), cxuint(resArgInfo.valueKind));
1436            assertValue(testName, caseName2+"valueType",
1437                        cxuint(expArgInfo.valueType), cxuint(resArgInfo.valueType));
1438            assertValue(testName, caseName2+"addressSpace",
1439                        cxuint(expArgInfo.addressSpace), cxuint(resArgInfo.addressSpace));
1440            assertValue(testName, caseName2+"accessQual",
1441                        cxuint(expArgInfo.accessQual), cxuint(resArgInfo.accessQual));
1442            assertValue(testName, caseName2+"actualAccessQual",
1443                cxuint(expArgInfo.actualAccessQual), cxuint(resArgInfo.actualAccessQual));
1444            assertValue(testName, caseName2+"isConst",
1445                        cxuint(expArgInfo.isConst), cxuint(resArgInfo.isConst));
1446            assertValue(testName, caseName2+"isRestrict",
1447                        cxuint(expArgInfo.isRestrict), cxuint(resArgInfo.isRestrict));
1448            assertValue(testName, caseName2+"isPipe",
1449                        cxuint(expArgInfo.isPipe), cxuint(resArgInfo.isPipe));
1450            assertValue(testName, caseName2+"isVolatile",
1451                        cxuint(expArgInfo.isVolatile), cxuint(resArgInfo.isVolatile));
1452        }
1453       
1454        assertValue(testName, caseName+"language", expKernel.language, resKernel.language);
1455        assertValue(testName, caseName+"langVersion[0]", expKernel.langVersion[0],
1456                    resKernel.langVersion[0]);
1457        assertValue(testName, caseName+"langVersion[1]", expKernel.langVersion[1],
1458                    resKernel.langVersion[1]);
1459        assertValue(testName, caseName+"reqdWorkGroupSize[0]", 
1460                    expKernel.reqdWorkGroupSize[0], resKernel.reqdWorkGroupSize[0]);
1461        assertValue(testName, caseName+"reqdWorkGroupSize[1]", 
1462                    expKernel.reqdWorkGroupSize[1], resKernel.reqdWorkGroupSize[1]);
1463        assertValue(testName, caseName+"reqdWorkGroupSize[2]", 
1464                    expKernel.reqdWorkGroupSize[2], resKernel.reqdWorkGroupSize[2]);
1465        assertValue(testName, caseName+"workGroupSizeHint[0]", 
1466                    expKernel.workGroupSizeHint[0], resKernel.workGroupSizeHint[0]);
1467        assertValue(testName, caseName+"workGroupSizeHint[1]", 
1468                    expKernel.workGroupSizeHint[1], resKernel.workGroupSizeHint[1]);
1469        assertValue(testName, caseName+"workGroupSizeHint[2]", 
1470                    expKernel.workGroupSizeHint[2], resKernel.workGroupSizeHint[2]);
1471        assertValue(testName, caseName+"vecTypeHint",
1472                    expKernel.vecTypeHint, resKernel.vecTypeHint);
1473        assertValue(testName, caseName+"runtimeHandle",
1474                    expKernel.runtimeHandle, resKernel.runtimeHandle);
1475        assertValue(testName, caseName+"kernargSegmentSize",
1476                    expKernel.kernargSegmentSize, resKernel.kernargSegmentSize);
1477        assertValue(testName, caseName+"groupSegmentFixedSize",
1478                    expKernel.groupSegmentFixedSize, resKernel.groupSegmentFixedSize);
1479        assertValue(testName, caseName+"privateSegmentFixedSize",
1480                    expKernel.privateSegmentFixedSize, resKernel.privateSegmentFixedSize);
1481        assertValue(testName, caseName+"kernargSegmentAlign",
1482                    expKernel.kernargSegmentAlign, resKernel.kernargSegmentAlign);
1483        assertValue(testName, caseName+"wavefrontSize",
1484                    expKernel.wavefrontSize, resKernel.wavefrontSize);
1485        assertValue(testName, caseName+"sgprsNum", expKernel.sgprsNum, resKernel.sgprsNum);
1486        assertValue(testName, caseName+"vgprsNum", expKernel.vgprsNum, resKernel.vgprsNum);
1487        assertValue(testName, caseName+"maxFlatWorkGroupSize",
1488                    expKernel.maxFlatWorkGroupSize, resKernel.maxFlatWorkGroupSize);
1489        assertValue(testName, caseName+"fixedWorkGroupSize[0]",
1490                    expKernel.fixedWorkGroupSize[0], resKernel.fixedWorkGroupSize[0]);
1491        assertValue(testName, caseName+"fixedWorkGroupSize[1]",
1492                    expKernel.fixedWorkGroupSize[1], resKernel.fixedWorkGroupSize[1]);
1493        assertValue(testName, caseName+"fixedWorkGroupSize[2]",
1494                    expKernel.fixedWorkGroupSize[2], resKernel.fixedWorkGroupSize[2]);
1495        assertValue(testName, caseName+"spilledSgprs",
1496                    expKernel.spilledSgprs, resKernel.spilledSgprs);
1497        assertValue(testName, caseName+"spilledVgprs",
1498                    expKernel.spilledVgprs, resKernel.spilledVgprs);
1499    }
1500}
1501
1502int main(int argc, const char** argv)
1503{
1504    int retVal = 0;
1505    for (cxuint i = 0; i < sizeof(rocmMetadataTestCases)/sizeof(ROCmMetadataTestCase); i++)
1506        try
1507        { testROCmMetadataCase(i, rocmMetadataTestCases[i]); }
1508        catch(const std::exception& ex)
1509        {
1510            std::cerr << ex.what() << std::endl;
1511            retVal = 1;
1512        }
1513    return retVal;
1514}
Note: See TracBrowser for help on using the repository browser.