Changeset 3758 in CLRX


Ignore:
Timestamp:
Feb 8, 2018, 3:25:00 PM (17 months ago)
Author:
matszpk
Message:

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

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdbin/ROCmBinaries.cpp

    r3738 r3758  
    113113}
    114114
     115enum class YAMLValType
     116{
     117    NONE,
     118    NIL,
     119    BOOL,
     120    INT,
     121    FLOAT,
     122    STRING,
     123    SEQ
     124};
     125
     126static YAMLValType parseYAMLType(const char*& ptr, const char* end, size_t lineNo)
     127{
     128    if (ptr+2>end || *ptr!='!' || ptr[1]!='!')
     129        return YAMLValType::NONE; // no type
     130    if (ptr+7 && ::strncmp(ptr+2, "null", 4)==0 && isSpace(ptr[6]) && ptr[6]!='\n')
     131    {
     132        ptr += 6;
     133        return YAMLValType::NIL;
     134    }
     135    else if (ptr+7 && ::strncmp(ptr+2, "bool", 4)==0 && isSpace(ptr[6]) && ptr[6]!='\n')
     136    {
     137        ptr += 6;
     138        return YAMLValType::BOOL;
     139    }
     140    else if (ptr+6 && ::strncmp(ptr+2, "int", 3)==0 && isSpace(ptr[5]) && ptr[5]!='\n')
     141    {
     142        ptr += 5;
     143        return YAMLValType::INT;
     144    }
     145    else if (ptr+8 && ::strncmp(ptr+2, "float", 5)==0 && isSpace(ptr[7]) && ptr[7]!='\n')
     146    {
     147        ptr += 7;
     148        return YAMLValType::FLOAT;
     149    }
     150    else if (ptr+6 && ::strncmp(ptr+2, "str", 3)==0 && isSpace(ptr[5]) && ptr[5]!='\n')
     151    {
     152        ptr += 5;
     153        return YAMLValType::STRING;
     154    }
     155    else if (ptr+6 && ::strncmp(ptr+2, "seq", 3)==0 && isSpace(ptr[5]) && ptr[5]!='\n')
     156    {
     157        ptr += 5;
     158        return YAMLValType::SEQ;
     159    }
     160    throw ParseException(lineNo, "Unknown YAML value type");
     161}
     162
    115163// parse YAML key (keywords - recognized keys)
    116164static size_t parseYAMLKey(const char*& ptr, const char* end, size_t lineNo,
     
    145193    if (ptr == end || *ptr=='\n')
    146194        throw ParseException(lineNo, "Expected integer value");
     195   
     196    // skip !!int
     197    YAMLValType valType = parseYAMLType(ptr, end, lineNo);
     198    if (valType == YAMLValType::INT)
     199    {   // if
     200        skipSpacesToLineEnd(ptr, end);
     201        if (ptr == end || *ptr=='\n')
     202            throw ParseException(lineNo, "Expected integer value");
     203    }
     204    else if (valType != YAMLValType::NONE)
     205        throw ParseException(lineNo, "Expected value of integer type");
     206   
    147207    T value = 0;
    148208    try
     
    163223    if (ptr == end || *ptr=='\n')
    164224        throw ParseException(lineNo, "Expected boolean value");
     225   
     226    // skip !!bool
     227    YAMLValType valType = parseYAMLType(ptr, end, lineNo);
     228    if (valType == YAMLValType::BOOL)
     229    {   // if
     230        skipSpacesToLineEnd(ptr, end);
     231        if (ptr == end || *ptr=='\n')
     232            throw ParseException(lineNo, "Expected boolean value");
     233    }
     234    else if (valType != YAMLValType::NONE)
     235        throw ParseException(lineNo, "Expected value of boolean type");
    165236   
    166237    const char* wordPtr = ptr;
     
    327398    if (ptr == end)
    328399        return "";
     400   
     401    // skip !!str
     402    YAMLValType valType = parseYAMLType(ptr, end, lineNo);
     403    if (valType == YAMLValType::STRING)
     404    {   // if
     405        skipSpacesToLineEnd(ptr, end);
     406        if (ptr == end)
     407            return "";
     408    }
     409    else if (valType != YAMLValType::NONE)
     410        throw ParseException(lineNo, "Expected value of string type");
     411   
    329412    std::string buf;
    330413    if (*ptr=='"' || *ptr== '\'')
     
    441524        return;
    442525   
     526    // skip !!int
     527    YAMLValType valType = parseYAMLType(ptr, end, lineNo);
     528    if (valType == YAMLValType::SEQ)
     529    {   // if
     530        skipSpacesToLineEnd(ptr, end);
     531        if (ptr == end)
     532            return;
     533    }
     534    else if (valType != YAMLValType::NONE)
     535        throw ParseException(lineNo, "Expected value of sequence type");
     536   
    443537    if (*ptr == '[')
    444538    {
     
    597691{
    598692    skipSpacesToLineEnd(ptr, end);
     693    if (ptr+2 >= end && ptr[0]=='!' && ptr[1]=='!')
     694    {   // skip !!xxxxx
     695        ptr+=2;
     696        while (ptr!=end && isAlpha(*ptr)) ptr++;
     697        skipSpacesToLineEnd(ptr, end);
     698    }
     699   
    599700    if (ptr==end || (*ptr!='\'' && *ptr!='"' && *ptr!='|' && *ptr!='>' && *ptr !='[' &&
    600701                *ptr!='#' && *ptr!='\n'))
  • CLRadeonExtender/trunk/tests/amdbin/ROCmMetadata.cpp

    r3715 r3758  
    11741174        { },
    11751175        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"
    11761334    }
    11771335};
Note: See TracChangeset for help on using the changeset viewer.