Changeset 4025 in CLRX


Ignore:
Timestamp:
Apr 19, 2018, 1:39:17 PM (3 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Fixed usagePos in CodeBlocks? (now is correct position in RVU).
Fixed segfault in GCNUsageHandler::getUsageDependencies. Fixes in createLivenesses.

Location:
CLRadeonExtender/trunk
Files:
4 edited

Legend:

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

    r4024 r4025  
    717717    const std::vector<size_t>& ssaIdIndices =
    718718                vregIndexMap.find(svreg)->second;
     719    ARDOut << "lvn[" << regType << "][" << ssaIdIndices[ssaId] << "]. ssaIdIdx: " <<
     720            ssaIdIdx << ". ssaId: " << ssaId << ". svreg: " << svreg.regVar << ":" <<
     721            svreg.index << "\n";
    719722    return livenesses[regType][ssaIdIndices[ssaId]];
    720723}
     
    10701073                    AsmRegVarUsage rvu = { 0U, nullptr, 0U, 0U };
    10711074                    size_t liveTimeNext = curBlockLiveEnd;
     1075                    bool hasNext = false;
    10721076                    if (usageHandler.hasNext())
    10731077                    {
     1078                        hasNext = true;
    10741079                        rvu = usageHandler.nextUsage();
    1075                         if (rvu.offset >= cblock.end)
    1076                             break;
    1077                         if (!rvu.useRegMode)
    1078                             instrRVUs[instrRVUsCount++] = rvu;
    1079                         liveTimeNext = std::min(rvu.offset, cblock.end) -
    1080                                 cblock.start + curLiveTime;
     1080                        if (rvu.offset < cblock.end)
     1081                        {
     1082                            if (!rvu.useRegMode)
     1083                                instrRVUs[instrRVUsCount++] = rvu;
     1084                            liveTimeNext = std::min(rvu.offset, cblock.end) -
     1085                                    cblock.start + curLiveTime;
     1086                        }
    10811087                    }
    10821088                    size_t liveTime = oldOffset - cblock.start + curLiveTime;
    1083                     if (!usageHandler.hasNext() || rvu.offset >= oldOffset)
     1089                    if (!hasNext || rvu.offset > oldOffset)
    10841090                    {
     1091                        ARDOut << "apply to liveness. offset: " << oldOffset << "\n";
    10851092                        // apply to liveness
    10861093                        for (AsmSingleVReg svreg: readSVRegs)
     
    11171124                        readSVRegs.clear();
    11181125                        writtenSVRegs.clear();
    1119                         if (!usageHandler.hasNext())
    1120                             break; // end
     1126                        if (!hasNext)
     1127                            break;
    11211128                        oldOffset = rvu.offset;
    11221129                        instrRVUsCount = 0;
     
    11291136                        // per register/singlvreg
    11301137                        AsmSingleVReg svreg{ rvu.regVar, rindex };
    1131                         if (rvu.rwFlags == ASMRVU_WRITE && rvu.regField == ASMFIELD_NONE)
     1138                        if (rvu.rwFlags == ASMRVU_WRITE && rvu.regField!=ASMFIELD_NONE)
    11321139                            writtenSVRegs.push_back(svreg);
    11331140                        else // read or treat as reading // expand previous region
  • CLRadeonExtender/trunk/amdasm/AsmRegAllocSSAData.cpp

    r4014 r4025  
    14121412    if (!usageHandler.hasNext())
    14131413        return; // do nothing if no regusages
     1414    ISAUsageHandler::ReadPos oldReadPos = usageHandler.getReadPos();
    14141415    rvu = usageHandler.nextUsage();
    14151416   
     
    14241425        while (cbit != codeBlocks.end() && cbit->end <= rvu.offset)
    14251426        {
    1426             cbit->usagePos = usageHandler.getReadPos();
     1427            cbit->usagePos = oldReadPos;
    14271428            ++cbit;
    14281429        }
     
    14311432        // skip rvu's before codeblock
    14321433        while (rvu.offset < cbit->start && usageHandler.hasNext())
     1434        {
     1435            oldReadPos = usageHandler.getReadPos();
    14331436            rvu = usageHandler.nextUsage();
     1437        }
    14341438        if (rvu.offset < cbit->start)
    14351439            break;
    14361440       
    1437         cbit->usagePos = usageHandler.getReadPos();
     1441        cbit->usagePos = oldReadPos;
    14381442        while (rvu.offset < cbit->end)
    14391443        {
     
    14631467            if (!usageHandler.hasNext())
    14641468                break;
     1469            oldReadPos = usageHandler.getReadPos();
    14651470            rvu = usageHandler.nextUsage();
    14661471        }
  • CLRadeonExtender/trunk/amdasm/GCNAssembler.cpp

    r4024 r4025  
    330330                // if SGPR
    331331                if ((rvus[i].regVar==nullptr && rvus[i].rstart<108) ||
    332                      rvus[i].regVar->type == REGTYPE_SGPR)
     332                     (rvus[i].regVar!=nullptr && rvus[i].regVar->type == REGTYPE_SGPR))
    333333                    equalToDeps[2 + count++] = i;
    334334            }
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4023 r4025  
    184184        {
    185185            std::ostringstream lOss;
    186             lOss << ".liveness#" << li << ".";
     186            lOss << ".liveness#" << li;
    187187            lOss.flush();
    188188            std::string lvname(rtname + lOss.str());
     
    196196            {
    197197                std::ostringstream regOss;
    198                 regOss << ".reg#" << k << ".";
     198                regOss << ".reg#" << k;
    199199                regOss.flush();
    200200                std::string regname(lvname + regOss.str());
     
    222222        {
    223223            std::ostringstream lOss;
    224             lOss << ".lndep#" << di << ".";
     224            lOss << ".lndep#" << di;
    225225            lOss.flush();
    226226            std::string ldname(rtname + lOss.str());
     
    272272        {
    273273            std::ostringstream lOss;
    274             lOss << ".eqtodep#" << di << ".";
     274            lOss << ".eqtodep#" << di;
    275275            lOss.flush();
    276276            std::string ldname(rtname + lOss.str());
Note: See TracChangeset for help on using the changeset viewer.