Changeset 4045 in CLRX


Ignore:
Timestamp:
Apr 23, 2018, 12:47:05 PM (8 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Do not use deque (flowstack) iterator (use index instead of). Initialize lastPos in SSAInfos. Add few debug dumps.

Location:
CLRadeonExtender/trunk
Files:
4 edited

Legend:

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

    r4042 r4045  
    733733        size_t regTypesNum, const cxuint* regRanges)
    734734{
     735    ARDOut << "putCrossBlockLv block: " << flowStack.back().blockIndex << "\n";
    735736    const CodeBlock& cblock = codeBlocks[flowStack.back().blockIndex];
    736737    for (const auto& entry: cblock.ssaInfoMap)
     
    742743                continue; // not found
    743744            const VRegLastPos& lastPos = lvrit->second;
    744             FlowStackCIter flit = lastPos.blockChain.back();
     745            FlowStackCIter flit = flowStack.begin() + lastPos.blockChain.back();
    745746            cxuint regType = getRegType(regTypesNum, regRanges, entry.first);
    746747            const VarIndexMap& vregIndexMap = vregIndexMaps[regType];
     
    750751            FlowStackCIter flitEnd = flowStack.end();
    751752            --flitEnd; // before last element
     753           
     754            ARDOut << "  putCross for " << entry.first.regVar << ":" <<
     755                    entry.first.index << ": " << lastPos.blockChain.back() << "\n";
    752756            // insert live time to last seen position
    753757            const CodeBlock& lastBlk = codeBlocks[flit->blockIndex];
     758           
    754759            lv.insert(lastBlk.ssaInfoMap.find(entry.first)->second.lastPos, lastBlk.end);
    755760            for (++flit; flit != flitEnd; ++flit)
     
    10031008            }
    10041009           
    1005             putCrossBlockLivenesses(flowStack, codeBlocks,
    1006                     lastVRegMap, livenesses, vregIndexMaps, regTypesNum, regRanges);
    1007            
    1008             for (const auto& sentry: cblock.ssaInfoMap)
    1009             {
    1010                 const SSAInfo& sinfo = sentry.second;
    1011                 // update
    1012                 size_t lastSSAId =  (sinfo.ssaIdChange != 0) ? sinfo.ssaIdLast :
    1013                         (sinfo.readBeforeWrite) ? sinfo.ssaIdBefore : 0;
    1014                 FlowStackCIter flit = flowStack.end();
    1015                 --flit; // to last position
    1016                 auto res = lastVRegMap.insert({ sentry.first,
    1017                             { lastSSAId, { flit } } });
    1018                 if (!res.second) // if not first seen, just update
     1010            if (!visited[entry.blockIndex])
     1011            {
     1012                putCrossBlockLivenesses(flowStack, codeBlocks,
     1013                        lastVRegMap, livenesses, vregIndexMaps, regTypesNum, regRanges);
     1014                // update last vreg position
     1015                for (const auto& sentry: cblock.ssaInfoMap)
    10191016                {
    1020                     // update last
    1021                     res.first->second.ssaId = lastSSAId;
    1022                     res.first->second.blockChain.push_back(flit);
     1017                    const SSAInfo& sinfo = sentry.second;
     1018                    // update
     1019                    size_t lastSSAId =  (sinfo.ssaIdChange != 0) ? sinfo.ssaIdLast :
     1020                            (sinfo.readBeforeWrite) ? sinfo.ssaIdBefore : 0;
     1021                    auto res = lastVRegMap.insert({ sentry.first,
     1022                                { lastSSAId, { flowStack.size()-1 } } });
     1023                    if (!res.second) // if not first seen, just update
     1024                    {
     1025                        // update last
     1026                        res.first->second.ssaId = lastSSAId;
     1027                        res.first->second.blockChain.push_back(flowStack.size()-1);
     1028                    }
    10231029                }
    1024             }
    1025            
    1026             if (!visited[entry.blockIndex])
    1027             {
     1030               
     1031                // main routine to handle ssaInfos
    10281032                visited[entry.blockIndex] = true;
    10291033                std::unordered_map<AsmSingleVReg, size_t> ssaIdIdxMap;
  • CLRadeonExtender/trunk/amdasm/AsmRegAlloc.h

    r4041 r4045  
    323323{
    324324    size_t ssaId; // last SSA id
    325     std::vector<FlowStackCIter> blockChain; // subsequent blocks that changes SSAId
     325    std::vector<size_t> blockChain; // subsequent blocks that changes SSAId
    326326};
    327327
  • CLRadeonExtender/trunk/amdasm/AsmRegAllocSSAData.cpp

    r4034 r4045  
    14511451                if (res.second)
    14521452                    sinfo.firstPos = rvu.offset;
     1453                sinfo.lastPos = rvu.offset;
     1454               
    14531455                if ((rvu.rwFlags & ASMRVU_READ) != 0 && (sinfo.ssaIdChange == 0 ||
    14541456                    // if first write RVU instead read RVU
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4044 r4045  
    269269    {   // 5 - blocks
    270270        R"ffDXD(.regvar sa:s:8, va:v:10
    271         s_mov_b32 sa[4], sa[2]             # 0
    272         s_add_u32 sa[4], sa[4], s3         # 4
     271        s_mov_b32 sa[4], sa[2]          # 0
     272        s_add_u32 sa[4], sa[4], s3      # 4
    273273        v_mad_f32 va[0], va[1], va[2], v0  # 8
    274274        .cf_jump a0,a1,a2
    275         s_setpc_b64 s[0:1]                 # 16
    276        
    277 a0:     s_mul_i32 sa[3], sa[4], s3
    278         s_xor_b32 s4, sa[2], s4
    279         s_endpgm
    280        
    281 a1:     v_add_f32 va[2], sa[5], va[0]
    282         v_mul_f32 va[3], va[2], v0
    283         s_endpgm
    284        
    285 a2:     s_cselect_b32 sa[2], sa[4], sa[3]
    286         #v_cndmask_b32 va[3], va[0], va[1], vcc
    287         s_endpgm
     275        s_setpc_b64 s[0:1]              # 16
     276       
     277a0:     s_mul_i32 sa[3], sa[4], s3      # 20
     278        s_xor_b32 s4, sa[2], s4         # 24
     279        s_endpgm                        # 28
     280       
     281a1:     v_add_f32 va[2], sa[5], va[0]   # 32
     282        v_mul_f32 va[3], va[2], v0      # 36
     283        s_endpgm                        # 40
     284       
     285a2:     s_cselect_b32 sa[2], sa[4], sa[3]   # 44
     286        #v_cndmask_b32 va[3], va[0], va[1], vcc     # 48
     287        s_endpgm                        # 52
    288288)ffDXD",
    289289        {   // livenesses
Note: See TracChangeset for help on using the changeset viewer.