Changeset 3949 in CLRX


Ignore:
Timestamp:
Mar 28, 2018, 10:31:15 PM (6 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Yet another update 5 (recursion support).

File:
1 edited

Legend:

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

    r3948 r3949  
    16101610        RoutineData& rdata, size_t routineBlock, bool noMainLoop = false,
    16111611        const std::vector<bool>& prevFlowStackBlocks = {},
    1612         const std::deque<CallStackEntry>& callStack = {})
     1612        const std::deque<CallStackEntry>& callStack = {},
     1613        RetRecurState* retRecurState = nullptr)
    16131614{
    16141615    std::cout << "--------- createRoutineData ----------------\n";
     
    16271628    flowStack.push_back({ routineBlock, 0 });
    16281629    flowStackBlocks[routineBlock] = true;
     1630   
     1631    if (retRecurState != nullptr)
     1632    {
     1633        std::cout << " -- -- get retrecurstate" << std::endl;
     1634        retSSAIdMap = retRecurState->retSSAIdMap;
     1635        flowStack = retRecurState->flowStack;
     1636        flowStackBlocks = retRecurState->flowStackBlocks;
     1637    }
    16291638   
    16301639    while (!flowStack.empty())
     
    18831892                            joinRetSSAIdMap(retSSAIdMap, callRdata->lastSSAIdMap,
    18841893                                            next.block);
    1885                         else
     1894                        else if (routineMapRecur != nullptr)
    18861895                        {   // put retRecurState
    18871896                            std::cout << "-- store retrecurstate: " <<
    18881897                                    next.block << ": " << entry.blockIndex << std::endl;
     1898                            std::deque<FlowStackEntry> newFlowStack;
     1899                            newFlowStack.push_back({entry.blockIndex, 0});
    18891900                            retRecurStateMapMap[next.block].insert({ entry.blockIndex, {
    18901901                                    curSSAIdMap, retSSAIdMap,
    1891                                     flowStack, flowStackBlocks, callStack } });
     1902                                    newFlowStack, flowStackBlocks, callStack } });
    18921903                        }
    18931904                    }
     
    19491960            if ((!noMainLoop || flowStack.size() > 1) &&
    19501961                subroutToCache.count(entry.blockIndex)!=0 &&
    1951                 recurBlocks.find(entry.blockIndex) == recurBlocks.end())
     1962                recurBlocks.find(entry.blockIndex) == recurBlocks.end() &&
     1963                retRecurState == nullptr)
    19521964            {   //put to cache
    19531965                std::cout << "-- subrcache for " << entry.blockIndex << std::endl;
     
    23322344                    recurseBlocks.erase(routineBlock);
    23332345                    // join retRecurStates
    2334                     for (const auto& entry: retRecurStateMapMap[routineBlock])
     2346                    for (auto& entry: retRecurStateMapMap[routineBlock])
     2347                    {
    23352348                        std::cout << "join retrecState: " << entry.first << std::endl;
     2349                        createRoutineData(codeBlocks, entry.second.curSSAIdMap,
     2350                                loopBlocks, recurseBlocks, cblocksToCache,
     2351                                subroutinesCache, routineMap, nullptr,
     2352                                retRecurStateMapMap, rdataSP, routineBlock, false, {},
     2353                                callStack, &entry.second);
     2354                        joinRoutineData(prevRdata, rdataSP);
     2355                    }
    23362356                }
    23372357               
Note: See TracChangeset for help on using the changeset viewer.