Changeset 4026 in CLRX


Ignore:
Timestamp:
Apr 19, 2018, 4:50:44 PM (6 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: fixes in Liveness class (choose correct end of range while joining). Include 1 point region while adding write access to liveness.
Check correctly the first occurrence of regvar in the block.

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

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

    r4025 r4026  
    10931093                        for (AsmSingleVReg svreg: readSVRegs)
    10941094                        {
    1095                             Liveness& lv = getLiveness(svreg, ssaIdIdxMap[svreg],
     1095                            auto svrres = ssaIdIdxMap.insert({ svreg, 0 });
     1096                            Liveness& lv = getLiveness(svreg, svrres.first->second,
    10961097                                    cblock.ssaInfoMap.find(svreg)->second,
    10971098                                    livenesses, vregIndexMaps, regTypesNum, regRanges);
    1098                             if (!lv.l.empty() && (--lv.l.end())->first < curLiveTime)
    1099                                 lv.newRegion(curLiveTime); // begin region from this block
     1099                            if (svrres.second)
     1100                                // begin region from this block
     1101                                lv.newRegion(curLiveTime);
    11001102                            lv.expand(liveTime);
    11011103                        }
     
    11091111                            if (liveTimeNext != curBlockLiveEnd)
    11101112                                // because live after this instr
    1111                                 lv.newRegion(liveTimeNext);
     1113                                lv.insert(liveTimeNext, liveTimeNext+1);
    11121114                            sinfo.lastPos = liveTimeNext - curLiveTime + cblock.start;
    11131115                        }
  • CLRadeonExtender/trunk/amdasm/AsmRegAlloc.h

    r4015 r4026  
    271271            {
    272272                // join with previous region
    273                 prevIt->second = it->second;
     273                prevIt->second = std::max(it->second, prevIt->second);
    274274                l.erase(it);
    275275                it = prevIt;
     
    284284            {
    285285                // join with next region
    286                 it->second = nextIt->second;
     286                it->second = std::max(it->second, nextIt->second);
    287287                l.erase(nextIt);
    288288            }
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4025 r4026  
    6262static const AsmLivenessesCase createLivenessesCasesTbl[] =
    6363{
    64 #if 0
    6564    {   // 0 - simple case
    6665        R"ffDXD(.regvar sa:s:8, va:v:10
     
    7170        {   // livenesses
    7271            {   // for SGPRs
    73                 { },
    74                 { },
    75                 { },
    76                 { }
     72                { { 0, 5 } }, // S3
     73                { { 0, 0 } }, // sa[2]'0
     74                { { 4, 5 } }, // sa[4]'0
     75                { { 8, 9 } }  // sa[4]'1
    7776            },
    7877            {   // for VGPRs
    79                 { },
    80                 { },
    81                 { }
     78                { { 0, 9 } }, // V3
     79                { { 0, 9 } }, // va[2]'0
     80                { } // va[4]'0 : out of range code block
    8281            },
    8382            { },
     
    8988        }, true, ""
    9089    }
    91 #endif
    9290};
    9391
Note: See TracChangeset for help on using the changeset viewer.