Changeset 3278 in CLRX


Ignore:
Timestamp:
Sep 1, 2017, 2:56:34 PM (16 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmAmd/Gallium?/AmdCL2: Detect only once driver/LLVM version.
AsmGallium?: Accept HSA config pseudo-ops only if LLVM version>=4.0.0.

Location:
CLRadeonExtender/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/CLRX/amdasm/AsmFormats.h

    r3277 r3278  
    242242    cxuint extraSectionCount;
    243243   
     244    cxuint defaultDriverVersion;
     245   
    244246    void saveCurrentSection();
    245247    void restoreCurrentAllocRegs();
    246248    void saveCurrentAllocRegs();
     249   
     250    cxuint determineDriverVersion() const;
    247251public:
    248252    /// constructor
     
    321325    cxuint innerExtraSectionCount;
    322326   
     327    cxuint defaultDriverVersion;
     328   
    323329    void saveCurrentSection();
    324330    void restoreCurrentAllocRegs();
     
    411417    cxuint extraSectionCount;
    412418   
     419    cxuint defaultDriverVersion;
     420    cxuint defaultLLVMVersion;
     421   
    413422    void restoreKcodeCurrentAllocRegs();
    414423    void saveKcodeCurrentAllocRegs();
     424   
     425    cxuint determineDriverVersion() const;
     426    cxuint determineLLVMVersion() const;
    415427public:
    416428    /// construcror
  • CLRadeonExtender/trunk/amdasm/AsmAmdCL2Format.cpp

    r3257 r3278  
    7777            ".rodata" });
    7878    savedSection = innerSavedSection = 0;
     79    defaultDriverVersion = detectAmdDriverVersion();
    7980}
    8081
     
    111112    {
    112113        if (assembler.driverVersion==0) // just detect driver version
    113             driverVersion = detectAmdDriverVersion();
     114            driverVersion = defaultDriverVersion;
    114115        else // from assembler setup
    115116            driverVersion = assembler.driverVersion;
     
    15691570    {
    15701571        if (assembler.driverVersion==0) // just detect driver version
    1571             output.driverVersion = detectAmdDriverVersion();
     1572            output.driverVersion = defaultDriverVersion;
    15721573        else // from assembler setup
    15731574            output.driverVersion = assembler.driverVersion;
  • CLRadeonExtender/trunk/amdasm/AsmAmdFormat.cpp

    r3248 r3278  
    7878    sections.push_back({ ASMKERN_GLOBAL, AsmSectionType::DATA, ELFSECTID_UNDEF, nullptr });
    7979    savedSection = 0;
     80    defaultDriverVersion = detectAmdDriverVersion();
    8081}
    8182
     
    8485    for (Kernel* kernel: kernelStates)
    8586        delete kernel;
     87}
     88
     89cxuint AsmAmdHandler::determineDriverVersion() const
     90{
     91    if (output.driverVersion==0 && output.driverInfo.empty())
     92    {
     93        if (assembler.getDriverVersion() == 0)
     94            return defaultDriverVersion;
     95        else
     96            return assembler.getDriverVersion();
     97    }
     98    else
     99        return output.driverVersion;
    86100}
    87101
     
    332346   
    333347    cxuint driverVersion = 0;
    334     if (handler.output.driverVersion==0 && handler.output.driverInfo.empty())
    335     {
    336         if (asmr.driverVersion==0) // just detect driver version
    337             driverVersion = detectAmdDriverVersion();
    338         else // from assembler setup
    339             driverVersion = asmr.driverVersion;
    340     }
    341     else
    342         driverVersion = handler.output.driverVersion;
     348    driverVersion = handler.determineDriverVersion();
    343349   
    344350    std::pair<AsmSymbolEntry*, bool> res = asmr.insertSymbolInScope(symName,
     
    19201926    {
    19211927        if (assembler.driverVersion==0) // just detect driver version
    1922             output.driverVersion = detectAmdDriverVersion();
     1928            output.driverVersion = defaultDriverVersion;
    19231929        else // from assembler setup
    19241930            output.driverVersion = assembler.driverVersion;
  • CLRadeonExtender/trunk/amdasm/AsmGalliumFormat.cpp

    r3277 r3278  
    6363    GALLIUMOP_TGSIZE, GALLIUMOP_USERDATANUM, GALLIUMOP_VGPRSNUM
    6464};
    65 
    66 static cxuint determineLLVMVersion(Assembler& asmr)
    67 {
    68     if (asmr.getLLVMVersion() == 0)
    69         return detectLLVMCompilerVersion();
    70     else
    71         return asmr.getLLVMVersion();
    72 }
    7365
    7466void AsmGalliumHandler::Kernel::initializeAmdHsaKernelConfig()
     
    114106    currentKcodeKernel = ASMKERN_GLOBAL;
    115107    savedSection = 0;
     108    defaultLLVMVersion = detectLLVMCompilerVersion();
     109    defaultDriverVersion = detectMesaDriverVersion();
     110}
     111
     112cxuint AsmGalliumHandler::determineLLVMVersion() const
     113{
     114    if (assembler.getLLVMVersion() == 0)
     115        return defaultLLVMVersion;
     116    else
     117        return assembler.getLLVMVersion();
     118}
     119
     120cxuint AsmGalliumHandler::determineDriverVersion() const
     121{
     122    if (assembler.getDriverVersion() == 0)
     123        return defaultDriverVersion;
     124    else
     125        return assembler.getDriverVersion();
    116126}
    117127
     
    120130    cxuint thisKernel = output.kernels.size();
    121131    cxuint thisSection = sections.size();
    122     output.addEmptyKernel(kernelName, determineLLVMVersion(assembler));
     132    output.addEmptyKernel(kernelName, determineLLVMVersion());
    123133    /// add kernel config section
    124134    sections.push_back({ thisKernel, AsmSectionType::CONFIG, ELFSECTID_UNDEF, nullptr });
     
    361371    cxuint driverVersion = 0;
    362372    if (getLLVMVersion)
    363         driverVersion = determineLLVMVersion(asmr);
     373        driverVersion = handler.determineLLVMVersion();
    364374    else
    365     {
    366         if (asmr.driverVersion == 0)
    367             driverVersion = detectMesaDriverVersion();
    368         else
    369             driverVersion = asmr.driverVersion;
    370     }
     375        driverVersion = handler.determineDriverVersion();
    371376   
    372377    std::pair<AsmSymbolEntry*, bool> res = asmr.insertSymbolInScope(symName,
     
    404409    handler.inside = AsmGalliumHandler::Inside::CONFIG;
    405410    handler.output.kernels[asmr.currentKernel].useConfig = true;
    406     if (determineLLVMVersion(asmr) >= 40000U) // HSA since LLVM 4.0
     411    if (handler.determineLLVMVersion() >= 40000U) // HSA since LLVM 4.0
    407412        handler.kernelStates[asmr.currentKernel].initializeAmdHsaKernelConfig();
    408413}
     
    451456    }
    452457   
    453     /*if (target >= GALLIUMCVAL_HSA_FIRST_PARAM && handler.kern)
    454     {
    455         return;
    456     }*/
     458    if (target >= GALLIUMCVAL_HSA_FIRST_PARAM && handler.determineLLVMVersion() < 40000U)
     459    {
     460        asmr.printError(pseudoOpPlace, "HSA configuration pseudo-op only for LLVM<=4.0.0");
     461        return;
     462    }
    457463   
    458464    skipSpacesToEnd(linePtr, end);
     
    984990    AsmGalliumHandler::Kernel& kstate = handler.kernelStates[asmr.currentKernel];
    985991    kstate.hasProgInfo = true;
    986     const cxuint llvmVersion = determineLLVMVersion(asmr);
     992    const cxuint llvmVersion = handler.determineLLVMVersion();
    987993    if (llvmVersion<30900U && kstate.progInfoEntries == 3)
    988994    {
     
    14271433    cxuint llvmVersion = assembler.llvmVersion;
    14281434    if (llvmVersion == 0 && (assembler.flags&ASM_TESTRUN)==0)
    1429         llvmVersion = detectLLVMCompilerVersion();
     1435        llvmVersion = defaultLLVMVersion;
    14301436   
    14311437    const cxuint ldsShift = arch<GPUArchitecture::GCN1_1 ? 8 : 9;
     
    15461552    // set versions
    15471553    if (assembler.driverVersion == 0 && (assembler.flags&ASM_TESTRUN)==0) // auto detection
    1548         output.isMesa170 = detectMesaDriverVersion() >= 170000U;
     1554        output.isMesa170 = defaultDriverVersion >= 170000U;
    15491555    else
    15501556        output.isMesa170 = assembler.driverVersion >= 170000U;
Note: See TracChangeset for help on using the changeset viewer.