Changeset 3614 in CLRX


Ignore:
Timestamp:
Jan 12, 2018, 8:09:32 PM (8 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Do not add next entry for next block if previous block has some calls (again).
Change value of the curSSAIdMap (now is vector of the sizes).

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3612 r3614  
    407407            {
    408408                curIt->haveEnd = false; // revert haveEnd if block have cond jump or call
    409                 if (it2 != codeBlocks.end())
     409                if (it2 != codeBlocks.end() && entry.type == AsmCodeFlowType::CJUMP)
    410410                    // add next next block (only for cond jump)
    411411                    curIt->nexts.push_back({ size_t(it2 - codeBlocks.begin()), false });
     
    738738    std::unordered_map<AsmSingleVReg, size_t> totalSSACountMap;
    739739    // last SSA ids in current way in code flow
    740     std::unordered_map<AsmSingleVReg, size_t> curSSAIdMap;
     740    std::unordered_map<AsmSingleVReg, std::vector<size_t> > curSSAIdMap;
    741741    // routine map - routine datas map, value - last SSA ids map
    742742    std::unordered_map<size_t, RoutineData> routineMap;
     
    773773                    }
    774774                   
    775                     size_t& ssaId = curSSAIdMap[ssaEntry.first];
     775                    auto& ssaIds = curSSAIdMap[ssaEntry.first];
     776                    if (ssaIds.empty())
     777                        ssaIds.resize(1);
     778                    size_t& ssaId = ssaIds.front();
    776779                    size_t& totalSSACount = totalSSACountMap[ssaEntry.first];
    777780                    if (totalSSACount == 0)
     
    954957            {
    955958                auto it = entry.prevSSAIds.find(ssaEntry.first);
     959                auto& ssaIds = curSSAIdMap[ssaEntry.first];
     960                if (ssaIds.empty())
     961                    ssaIds.resize(1);
    956962                if (it == entry.prevSSAIds.end())
    957                     curSSAIdMap[ssaEntry.first] -= ssaEntry.second.ssaIdChange;
     963                    ssaIds.front() -= ssaEntry.second.ssaIdChange;
    958964                else // if found
    959                     curSSAIdMap[ssaEntry.first] = it->second;
     965                    ssaIds.front() = it->second;
    960966            }
    961967            //std::cout << "pop" << std::endl;
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc.cpp

    r3613 r3614  
    226226        {
    227227            { 0, 12,
    228                 { { 1, false }, { 3, true }, { 4, true }, { 5, true } },
     228                { { 3, true }, { 4, true }, { 5, true } },
    229229                true, false, false },
    230230            { 12, 20, { { 6, false } }, false, false, true },
     
    290290            { 0, 8, { }, false, false, false },
    291291            { 8, 16,
    292                 { { 2, false }, { 5, true }, { 6, true }, { 9, true } },
     292                { { 5, true }, { 6, true }, { 9, true } },
    293293                true, false, false },
    294294            // 2
    295295            { 16, 32,
    296                 { { 3, false }, { 7, true }, { 11, true } },
     296                { { 7, true }, { 11, true } },
    297297                true, false, false },
    298298            { 32, 48,
     
    305305            // 6 - c2 subroutine
    306306            { 80, 88, { }, false, false, false },
    307             { 88, 96, { { 8, false }, { 10, true } },
     307            { 88, 96, { { 10, true } },
    308308                true, false, false },
    309309            { 96, 104, { }, false, true, true },
     
    495495            { 56, 64, { }, false, false, true },
    496496            { 64, 76,
    497                 { { 7, false }, { 9, true } },
     497                { { 9, true } },
    498498                true, false, false },
    499499            { 76, 84,
    500                 { { 8, false }, { 9, true } },
     500                { { 9, true } },
    501501                true, false, false },
    502502            { 84, 92, { }, false, false, true },
     
    544544        {
    545545            { 0, 12,
    546                 { { 1, false }, { 5, false }, { 3, true }, { 4, true } },
     546                { { 5, false }, { 3, true }, { 4, true } },
    547547                true, false, true },
    548548            { 12, 20, { { 6, false } }, false, false, true },
     
    20562056        },
    20572057        true, ""
    2058     },
     2058    }
     2059#if 0
     2060    ,
    20592061    {   // 14 - simple call
    20602062        R"ffDXD(.regvar sa:s:8, va:v:8
     
    21982200        true, ""
    21992201    }
     2202#endif
    22002203};
    22012204
Note: See TracChangeset for help on using the changeset viewer.