Changeset 3850 in CLRX


Ignore:
Timestamp:
Feb 24, 2018, 9:40:25 PM (14 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: First working version with res first point cache (pfcache).

File:
1 edited

Legend:

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

    r3849 r3850  
    701701        if (it != prevWaysIndexMap.end())
    702702        {
    703             const LastSSAIdMap* cached = resFirstPointsCache.use(pfPrev->blockIndex);
     703            const LastSSAIdMap* cached = resFirstPointsCache.use(it->second.first);
    704704            if (cached!=nullptr)
    705705            {
    706                 std::cout << "pfcached: " << pfPrev->blockIndex << std::endl;
     706                std::cout << "use pfcached: " << it->second.first << ", " <<
     707                        it->second.second << std::endl;
    707708                stackVarMap = *cached;
    708709                pfStartIndex = it->second.second+1;
     
    736737        // put to first point cache
    737738        if (waysToCache[pfit->blockIndex] && !resFirstPointsCache.hasKey(pfit->blockIndex))
     739        {
     740            std::cout << "put pfcache " << pfit->blockIndex << std::endl;
    738741            resFirstPointsCache.put(pfit->blockIndex, stackVarMap);
     742        }
    739743    }
    740744   
     
    12311235    PrevWaysIndexMap prevWaysIndexMap;
    12321236    // to track ways last block indices pair: block index, flowStackPos)
    1233     std::stack<std::pair<size_t, size_t> > cacheWaysStack;
     1237    std::pair<size_t, size_t> lastCommonCacheWayPoint{ SIZE_MAX, SIZE_MAX };
    12341238   
    12351239    std::vector<bool> waysToCache(codeBlocks.size(), false);
     
    13041308                flowStack.pop_back();
    13051309               
    1306                 // track cache points in way (res first points)
    13071310                size_t curWayBIndex = flowStack.back().blockIndex;
    1308                 waysToCache[curWayBIndex] = true;
    1309                 size_t prevWayBIndex = SIZE_MAX;
    1310                 if (!cacheWaysStack.empty())
     1311                if (lastCommonCacheWayPoint.first != SIZE_MAX)
    13111312                {
    1312                     std::pair<size_t, size_t> prevWayEntry = cacheWaysStack.top();
    1313                     prevWayBIndex = prevWayEntry.first;
    1314                     if (prevWayBIndex != curWayBIndex)
    1315                         prevWaysIndexMap[curWayBIndex] = prevWayEntry;
     1313                    // mark point of way to cache (res first point)
     1314                    waysToCache[lastCommonCacheWayPoint.first] = true;
     1315                    std::cout << "mark to pfcache " <<
     1316                            lastCommonCacheWayPoint.first << ", " <<
     1317                            curWayBIndex << std::endl;
     1318                    prevWaysIndexMap[curWayBIndex] = lastCommonCacheWayPoint;
    13161319                }
    1317                 if (prevWayBIndex != curWayBIndex)
    1318                     cacheWaysStack.push(std::make_pair(curWayBIndex, flowStack.size()-1));
     1320                lastCommonCacheWayPoint = { curWayBIndex, flowStack.size()-1 };
     1321                std::cout << "lastCcwP: " << curWayBIndex << std::endl;
    13191322                continue;
    13201323            }
     
    14061409           
    14071410            std::cout << "pop: " << entry.blockIndex << std::endl;
    1408             if (!cacheWaysStack.empty() && cacheWaysStack.top().first == entry.blockIndex)
    1409                 cacheWaysStack.pop();
    14101411            flowStack.pop_back();
     1412            if (!flowStack.empty() && lastCommonCacheWayPoint.first != SIZE_MAX &&
     1413                    lastCommonCacheWayPoint.second >= flowStack.size())
     1414            {
     1415                lastCommonCacheWayPoint =
     1416                        { flowStack.back().blockIndex, flowStack.size()-1 };
     1417                std::cout << "POPlastCcwP: " << lastCommonCacheWayPoint.first << std::endl;
     1418            }
    14111419        }
    14121420    }
Note: See TracChangeset for help on using the changeset viewer.