Ignore:
Timestamp:
Mar 5, 2018, 7:07:34 PM (15 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Implement subroutine cache usage. Add new testcase with fork&join inside routine. Disable previous testcase.

File:
1 edited

Legend:

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

    r3871 r3872  
    11401140}
    11411141
     1142static void joinLastSSAIdMap(LastSSAIdMap& dest, const LastSSAIdMap& src,
     1143                    const LastSSAIdMap& laterSSAIds)
     1144{
     1145    for (const auto& entry: src)
     1146    {
     1147        if (laterSSAIds.find(entry.first) != laterSSAIds.end())
     1148            continue;
     1149        std::cout << "  entry: " << entry.first.regVar << ":" <<
     1150                cxuint(entry.first.index) << ":";
     1151        for (size_t v: entry.second)
     1152            std::cout << " " << v;
     1153        std::cout << std::endl;
     1154        auto res = dest.insert(entry); // find
     1155        if (res.second)
     1156            continue; // added new
     1157        VectorSet<size_t>& destEntry = res.first->second;
     1158        // add new ways
     1159        for (size_t ssaId: entry.second)
     1160            destEntry.insertValue(ssaId);
     1161        std::cout << "    :";
     1162        for (size_t v: destEntry)
     1163            std::cout << " " << v;
     1164        std::cout << std::endl;
     1165    }
     1166    joinLastSSAIdMap(dest, laterSSAIds);
     1167}
     1168
     1169
    11421170static void joinRoutineData(RoutineData& dest, const RoutineData& src)
    11431171{
     
    13391367        {
    13401368            // process current block
    1341             //RoutineData* cachedRdata = subroutinesCache.use(entry.blockIndex);
    13421369            if (/*cachedRdata != nullptr &&*/
    13431370                visited[entry.blockIndex] && flowStack.size() > 1)
    13441371            {
     1372                RoutineData* cachedRdata = subroutinesCache.use(entry.blockIndex);
     1373                if (cachedRdata == nullptr)
     1374                {
     1375                    RoutineData subrData;
     1376                    std::cout << "-- subrcache2 for " << entry.blockIndex << std::endl;
     1377                    createRoutineData(codeBlocks, curSSAIdMap, subroutToCache,
     1378                            subroutinesCache, routineMap, subrData, entry.blockIndex);
     1379                    subroutinesCache.put(entry.blockIndex, subrData);
     1380                   
     1381                    cachedRdata = subroutinesCache.use(entry.blockIndex);
     1382                }
     1383                else
     1384                    std::cout << "use cached subr " << entry.blockIndex << std::endl;
     1385               
     1386               
    13451387                // TODO: correctly join this path with routine data
    13461388                // currently does not include further substitutions in visited path
    13471389                std::cout << "procret2: " << entry.blockIndex << std::endl;
    1348                 joinLastSSAIdMap(rdata.lastSSAIdMap, rdata.curSSAIdMap);
     1390                joinLastSSAIdMap(rdata.lastSSAIdMap, rdata.curSSAIdMap,
     1391                            cachedRdata->lastSSAIdMap);
    13491392                std::cout << "procretend2" << std::endl;
    13501393                flowStack.pop_back();
     
    13661409                    }
    13671410            }
    1368             else if (subroutToCache.count(entry.blockIndex)!=0)
     1411            else
    13691412            {   // begin caching
    13701413                flowStack.pop_back();
     
    14301473               
    14311474                updateRoutineCurSSAIdMap(&rdata, ssaEntry, entry, curSSAId, nextSSAId);
     1475            }
     1476           
     1477            if (flowStack.size() > 1 && subroutToCache.count(entry.blockIndex)!=0)
     1478            { //put to cache
     1479                RoutineData subrData;
     1480                std::cout << "-- subrcache for " << entry.blockIndex << std::endl;
     1481                createRoutineData(codeBlocks, curSSAIdMap, subroutToCache,
     1482                        subroutinesCache, routineMap, subrData, entry.blockIndex);
     1483                subroutinesCache.put(entry.blockIndex, subrData);
    14321484            }
    14331485           
Note: See TracChangeset for help on using the changeset viewer.