Changeset 3716 in CLRX


Ignore:
Timestamp:
Feb 3, 2018, 10:12:19 PM (17 months ago)
Author:
matszpk
Message:

CLRadeonExtender: DisasmROCm: Tentative version with ROCm metadata dump. Fixed compiler warning in skipYAMLValue routine.

Location:
CLRadeonExtender/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdasm/DisasmAmd.cpp

    r3575 r3716  
    13941394        output.write(buf, bufSize);
    13951395    }
    1396     bufSize = 0;
    13971396    // print reqd_work_group_size: .cws XSIZE[,YSIZE[,ZSIZE]]
    1398     if (config.reqdWorkGroupSize[2] != 0)
     1397    if (config.reqdWorkGroupSize[0] != 0 || config.reqdWorkGroupSize[1] != 0 ||
     1398        config.reqdWorkGroupSize[2] != 0)
     1399    {
    13991400        bufSize = snprintf(buf, 100, "        .cws %u, %u, %u\n",
    14001401               config.reqdWorkGroupSize[0], config.reqdWorkGroupSize[1],
    14011402               config.reqdWorkGroupSize[2]);
    1402     else if (config.reqdWorkGroupSize[1] != 0)
    1403         bufSize = snprintf(buf, 100, "        .cws %u, %u\n", config.reqdWorkGroupSize[0],
    1404                    config.reqdWorkGroupSize[1]);
    1405     else if (config.reqdWorkGroupSize[0] != 0)
    1406         bufSize = snprintf(buf, 100, "        .cws %u\n", config.reqdWorkGroupSize[0]);
    1407     if (bufSize != 0) // if we have cws
    14081403        output.write(buf, bufSize);
     1404    }
    14091405   
    14101406    bufSize = snprintf(buf, 100, "        .sgprsnum %u\n", config.usedSGPRsNum);
  • CLRadeonExtender/trunk/amdasm/DisasmAmdCL2.cpp

    r3712 r3716  
    695695        }
    696696    }
    697     bufSize = 0;
    698697    // print reqd_work_group_size: .cws XSIZE[,YSIZE[,ZSIZE]]
    699     if (config.reqdWorkGroupSize[2] != 0)
     698    if (config.reqdWorkGroupSize[0] != 0 || config.reqdWorkGroupSize[1] != 0 ||
     699        config.reqdWorkGroupSize[2] != 0)
     700    {
    700701        bufSize = snprintf(buf, 100, "        .cws %u, %u, %u\n",
    701702               config.reqdWorkGroupSize[0], config.reqdWorkGroupSize[1],
    702703               config.reqdWorkGroupSize[2]);
    703     else if (config.reqdWorkGroupSize[1] != 0)
    704         bufSize = snprintf(buf, 100, "        .cws %u, %u\n", config.reqdWorkGroupSize[0],
    705                    config.reqdWorkGroupSize[1]);
    706     else if (config.reqdWorkGroupSize[0] != 0)
    707         bufSize = snprintf(buf, 100, "        .cws %u\n", config.reqdWorkGroupSize[0]);
    708     if (bufSize != 0) // if we have cws
    709704        output.write(buf, bufSize);
    710    
    711     bufSize = 0;
     705    }
     706   
    712707    // work group size hint
    713     if (config.workGroupSizeHint[2] != 0)
     708    if (config.workGroupSizeHint[0] != 0 || config.workGroupSizeHint[1] != 0 ||
     709        config.workGroupSizeHint[2] != 0)
     710    {
    714711        bufSize = snprintf(buf, 100, "        .work_group_size_hint %u, %u, %u\n",
    715712               config.workGroupSizeHint[0], config.workGroupSizeHint[1],
    716713               config.workGroupSizeHint[2]);
    717     else if (config.workGroupSizeHint[1] != 0)
    718         bufSize = snprintf(buf, 100, "        .work_group_size_hint %u, %u\n",
    719                config.workGroupSizeHint[0], config.workGroupSizeHint[1]);
    720     else if (config.workGroupSizeHint[0] != 0)
    721         bufSize = snprintf(buf, 100, "        .work_group_size_hint %u\n",
    722                 config.workGroupSizeHint[0]);
    723     if (bufSize != 0) // if we have cws
    724714        output.write(buf, bufSize);
     715    }
    725716    if (!config.vecTypeHint.empty())
    726717    {
  • CLRadeonExtender/trunk/amdasm/DisasmROCm.cpp

    r3715 r3716  
    514514}
    515515
     516static inline bool hasValue(cxuint value)
     517{ return value!=BINGEN_NOTSUPPLIED && value!=BINGEN_DEFAULT; }
     518
     519static inline bool hasValue(uint64_t value)
     520{ return value!=BINGEN64_NOTSUPPLIED && value!=BINGEN64_DEFAULT; }
     521
     522static const char* disasmROCmValueKindNames[] =
     523{
     524    "value", "globalbuf", "dynshptr", "sampler", "image", "pipe", "queue",
     525    "gox", "goy", "goz", "none", "printfbuf", "defqueue", "complact"
     526};
     527
     528static const char* disasmROCmValueTypeNames[] =
     529{ "struct", "i8", "u8", "i16", "u16", "f16", "i32", "u32", "f32", "i64", "u64", "f64" };
     530
     531static const char* disasmROCmAddressSpaces[] =
     532{ "none", "private", "global", "constant", "local", "generic", "region" };
     533
     534static const char* disasmROCmAccessQuals[] =
     535{ "default", "read_only", "write_only", "read_write" };
     536
    516537static void dumpKernelMetadataInfo(std::ostream& output, const ROCmKernelMetadata& kernel)
    517538{
     
    536557        output.write("\"\n", 2);
    537558   
     559    // print reqd_work_group_size: .cws XSIZE[,YSIZE[,ZSIZE]]
     560    if (kernel.reqdWorkGroupSize[0] != 0 || kernel.reqdWorkGroupSize[1] != 0 ||
     561        kernel.reqdWorkGroupSize[2] != 0)
     562    {
     563        bufSize = snprintf(buf, 100, "        .cws %u, %u, %u\n",
     564               kernel.reqdWorkGroupSize[0], kernel.reqdWorkGroupSize[1],
     565               kernel.reqdWorkGroupSize[2]);
     566        output.write(buf, bufSize);
     567    }
     568   
     569    // work group size hint
     570    if (kernel.workGroupSizeHint[0] != 0 || kernel.workGroupSizeHint[1] != 0 ||
     571        kernel.workGroupSizeHint[2] != 0)
     572    {
     573        bufSize = snprintf(buf, 100, "        .work_group_size_hint %u, %u, %u\n",
     574               kernel.workGroupSizeHint[0], kernel.workGroupSizeHint[1],
     575               kernel.workGroupSizeHint[2]);
     576        output.write(buf, bufSize);
     577    }
    538578    if (!kernel.vecTypeHint.empty())
    539579    {
    540580        output.write("        .vectypehint ", 21);
    541581        output.write(kernel.vecTypeHint.c_str(), kernel.vecTypeHint.size());
     582        output.write("\n", 1);
     583    }
     584    if (!kernel.runtimeHandle.empty())
     585    {
     586        output.write("        .runtime_handle ", 24);
     587        output.write(kernel.runtimeHandle.c_str(), kernel.runtimeHandle.size());
     588        output.write("\n", 1);
     589    }
     590    if (hasValue(kernel.kernargSegmentSize))
     591    {
     592        bufSize = snprintf(buf, 100, "        .md_kernarg_segment_size %" PRIu64 "\n",
     593                    kernel.kernargSegmentSize);
     594        output.write(buf, bufSize);
     595    }
     596    if (hasValue(kernel.kernargSegmentAlign))
     597    {
     598        bufSize = snprintf(buf, 100, "        .md_kernarg_segment_align %" PRIu64 "\n",
     599                    kernel.kernargSegmentAlign);
     600        output.write(buf, bufSize);
     601    }
     602    if (hasValue(kernel.groupSegmentFixedSize))
     603    {
     604        bufSize = snprintf(buf, 100, "        .md_group_segment_fixed_size %" PRIu64 "\n",
     605                    kernel.groupSegmentFixedSize);
     606        output.write(buf, bufSize);
     607    }
     608    if (hasValue(kernel.privateSegmentFixedSize))
     609    {
     610        bufSize = snprintf(buf, 100, "        .md_private_segment_fixed_size %" PRIu64 "\n",
     611                    kernel.privateSegmentFixedSize);
     612        output.write(buf, bufSize);
     613    }
     614    if (hasValue(kernel.wavefrontSize))
     615    {
     616        bufSize = snprintf(buf, 100, "        .md_wavefront_size %u\n",
     617                    kernel.wavefrontSize);
     618        output.write(buf, bufSize);
     619    }
     620    if (hasValue(kernel.sgprsNum))
     621    {
     622        bufSize = snprintf(buf, 100, "        .md_sgprsnum %u\n", kernel.sgprsNum);
     623        output.write(buf, bufSize);
     624    }
     625    if (hasValue(kernel.vgprsNum))
     626    {
     627        bufSize = snprintf(buf, 100, "        .md_vgprsnum %u\n", kernel.vgprsNum);
     628        output.write(buf, bufSize);
     629    }
     630    if (hasValue(kernel.spilledSgprs))
     631    {
     632        bufSize = snprintf(buf, 100, "        .md_spilledsgprsnum %u\n",
     633                           kernel.spilledSgprs);
     634        output.write(buf, bufSize);
     635    }
     636    if (hasValue(kernel.spilledVgprs))
     637    {
     638        bufSize = snprintf(buf, 100, "        .md_spilledvgprsnum %u\n",
     639                           kernel.spilledVgprs);
     640        output.write(buf, bufSize);
     641    }
     642    if (hasValue(kernel.maxFlatWorkGroupSize))
     643    {
     644        bufSize = snprintf(buf, 100, "        .max_flat_work_group_size %" PRIu64 "\n",
     645                    kernel.maxFlatWorkGroupSize);
     646        output.write(buf, bufSize);
     647    }
     648    // fixed work group size
     649    if (kernel.fixedWorkGroupSize[0] != 0 || kernel.fixedWorkGroupSize[1] != 0 ||
     650        kernel.fixedWorkGroupSize[2] != 0)
     651    {
     652        bufSize = snprintf(buf, 100, "        .fixed_work_group_size %u, %u, %u\n",
     653               kernel.fixedWorkGroupSize[0], kernel.fixedWorkGroupSize[1],
     654               kernel.fixedWorkGroupSize[2]);
     655        output.write(buf, bufSize);
     656    }
     657   
     658    // dump kernel arguments
     659    for (const ROCmKernelArgInfo& argInfo: kernel.argInfos)
     660    {
     661        output.write("        .arg ", 13);
     662        if (!argInfo.name.empty())
     663        {
     664            output.write(argInfo.name.c_str(), argInfo.name.size());
     665            output.write(", ", 2);
     666        }
     667        output.write("\"", 1);
     668        std::string typeName = escapeStringCStyle(argInfo.typeName);
     669        output.write(typeName.c_str(), typeName.size());
     670        output.write("\", ", 3);
     671        size_t bufSize = 0;
     672        char buf[100];
     673        bufSize = snprintf(buf, 100, "%" PRIu64 ", %" PRIu64,
     674                           argInfo.size, argInfo.align);
     675        output.write(buf, bufSize);
     676        bufSize = snprintf(buf, 100, ", %s, %s",
     677                    disasmROCmValueKindNames[cxuint(argInfo.valueKind)],
     678                    disasmROCmValueTypeNames[cxuint(argInfo.valueType)]);
     679        output.write(buf, bufSize);
     680       
     681        if (argInfo.valueKind == ROCmValueKind::DYN_SHARED_PTR)
     682        {
     683            bufSize = snprintf(buf, 100, "%" PRIu64 ",", argInfo.pointeeAlign);
     684            output.write(buf, bufSize);
     685        }
     686       
     687        if (argInfo.valueKind == ROCmValueKind::DYN_SHARED_PTR ||
     688            argInfo.valueKind == ROCmValueKind::GLOBAL_BUFFER)
     689        {
     690            bufSize = snprintf(buf, 100, ", %s",
     691                    disasmROCmAddressSpaces[cxuint(argInfo.addressSpace)]);
     692            output.write(buf, bufSize);
     693        }
     694       
     695        if (argInfo.valueKind == ROCmValueKind::IMAGE ||
     696            argInfo.valueKind == ROCmValueKind::PIPE)
     697        {
     698            bufSize = snprintf(buf, 100, ", %s",
     699                    disasmROCmAccessQuals[cxuint(argInfo.accessQual)]);
     700            output.write(buf, bufSize);
     701        }
     702        if (argInfo.valueKind == ROCmValueKind::GLOBAL_BUFFER ||
     703            argInfo.valueKind == ROCmValueKind::IMAGE ||
     704            argInfo.valueKind == ROCmValueKind::PIPE)
     705        {
     706            bufSize = snprintf(buf, 100, ", %s",
     707                    disasmROCmAccessQuals[cxuint(argInfo.actualAccessQual)]);
     708            output.write(buf, bufSize);
     709        }
     710       
     711        if (argInfo.isConst)
     712            output.write(" const", 6);
     713        if (argInfo.isRestrict)
     714            output.write(" restrict", 9);
     715        if (argInfo.isVolatile)
     716            output.write(" volatile", 9);
     717        if (argInfo.isPipe)
     718            output.write(" pipe", 5);
     719       
    542720        output.write("\n", 1);
    543721    }
  • CLRadeonExtender/trunk/amdbin/ROCmBinaries.cpp

    r3715 r3716  
    670670                continue;
    671671            }
    672             if (ptr-lineStart <= prevIndent && *ptr!='\n' &&
     672            if (size_t(ptr-lineStart) <= prevIndent && *ptr!='\n' &&
    673673                (blockValue || *ptr!='#'))
    674674                // if indent is short and not empty line (same spaces) or
Note: See TracChangeset for help on using the changeset viewer.