Changeset 3910 in CLRX


Ignore:
Timestamp:
Mar 19, 2018, 7:59:37 PM (5 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Add tryAddLoopEnd and use in the code.

File:
1 edited

Legend:

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

    r3909 r3910  
    14331433}
    14341434
     1435static bool tryAddLoopEnd(const FlowStackEntry& entry, size_t routineBlock,
     1436                RoutineData& rdata, bool isLoop, bool noMainLoop)
     1437{
     1438    if (isLoop && (!noMainLoop || routineBlock != entry.blockIndex))
     1439    {
     1440        // handle loops
     1441        std::cout << "  join loop ssaids: " << entry.blockIndex << std::endl;
     1442        // add to routine data loopEnds
     1443        auto loopsit2 = rdata.loopEnds.find(entry.blockIndex);
     1444        if (loopsit2 != rdata.loopEnds.end())
     1445        {
     1446            if (!loopsit2->second.passed)
     1447                // still in loop join ssaid map
     1448                joinLastSSAIdMap(loopsit2->second.ssaIdMap, rdata.curSSAIdMap);
     1449        }
     1450        else
     1451            rdata.loopEnds.insert({ entry.blockIndex, { rdata.curSSAIdMap, false } });
     1452        return true;
     1453    }
     1454    return false;
     1455}
     1456
    14351457static void createRoutineData(const std::vector<CodeBlock>& codeBlocks,
    14361458        std::unordered_map<AsmSingleVReg, size_t>& curSSAIdMap,
     
    14641486            if (!prevFlowStackBlocks.empty() && prevFlowStackBlocks[entry.blockIndex])
    14651487            {
    1466                 if (isLoop && (!noMainLoop || routineBlock != entry.blockIndex))
    1467                 {
    1468                     // handle loops
    1469                     std::cout << "  join loop ssaids: " << entry.blockIndex << std::endl;
    1470                     // add to routine data loopEnds
    1471                     auto loopsit2 = rdata.loopEnds.find(entry.blockIndex);
    1472                     if (loopsit2 != rdata.loopEnds.end())
    1473                     {
    1474                         if (!loopsit2->second.passed)
    1475                             // still in loop join ssaid map
    1476                             joinLastSSAIdMap(loopsit2->second.ssaIdMap, rdata.curSSAIdMap);
    1477                     }
    1478                     else
    1479                         rdata.loopEnds.insert({ entry.blockIndex,
    1480                                     { rdata.curSSAIdMap, false } });
    1481                 }
     1488                tryAddLoopEnd(entry, routineBlock, rdata, isLoop, noMainLoop);
    14821489               
    14831490                flowStackBlocks[entry.blockIndex] = !flowStackBlocks[entry.blockIndex];
     
    15661573                    }
    15671574            }
    1568             else if (isLoop && (!noMainLoop || routineBlock != entry.blockIndex))
    1569             {
    1570                 // handle loops
    1571                 std::cout << "  join loop ssaids: " << entry.blockIndex << std::endl;
    1572                 // add to routine data loopEnds
    1573                 auto loopsit2 = rdata.loopEnds.find(entry.blockIndex);
    1574                 if (loopsit2 != rdata.loopEnds.end())
    1575                 {
    1576                     if (!loopsit2->second.passed)
    1577                         // still in loop join ssaid map
    1578                         joinLastSSAIdMap(loopsit2->second.ssaIdMap, rdata.curSSAIdMap);
    1579                 }
    1580                 else
    1581                     rdata.loopEnds.insert({ entry.blockIndex,
    1582                                 { rdata.curSSAIdMap, false } });
    1583                
    1584                 flowStackBlocks[entry.blockIndex] = !flowStackBlocks[entry.blockIndex];
    1585                 flowStack.pop_back();
    1586                 continue;
    1587             }
    15881575            else
    15891576            {
     1577                tryAddLoopEnd(entry, routineBlock, rdata, isLoop, noMainLoop);
    15901578                flowStackBlocks[entry.blockIndex] = !flowStackBlocks[entry.blockIndex];
    15911579                flowStack.pop_back();
Note: See TracChangeset for help on using the changeset viewer.