Ignore:
Timestamp:
Feb 5, 2018, 3:20:38 PM (22 months ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCm: Pass many ROCmKernelConfigs to generateROCmMetadata. Escape strings in ROCm metadata.

File:
1 edited

Legend:

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

    r3722 r3723  
    15121512}
    15131513
    1514 // helper for checking wether value is supplied
     1514// helper for checking whether value is supplied
    15151515static inline bool hasValue(cxuint value)
    15161516{ return value!=BINGEN_NOTSUPPLIED && value!=BINGEN_DEFAULT; }
     
    15191519{ return value!=BINGEN64_NOTSUPPLIED && value!=BINGEN64_DEFAULT; }
    15201520
    1521 void generateROCmMetadata(const ROCmMetadata& mdInfo, const ROCmKernelConfig& kconfig,
     1521// get escaped YAML string if needed, otherwise get this same string
     1522static std::string escapeYAMLString(const CString& input)
     1523{
     1524    bool toEscape = false;
     1525    const char* s;
     1526    for (s = input.c_str(); *s!=0; s++)
     1527    {
     1528        cxbyte c = *s;
     1529        if (c < 0x20 || c >= 0x80 || c=='*' || c=='&' || c=='!' || c=='@' ||
     1530            c=='\'' || c=='\"')
     1531        {
     1532            toEscape = true;
     1533            break;
     1534        }
     1535    }
     1536    // if spaces in begin and end
     1537    if (isSpace(input[0]) || (!input.empty() && isSpace(s[-1])))
     1538        toEscape = true;
     1539   
     1540    if (toEscape)
     1541    {
     1542        std::string out = "'";
     1543        out += escapeStringCStyle(s-input.c_str(), input.c_str());
     1544        out += "'";
     1545        return out;
     1546    }
     1547    return input.c_str();
     1548}
     1549
     1550void generateROCmMetadata(const ROCmMetadata& mdInfo, const ROCmKernelConfig** kconfigs,
    15221551                    std::string& output)
    15231552{
     
    15541583        output += "Kernels:         \n";
    15551584    // kernels
    1556     for (const ROCmKernelMetadata& kernel: mdInfo.kernels)
    1557     {
     1585    for (size_t i = 0; i < mdInfo.kernels.size(); i++)
     1586    {
     1587        const ROCmKernelMetadata& kernel = mdInfo.kernels[i];
    15581588        output += "  - Name:            ";
    15591589        output.append(kernel.name.c_str(), kernel.name.size());
    15601590        output += "\n    SymbolName:      '";
    1561         output += escapeStringCStyle(kernel.symbolName);
     1591        output += escapeYAMLString(kernel.symbolName);
    15621592        output += "'\n";
    15631593        if (!kernel.language.empty())
    15641594        {
    15651595            output += "    Language:        ";
    1566             output.append(kernel.language.c_str(), kernel.language.size());
     1596            output += escapeYAMLString(kernel.language);
    15671597            output += "\n";
    15681598        }
     
    15951625            {
    15961626                output += "      VecTypeHint:     ";
    1597                 output.append(kernel.vecTypeHint.c_str(), kernel.vecTypeHint.size());
     1627                output += escapeYAMLString(kernel.vecTypeHint);
    15981628                output += "\n";
    15991629            }
     
    16011631            {
    16021632                output += "      RuntimeHandle:   ";
    1603                 output.append(kernel.runtimeHandle.c_str(), kernel.runtimeHandle.size());
     1633                output += escapeYAMLString(kernel.runtimeHandle);
    16041634                output += "\n";
    16051635            }
     
    16141644            {
    16151645                output += "Name:            ";
    1616                 output.append(argInfo.name.c_str(), argInfo.name.size());
     1646                output += escapeYAMLString(argInfo.name);
    16171647                output += "\n        ";
    16181648            }
     
    16201650            {
    16211651                output += "TypeName:        ";
    1622                 output.append(argInfo.typeName.c_str(), argInfo.typeName.size());
     1652                output += escapeYAMLString(argInfo.typeName);
    16231653                output += "\n        ";
    16241654            }
     
    16871717            kernel.fixedWorkGroupSize[2] != 0)
    16881718        {
     1719            const ROCmKernelConfig& kconfig = *kconfigs[i];
     1720           
    16891721            output += "    CodeProps:       \n";
    16901722            output += "      KernargSegmentSize: ";
     
    17231755                    cxuint(ULEV(kconfig.workitemVgprCount)), numBuf, 24);
    17241756            output += numBuf;
     1757            // spilled registers
    17251758            if (hasValue(kernel.spilledSgprs))
    17261759            {
Note: See TracChangeset for help on using the changeset viewer.