Changeset 3911 in CLRX


Ignore:
Timestamp:
Mar 19, 2018, 8:52:52 PM (9 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Reuse code to add subroutines.

File:
1 edited

Legend:

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

    r3910 r3911  
    14551455}
    14561456
     1457
    14571458static void createRoutineData(const std::vector<CodeBlock>& codeBlocks,
    14581459        std::unordered_map<AsmSingleVReg, size_t>& curSSAIdMap,
     
    14791480        FlowStackEntry& entry = flowStack.back();
    14801481        const CodeBlock& cblock = codeBlocks[entry.blockIndex];
     1482       
     1483        auto addSubroutine = [&](bool applyToMainRoutine)
     1484        {
     1485            RoutineData subrData;
     1486            const bool oldFB = flowStackBlocks[entry.blockIndex];
     1487            flowStackBlocks[entry.blockIndex] = !oldFB;
     1488            createRoutineData(codeBlocks, curSSAIdMap, loopBlocks, subroutToCache,
     1489                subroutinesCache, routineMap, subrData, entry.blockIndex, true,
     1490                flowStackBlocks);
     1491            flowStackBlocks[entry.blockIndex] = oldFB;
     1492            if (loopBlocks.find(entry.blockIndex) != loopBlocks.end())
     1493            {   // leave from loop point
     1494                std::cout << "   loopfound " << entry.blockIndex << std::endl;
     1495                auto loopsit2 = rdata.loopEnds.find(entry.blockIndex);
     1496                if (loopsit2 != rdata.loopEnds.end())
     1497                {
     1498                    std::cout << "   loopssaId2Map: " <<
     1499                            entry.blockIndex << std::endl;
     1500                    joinLastSSAIdMap(subrData.lastSSAIdMap,
     1501                            loopsit2->second.ssaIdMap, subrData, true);
     1502                    std::cout << "   loopssaIdMap2End: " << std::endl;
     1503                    if (applyToMainRoutine)
     1504                        joinLastSSAIdMap(rdata.lastSSAIdMap, loopsit2->second.ssaIdMap,
     1505                                        subrData, true);
     1506                }
     1507            }
     1508            subrData.calculateWeight();
     1509            subroutinesCache.put(entry.blockIndex, subrData);
     1510        };
    14811511       
    14821512        if (entry.nextIndex == 0)
     
    15111541                    subroutToCache.count(entry.blockIndex)!=0)
    15121542                {
    1513                     RoutineData subrData;
    15141543                    std::cout << "-- subrcache2 for " << entry.blockIndex << std::endl;
    1515                     const bool oldFB = flowStackBlocks[entry.blockIndex];
    1516                     flowStackBlocks[entry.blockIndex] = !oldFB;
    1517                     createRoutineData(codeBlocks, curSSAIdMap, loopBlocks, subroutToCache,
    1518                         subroutinesCache, routineMap, subrData, entry.blockIndex, true,
    1519                         flowStackBlocks);
    1520                     flowStackBlocks[entry.blockIndex] = oldFB;
    1521                     if (loopBlocks.find(entry.blockIndex) != loopBlocks.end())
    1522                     {   // leave from loop point
    1523                         std::cout << "   loopfound " << entry.blockIndex << std::endl;
    1524                         auto loopsit2 = rdata.loopEnds.find(entry.blockIndex);
    1525                         if (loopsit2 != rdata.loopEnds.end())
    1526                         {
    1527                             std::cout << "   loopssaId2Map: " <<
    1528                                     entry.blockIndex << std::endl;
    1529                             joinLastSSAIdMap(subrData.lastSSAIdMap,
    1530                                     loopsit2->second.ssaIdMap, subrData, true);
    1531                             std::cout << "   loopssaIdMap2End: " << std::endl;
    1532                         }
    1533                     }
    1534                     subrData.calculateWeight();
    1535                     subroutinesCache.put(entry.blockIndex, subrData);
    1536                    
     1544                    addSubroutine(false);
    15371545                    cachedRdata = subroutinesCache.use(entry.blockIndex);
    15381546                }
     
    16531661            if (flowStack.size() > 1 && subroutToCache.count(entry.blockIndex)!=0)
    16541662            { //put to cache
    1655                 RoutineData subrData;
    16561663                std::cout << "-- subrcache for " << entry.blockIndex << std::endl;
    1657                 flowStackBlocks[entry.blockIndex] = false;
    1658                 createRoutineData(codeBlocks, curSSAIdMap, loopBlocks, subroutToCache,
    1659                         subroutinesCache, routineMap, subrData, entry.blockIndex, true,
    1660                         flowStackBlocks);
    1661                 flowStackBlocks[entry.blockIndex] = true;
    1662                 if (loopBlocks.find(entry.blockIndex) != loopBlocks.end())
    1663                 {   // leave from loop point
    1664                     std::cout << "   loopfound: " << entry.blockIndex << std::endl;
    1665                     if (loopsit2 != rdata.loopEnds.end())
    1666                     {
    1667                         std::cout << "   loopssaIdMap: " << entry.blockIndex << std::endl;
    1668                         joinLastSSAIdMap(subrData.lastSSAIdMap, loopsit2->second.ssaIdMap,
    1669                                          subrData, true);
    1670                         std::cout << "   loopssaIdMapEnd: " << std::endl;
    1671                         // for main routine now
    1672                         joinLastSSAIdMap(rdata.lastSSAIdMap, loopsit2->second.ssaIdMap,
    1673                                         subrData, true);
    1674                     }
    1675                 }
    1676                 subrData.calculateWeight();
    1677                 subroutinesCache.put(entry.blockIndex, subrData);
     1664                addSubroutine(true);
    16781665            }
    16791666            if (loopBlocks.find(entry.blockIndex) != loopBlocks.end())
Note: See TracChangeset for help on using the changeset viewer.