Changeset 4047 in CLRX


Ignore:
Timestamp:
Apr 24, 2018, 3:36:32 PM (8 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Remove obsolete blockLiveTime. Redefine LastVRegMap (value - blockchain).

Location:
CLRadeonExtender/trunk/amdasm
Files:
2 edited

Legend:

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

    r4046 r4047  
    742742            FlowStackCIter flit = flowStack.begin();
    743743            if (lvrit != lastVRegMap.end())
    744                 flit += lvrit->second.blockChain.back();
     744                flit += lvrit->second.back();
    745745           
    746746            cxuint regType = getRegType(regTypesNum, regRanges, entry.first);
     
    771771            {
    772772                const CodeBlock& cblock = codeBlocks[flit->blockIndex];
    773                 size_t blockLiveTime = cblock.start;
    774                 lv.insert(blockLiveTime, cblock.end-cblock.start + blockLiveTime);
     773                lv.insert(cblock.start, cblock.end);
    775774            }
    776775        }
     
    831830                {
    832831                    const CodeBlock& cblock = codeBlocks[flit2->blockIndex];
    833                     size_t blockLiveTime = cblock.start;
    834                     lv.insert(blockLiveTime, cblock.end-cblock.start + blockLiveTime);
     832                    lv.insert(cblock.start, cblock.end);
    835833                }
    836834                continue;
     
    841839            {
    842840                const CodeBlock& cblock = codeBlocks[flit2->blockIndex];
    843                 size_t blockLiveTime = cblock.start;
    844                 lv.insert(blockLiveTime, cblock.end-cblock.start + blockLiveTime);
     841                lv.insert(cblock.start, cblock.end);
    845842            }
    846843            // insert liveness for last block in loop of last SSAId (prev round)
     
    857854            {
    858855                const CodeBlock& cblock = codeBlocks[flit2->blockIndex];
    859                 size_t blockLiveTime = cblock.start;
    860                 lv.insert(blockLiveTime, cblock.end-cblock.start + blockLiveTime);
     856                lv.insert(cblock.start, cblock.end);
    861857            }
    862858        }
     
    10261022                for (const auto& sentry: cblock.ssaInfoMap)
    10271023                {
    1028                     const SSAInfo& sinfo = sentry.second;
    10291024                    // update
    1030                     size_t lastSSAId =  (sinfo.ssaIdChange != 0) ? sinfo.ssaIdLast :
    1031                             (sinfo.readBeforeWrite) ? sinfo.ssaIdBefore : 0;
    10321025                    auto res = lastVRegMap.insert({ sentry.first,
    1033                                 { lastSSAId, { flowStack.size()-1 } } });
     1026                                { flowStack.size()-1 } });
    10341027                    if (!res.second) // if not first seen, just update
    1035                     {
    10361028                        // update last
    1037                         res.first->second.ssaId = lastSSAId;
    1038                         res.first->second.blockChain.push_back(flowStack.size()-1);
    1039                     }
     1029                        res.first->second.push_back(flowStack.size()-1);
    10401030                }
    10411031               
     
    11471137                    if (lvrit != lastVRegMap.end())
    11481138                    {
    1149                         VRegLastPos& lastPos = lvrit->second;
    1150                         lastPos.ssaId = sentry.second.ssaIdBefore;
    1151                         lastPos.blockChain.pop_back();
    1152                         if (lastPos.blockChain.empty()) // just remove from lastVRegs
     1139                        std::vector<size_t>& lastPos = lvrit->second;
     1140                        lastPos.pop_back();
     1141                        if (lastPos.empty()) // just remove from lastVRegs
    11531142                            lastVRegMap.erase(lvrit);
    11541143                    }
  • CLRadeonExtender/trunk/amdasm/AsmRegAlloc.h

    r4046 r4047  
    325325typedef std::deque<FlowStackEntry3>::const_iterator FlowStackCIter;
    326326
    327 struct CLRX_INTERNAL VRegLastPos
    328 {
    329     size_t ssaId; // last SSA id
    330     std::vector<size_t> blockChain; // subsequent blocks that changes SSAId
    331 };
    332 
    333 typedef std::unordered_map<AsmSingleVReg, VRegLastPos> LastVRegMap;
     327// key - singlevreg, value - code block chain
     328typedef std::unordered_map<AsmSingleVReg, std::vector<size_t> > LastVRegMap;
    334329
    335330struct CLRX_INTERNAL LiveBlock
Note: See TracChangeset for help on using the changeset viewer.