Changeset 4035 in CLRX


Ignore:
Timestamp:
Apr 20, 2018, 5:18:33 PM (8 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Use start of cblock and section offset as livetime. Remove codeBlocksLiveTimes.

File:
1 edited

Legend:

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

    r4032 r4035  
    730730
    731731static void putCrossBlockLivenesses(const std::deque<FlowStackEntry3>& flowStack,
    732         const std::vector<CodeBlock>& codeBlocks,
    733         const Array<size_t>& codeBlockLiveTimes, const LastVRegMap& lastVRegMap,
     732        const std::vector<CodeBlock>& codeBlocks, const LastVRegMap& lastVRegMap,
    734733        std::vector<Liveness>* livenesses, const VarIndexMap* vregIndexMaps,
    735734        size_t regTypesNum, const cxuint* regRanges)
     
    754753            // insert live time to last seen position
    755754            const CodeBlock& lastBlk = codeBlocks[flit->blockIndex];
    756             size_t toLiveCvt = codeBlockLiveTimes[flit->blockIndex] - lastBlk.start;
    757             lv.insert(lastBlk.ssaInfoMap.find(entry.first)->second.lastPos + toLiveCvt,
    758                     toLiveCvt + lastBlk.end);
     755            lv.insert(lastBlk.ssaInfoMap.find(entry.first)->second.lastPos, lastBlk.end);
    759756            for (++flit; flit != flitEnd; ++flit)
    760757            {
    761758                const CodeBlock& cblock = codeBlocks[flit->blockIndex];
    762                 size_t blockLiveTime = codeBlockLiveTimes[flit->blockIndex];
     759                size_t blockLiveTime = cblock.start;
    763760                lv.insert(blockLiveTime, cblock.end-cblock.start + blockLiveTime);
    764761            }
     
    768765static void putCrossBlockForLoop(const std::deque<FlowStackEntry3>& flowStack,
    769766        const std::vector<CodeBlock>& codeBlocks,
    770         const Array<size_t>& codeBlockLiveTimes,
    771767        std::vector<Liveness>* livenesses, const VarIndexMap* vregIndexMaps,
    772768        size_t regTypesNum, const cxuint* regRanges)
     
    821817                {
    822818                    const CodeBlock& cblock = codeBlocks[flit2->blockIndex];
    823                     size_t blockLiveTime = codeBlockLiveTimes[flit2->blockIndex];
     819                    size_t blockLiveTime = cblock.start;
    824820                    lv.insert(blockLiveTime, cblock.end-cblock.start + blockLiveTime);
    825821                }
     
    831827            {
    832828                const CodeBlock& cblock = codeBlocks[flit2->blockIndex];
    833                 size_t blockLiveTime = codeBlockLiveTimes[flit2->blockIndex];
     829                size_t blockLiveTime = cblock.start;
    834830                lv.insert(blockLiveTime, cblock.end-cblock.start + blockLiveTime);
    835831            }
     
    837833            auto flit2 = flitStart + flowPos;
    838834            const CodeBlock& firstBlk = codeBlocks[flit2->blockIndex];
    839             size_t toLiveCvt = codeBlockLiveTimes[flit2->blockIndex] - firstBlk.start;
    840             lv.insert(codeBlockLiveTimes[flit2->blockIndex],
    841                     firstBlk.ssaInfoMap.find(entry.first)->second.firstPos + toLiveCvt);
     835            lv.insert(firstBlk.start,
     836                    firstBlk.ssaInfoMap.find(entry.first)->second.firstPos);
    842837            // insert liveness for first block in loop of last SSAId
    843838            flit2 = flitStart + (varMapIt->second.second+1);
    844839            const CodeBlock& lastBlk = codeBlocks[flit2->blockIndex];
    845             toLiveCvt = codeBlockLiveTimes[flit2->blockIndex] - lastBlk.start;
    846             lv.insert(lastBlk.ssaInfoMap.find(entry.first)->second.lastPos + toLiveCvt,
    847                     toLiveCvt + lastBlk.end);
     840            lv.insert(lastBlk.ssaInfoMap.find(entry.first)->second.lastPos, lastBlk.end);
    848841            // fill up loop end
    849842            for (++flit2; flit2 != flitEnd; ++flit2)
    850843            {
    851844                const CodeBlock& cblock = codeBlocks[flit2->blockIndex];
    852                 size_t blockLiveTime = codeBlockLiveTimes[flit2->blockIndex];
     845                size_t blockLiveTime = cblock.start;
    853846                lv.insert(blockLiveTime, cblock.end-cblock.start + blockLiveTime);
    854847            }
     
    981974    LastVRegMap lastVRegMap;
    982975    // hold start live time position for every code block
    983     Array<size_t> codeBlockLiveTimes(codeBlocks.size());
    984976    std::unordered_set<size_t> blockInWay;
    985977   
     
    999991        if (entry.nextIndex == 0)
    1000992        {
     993            curLiveTime = cblock.start;
    1001994            // process current block
    1002995            if (!blockInWay.insert(entry.blockIndex).second)
    1003996            {
    1004997                // if loop
    1005                 putCrossBlockForLoop(flowStack, codeBlocks, codeBlockLiveTimes,
     998                putCrossBlockForLoop(flowStack, codeBlocks,
    1006999                        livenesses, vregIndexMaps, regTypesNum, regRanges);
    10071000                flowStack.pop_back();
     
    10091002            }
    10101003           
    1011             codeBlockLiveTimes[entry.blockIndex] = curLiveTime;
    1012             putCrossBlockLivenesses(flowStack, codeBlocks, codeBlockLiveTimes,
     1004            putCrossBlockLivenesses(flowStack, codeBlocks,
    10131005                    lastVRegMap, livenesses, vregIndexMaps, regTypesNum, regRanges);
    10141006           
     
    10311023            }
    10321024           
    1033             size_t curBlockLiveEnd = cblock.end - cblock.start + curLiveTime;
     1025            size_t curBlockLiveEnd = cblock.end;
    10341026            if (!visited[entry.blockIndex])
    10351027            {
     
    10551047                        rvu = usageHandler.nextUsage();
    10561048                    }
    1057                     size_t liveTime = oldOffset - cblock.start + curLiveTime;
     1049                    size_t liveTime = oldOffset;
    10581050                    if (!hasNext || rvu.offset > oldOffset)
    10591051                    {
     
    10861078                                // because live after this instr
    10871079                                lv.insert(liveTimeNext, liveTimeNext+1);
    1088                             sinfo.lastPos = liveTimeNext - curLiveTime + cblock.start;
     1080                            sinfo.lastPos = liveTimeNext;
    10891081                        }
    10901082                        // get linear deps and equal to
Note: See TracChangeset for help on using the changeset viewer.