Changeset 3875 in CLRX


Ignore:
Timestamp:
Mar 7, 2018, 2:35:18 PM (6 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: fixed subroutine cache usage. Fixed pushing ssaIds before visited subroutine. Add hasValue to VectorSet?.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/CLRX/utils/Containers.h

    r3851 r3875  
    319319            std::vector<T>::erase(fit);
    320320    }
     321   
     322    bool hasValue(const T& v) const
     323    {
     324        return std::find(std::vector<T>::begin(), std::vector<T>::end(), v) !=
     325                std::vector<T>::end();
     326    }
    321327};
    322328
  • CLRadeonExtender/trunk/amdasm/AsmRegAlloc.cpp

    r3874 r3875  
    11451145    for (const auto& entry: src)
    11461146    {
    1147         if (laterRdata.lastSSAIdMap.find(entry.first) != laterRdata.lastSSAIdMap.end())
    1148             continue;
     1147        auto lsit = laterRdata.lastSSAIdMap.find(entry.first);
     1148        if (lsit != laterRdata.lastSSAIdMap.end())
     1149        {
     1150            auto csit = laterRdata.curSSAIdMap.find(entry.first);
     1151            if (csit != laterRdata.curSSAIdMap.end() && !csit->second.empty())
     1152            {
     1153                // if found in last ssa ID map,
     1154                // but has first value (some way do not change SSAId)
     1155                // then pass to add new ssaIds before this point
     1156                if (!lsit->second.hasValue(csit->second[0]))
     1157                    continue; // otherwise, skip
     1158            }
     1159            else
     1160                continue;
     1161        }
    11491162        std::cout << "  entry: " << entry.first.regVar << ":" <<
    11501163                cxuint(entry.first.index) << ":";
     
    13681381        {
    13691382            // process current block
    1370             if (/*cachedRdata != nullptr &&*/
    1371                 visited[entry.blockIndex] && flowStack.size() > 1)
    1372             {
    1373                 const RoutineData* cachedRdata = subroutinesCache.use(entry.blockIndex);
     1383            //if (/*cachedRdata != nullptr &&*/
     1384                //visited[entry.blockIndex] && flowStack.size() > 1)
     1385            const RoutineData* cachedRdata = nullptr;
     1386            if (routineBlock != entry.blockIndex)
     1387            {
     1388                cachedRdata = subroutinesCache.use(entry.blockIndex);
    13741389                if (cachedRdata == nullptr)
    13751390                {
    13761391                    // try in routine map
    13771392                    auto rit = routineMap.find(entry.blockIndex);
    1378                     cachedRdata = &rit->second;
     1393                    if (rit != routineMap.end())
     1394                        cachedRdata = &rit->second;
    13791395                }
    1380                 if (cachedRdata == nullptr)
     1396                if (cachedRdata == nullptr && subroutToCache.count(entry.blockIndex)!=0)
    13811397                {
    13821398                    RoutineData subrData;
     
    13881404                    cachedRdata = subroutinesCache.use(entry.blockIndex);
    13891405                }
    1390                 else
    1391                     std::cout << "use cached subr " << entry.blockIndex << std::endl;
    1392                
    1393                 // TODO: correctly join this path with routine data
    1394                 // currently does not include further substitutions in visited path
     1406            }
     1407           
     1408            if (cachedRdata != nullptr)
     1409            {
     1410                std::cout << "use cached subr " << entry.blockIndex << std::endl;
    13951411                std::cout << "procret2: " << entry.blockIndex << std::endl;
    13961412                joinLastSSAIdMap(rdata.lastSSAIdMap, rdata.curSSAIdMap, *cachedRdata);
Note: See TracChangeset for help on using the changeset viewer.