Changeset 3934 in CLRX


Ignore:
Timestamp:
Mar 24, 2018, 8:09:21 PM (9 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Prepping to recursion support.

File:
1 edited

Legend:

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

    r3933 r3934  
    845845        }
    846846       
    847         /*if (!callStack.empty() &&
    848             entry.blockIndex == callStack.top().callBlock &&
    849             entry.nextIndex-1 == callStack.top().callNextIndex)
    850             callStack.pop(); // just return from call
    851         */
    852847        if (entry.nextIndex < cblock.nexts.size())
    853848        {
    854             /*if (cblock.nexts[entry.nextIndex].isCall)
    855                 callStack.push({ entry.blockIndex, entry.nextIndex,
    856                             cblock.nexts[entry.nextIndex].block });*/
    857849            flowStack.push_back({ cblock.nexts[entry.nextIndex].block, 0 });
    858850            entry.nextIndex++;
     
    10601052        }
    10611053       
    1062         /*if (!callStack.empty() &&
    1063             entry.blockIndex == callStack.top().callBlock &&
    1064             entry.nextIndex-1 == callStack.top().callNextIndex)
    1065             callStack.pop(); // just return from call
    1066         */
    10671054        if (entry.nextIndex < cblock.nexts.size())
    10681055        {
    1069             /*if (cblock.nexts[entry.nextIndex].isCall)
    1070                 callStack.push({ entry.blockIndex, entry.nextIndex,
    1071                             cblock.nexts[entry.nextIndex].block });*/
    10721056            flowStack.push_back({ cblock.nexts[entry.nextIndex].block, 0 });
    10731057            entry.nextIndex++;
     
    19861970    flowStack.push_back({ 0, 0 });
    19871971    flowStackBlocks[0] = true;
     1972    std::unordered_set<size_t> callBlocks;
    19881973    std::unordered_set<size_t> loopBlocks;
     1974    std::unordered_set<size_t> recurseBlocks;
    19891975   
    19901976    while (!flowStack.empty())
     
    20722058        {
    20732059            std::cout << " ret: " << entry.blockIndex << std::endl;
    2074             RoutineData& prevRdata =
    2075                     routineMap.find(callStack.back().routineBlock)->second;
    2076             if (!isRoutineGen[callStack.back().routineBlock])
    2077             {
    2078                 //RoutineData myRoutineData;
     2060            const size_t routineBlock = callStack.back().routineBlock;
     2061            RoutineData& prevRdata = routineMap.find(routineBlock)->second;
     2062            if (!isRoutineGen[routineBlock])
     2063            {
    20792064                createRoutineData(codeBlocks, curSSAIdMap, loopBlocks,
    20802065                            cblocksToCache, subroutinesCache, routineMap, prevRdata,
    2081                             callStack.back().routineBlock);
     2066                            routineBlock);
    20822067                //prevRdata.compare(myRoutineData);
    2083                 isRoutineGen[callStack.back().routineBlock] = true;
    2084             }
    2085            
    2086            
     2068                isRoutineGen[routineBlock] = true;
     2069            }
    20872070           
    20882071            callStack.pop_back(); // just return from call
     2072            callBlocks.erase(routineBlock);
    20892073            if (!callStack.empty())
    20902074                // put to parent routine
     
    21002084            {
    21012085                std::cout << " call: " << entry.blockIndex << std::endl;
     2086                if (!callBlocks.insert(nextBlock).second)
     2087                {
     2088                    // if already called (then it is recursion)
     2089                    recurseBlocks.insert(nextBlock);
     2090                    std::cout << "   -- recursion: " << nextBlock << std::endl;
     2091                }
     2092               
    21022093                callStack.push_back({ entry.blockIndex, entry.nextIndex, nextBlock });
    21032094                routineMap.insert({ nextBlock, { } });
Note: See TracChangeset for help on using the changeset viewer.