Changeset 3906 in CLRX


Ignore:
Timestamp:
Mar 18, 2018, 8:56:14 PM (9 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Register loopEnd if block in prevFlowStackBlocks

File:
1 edited

Legend:

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

    r3905 r3906  
    14631463        if (entry.nextIndex == 0)
    14641464        {
     1465            bool isLoop = loopBlocks.find(entry.blockIndex) != loopBlocks.end();
     1466           
    14651467            if (!prevFlowStackBlocks.empty() && prevFlowStackBlocks[entry.blockIndex])
    14661468            {
     1469                if (isLoop && (!noMainLoop || routineBlock != entry.blockIndex))
     1470                {
     1471                    // handle loops
     1472                    std::cout << "  join loop ssaids: " << entry.blockIndex << std::endl;
     1473                    auto loopsit = loopSSAIdMap.find(entry.blockIndex);
     1474                    if (loopsit != loopSSAIdMap.end())
     1475                    {
     1476                        if (!loopsit->second.passed)
     1477                            // still in loop join ssaid map
     1478                            joinLastSSAIdMap(loopsit->second.ssaIdMap, rdata.curSSAIdMap);
     1479                    }
     1480                    else // insert new
     1481                        loopsit = loopSSAIdMap.insert({ entry.blockIndex,
     1482                                    { rdata.curSSAIdMap, false } }).first;
     1483                   
     1484                    // add to routine data loopEnds
     1485                    auto loopsit2 = rdata.loopEnds.find(entry.blockIndex);
     1486                    if (loopsit2 != rdata.loopEnds.end())
     1487                    {
     1488                        if (!loopsit->second.passed)
     1489                            // still in loop join ssaid map
     1490                            joinLastSSAIdMap(loopsit2->second, rdata.curSSAIdMap);
     1491                    }
     1492                    else
     1493                        rdata.loopEnds.insert({ entry.blockIndex, rdata.curSSAIdMap });
     1494                }
     1495               
    14671496                flowStackBlocks[entry.blockIndex] = !flowStackBlocks[entry.blockIndex];
    14681497                flowStack.pop_back();
     
    14751504            const RoutineData* cachedRdata = nullptr;
    14761505           
    1477             bool isLoop = loopBlocks.find(entry.blockIndex) != loopBlocks.end();
    14781506            if (routineBlock != entry.blockIndex)
    14791507            {
Note: See TracChangeset for help on using the changeset viewer.