Changeset 4036 in CLRX


Ignore:
Timestamp:
Apr 20, 2018, 9:11:03 PM (6 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Add liveregion after block for writes from last instruction from previous block.

Location:
CLRadeonExtender/trunk
Files:
3 edited

Legend:

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

    r4035 r4036  
    10001000                flowStack.pop_back();
    10011001                continue;
     1002            }
     1003           
     1004            if (flowStack.size() > 1)
     1005            {
     1006                auto fcit = flowStack.end();
     1007                --fcit;
     1008                --fcit; // previous entry
     1009                // add liveregion into liveness after previous block
     1010                for(Liveness* lv: fcit->lastInstrWrites)
     1011                    lv->insert(curLiveTime, curLiveTime+1);
    10021012            }
    10031013           
     
    10781088                                // because live after this instr
    10791089                                lv.insert(liveTimeNext, liveTimeNext+1);
     1090                            else
     1091                                entry.lastInstrWrites.push_back(&lv);
     1092                               
    10801093                            sinfo.lastPos = liveTimeNext;
    10811094                        }
     
    11311144        else // back
    11321145        {
     1146            if (cblock.nexts.empty() && cblock.haveEnd)
     1147                // add special liveregion for end for last writes
     1148                for(Liveness* lv: entry.lastInstrWrites)
     1149                    lv->insert(SIZE_MAX-1, SIZE_MAX);
     1150           
    11331151            // revert lastSSAIdMap
    11341152            blockInWay.erase(entry.blockIndex);
  • CLRadeonExtender/trunk/amdasm/AsmRegAlloc.h

    r4032 r4036  
    194194    size_t nextIndex;
    195195};
    196 
    197 struct CLRX_INTERNAL FlowStackEntry3
    198 {
    199     size_t blockIndex;
    200     size_t nextIndex;
    201     bool isCall;
    202     RetSSAIdMap prevRetSSAIdSets;
    203 };
    204 
    205196
    206197struct CLRX_INTERNAL CallStackEntry
     
    324315};
    325316
     317struct CLRX_INTERNAL FlowStackEntry3
     318{
     319    size_t blockIndex;
     320    size_t nextIndex;
     321    bool isCall;
     322    std::vector<Liveness*> lastInstrWrites;
     323};
     324
    326325typedef AsmRegAllocator::VarIndexMap VarIndexMap;
    327326
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc3.cpp

    r4032 r4036  
    7171                { { 0, 9 } }, // V3
    7272                { { 0, 9 } }, // va[2]'0
    73                 { } // va[4]'0 : out of range code block
     73                { { SIZE_MAX-1, SIZE_MAX } } // va[4]'0 : out of range code block
    7474            },
    7575            { },
     
    131131                { { 0, 9 } }, // V3
    132132                { { 0, 9 } }, // V4
    133                 { }, // rbx4[1]'0
    134                 { }, // rbx4[2]'0
    135                 { }, // rbx4[3]'0
    136                 { }, // rbx4[4]'0
     133                { { SIZE_MAX-1, SIZE_MAX } }, // rbx4[1]'0
     134                { { SIZE_MAX-1, SIZE_MAX } }, // rbx4[2]'0
     135                { { SIZE_MAX-1, SIZE_MAX } }, // rbx4[3]'0
     136                { { SIZE_MAX-1, SIZE_MAX } }, // rbx4[4]'0
    137137                { { 0, 17 } }, // rbx4[5]'0: tfe - read before write
    138138                { { 0, 9 } }, // va[2]'0
Note: See TracChangeset for help on using the changeset viewer.