Changeset 3926 in CLRX


Ignore:
Timestamp:
Mar 22, 2018, 8:51:30 PM (9 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Apply loops ssaIds to prepared subroutine to cache. Use initial subRdata (current second pass) while joining
subroutine data with second pass of loop (this subroutine).

File:
1 edited

Legend:

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

    r3925 r3926  
    15761576    SubrLoopsMap subrLoopsMap;
    15771577    SubrLoopsMap loopSubrsMap;
     1578    std::unordered_map<size_t, RoutineData> subrDataForLoopMap;
    15781579    std::deque<FlowStackEntry> flowStack;
    15791580    std::vector<bool> flowStackBlocks(codeBlocks.size(), false);
     
    16141615                subroutinesCache, routineMap, subrData, entry.blockIndex, true,
    16151616                flowStackBlocks);
     1617            RoutineData subrDataCopy;
    16161618            flowStackBlocks[entry.blockIndex] = oldFB;
    16171619           
     
    16211623                if (loopsit2 != rdata.loopEnds.end())
    16221624                {
     1625                    subrDataCopy = subrData;
     1626                    subrDataForLoopMap.insert({ entry.blockIndex, subrDataCopy });
    16231627                    std::cout << "   loopssaId2Map: " <<
    16241628                            entry.blockIndex << std::endl;
     
    16281632                    if (applyToMainRoutine)
    16291633                        joinLastSSAIdMap(rdata.lastSSAIdMap, loopsit2->second.ssaIdMap,
    1630                                         subrData, true);
     1634                                        subrDataCopy, true);
    16311635                }
    16321636            }
    16331637           
    1634             // apply loops for subroutine
     1638            // apply loop to subroutines
    16351639            auto it = loopSubrsMap.find(entry.blockIndex);
    16361640            if (it != loopSubrsMap.end())
     
    16451649                    std::cout << "*";
    16461650                    joinLastSSAIdMap(subrData2->lastSSAIdMap,
    1647                             loopsit2->second.ssaIdMap, subrData, false);
     1651                            loopsit2->second.ssaIdMap, subrDataCopy, false);
     1652                }
     1653                std::cout << "\n";
     1654            }
     1655            // apply loops to this subroutine
     1656            auto it2 = subrLoopsMap.find(entry.blockIndex);
     1657            if (it2 != subrLoopsMap.end())
     1658            {
     1659                std::cout << "    found subrloopsmap: " << entry.blockIndex << ":";
     1660                for (size_t loop: it2->second)
     1661                {
     1662                    auto loopsit3 = rdata.loopEnds.find(loop);
     1663                    if (loopsit3 == rdata.loopEnds.end() ||
     1664                        activeLoops.hasValue(loop))
     1665                        continue;
     1666                    std::cout << " " << loop;
     1667                    auto  itx = subrDataForLoopMap.find(loop);
     1668                    if (itx != subrDataForLoopMap.end())
     1669                        joinLastSSAIdMap(subrData.lastSSAIdMap,
     1670                                loopsit3->second.ssaIdMap, itx->second, false);
    16481671                }
    16491672                std::cout << "\n";
Note: See TracChangeset for help on using the changeset viewer.