Changeset 3838 in CLRX


Ignore:
Timestamp:
Feb 22, 2018, 6:11:42 PM (16 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Separate some functional blocks in resolveSSAConflicts into smaller routines.

File:
1 edited

Legend:

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

    r3837 r3838  
    493493}
    494494
     495static void handleSSAEntryWhileResolving(SSAReplacesMap& replacesMap,
     496            const LastSSAIdMap& stackVarMap,
     497            std::unordered_map<AsmSingleVReg, size_t>& toResolveMap,
     498            FlowStackEntry2& entry,
     499            const std::pair<const AsmSingleVReg, AsmRegAllocator::SSAInfo>& sentry)
     500{
     501    const SSAInfo& sinfo = sentry.second;
     502    auto res = toResolveMap.insert({ sentry.first, entry.blockIndex });
     503   
     504    if (res.second && sinfo.readBeforeWrite)
     505    {
     506        // resolve conflict for this variable ssaId>.
     507        // only if in previous block previous SSAID is
     508        // read before all writes
     509        auto it = stackVarMap.find(sentry.first);
     510       
     511        if (it != stackVarMap.end())
     512        {
     513            // found, resolve by set ssaIdLast
     514            for (size_t ssaId: it->second)
     515            {
     516                if (ssaId > sinfo.ssaIdBefore)
     517                {
     518                    std::cout << "  insertreplace: " << sentry.first.regVar << ":" <<
     519                        sentry.first.index  << ": " <<
     520                        ssaId << ", " << sinfo.ssaIdBefore << std::endl;
     521                    insertReplace(replacesMap, sentry.first, ssaId,
     522                                sinfo.ssaIdBefore);
     523                }
     524                else if (ssaId < sinfo.ssaIdBefore)
     525                {
     526                    std::cout << "  insertreplace2: " << sentry.first.regVar << ":" <<
     527                        sentry.first.index  << ": " <<
     528                        ssaId << ", " << sinfo.ssaIdBefore << std::endl;
     529                    insertReplace(replacesMap, sentry.first,
     530                                    sinfo.ssaIdBefore, ssaId);
     531                }
     532                /*else
     533                    std::cout << "  noinsertreplace: " <<
     534                        ssaId << "," << sinfo.ssaIdBefore << std::endl;*/
     535            }
     536        }
     537    }
     538}
     539
    495540static void resolveSSAConflicts(const std::deque<FlowStackEntry>& prevFlowStack,
    496541        const std::unordered_map<size_t, RoutineData>& routineMap,
     
    550595               
    551596                for (auto& sentry: cblock.ssaInfoMap)
    552                 {
    553                     const SSAInfo& sinfo = sentry.second;
    554                     auto res = toResolveMap.insert({ sentry.first, entry.blockIndex });
    555                    
    556                     if (res.second && sinfo.readBeforeWrite)
    557                     {
    558                         // resolve conflict for this variable ssaId>.
    559                         // only if in previous block previous SSAID is
    560                         // read before all writes
    561                         auto it = stackVarMap.find(sentry.first);
    562                        
    563                         if (it != stackVarMap.end())
    564                         {
    565                             // found, resolve by set ssaIdLast
    566                             for (size_t ssaId: it->second)
    567                             {
    568                                 if (ssaId > sinfo.ssaIdBefore)
    569                                 {
    570                                     std::cout << "  insertreplace: " <<
    571                                         sentry.first.regVar << ":" <<
    572                                         sentry.first.index  << ": " <<
    573                                         ssaId << ", " << sinfo.ssaIdBefore << std::endl;
    574                                     insertReplace(replacesMap, sentry.first, ssaId,
    575                                                 sinfo.ssaIdBefore);
    576                                 }
    577                                 else if (ssaId < sinfo.ssaIdBefore)
    578                                 {
    579                                     std::cout << "  insertreplace2: " <<
    580                                         sentry.first.regVar << ":" <<
    581                                         sentry.first.index  << ": " <<
    582                                         ssaId << ", " << sinfo.ssaIdBefore << std::endl;
    583                                     insertReplace(replacesMap, sentry.first,
    584                                                   sinfo.ssaIdBefore, ssaId);
    585                                 }
    586                                 /*else
    587                                     std::cout << "  noinsertreplace: " <<
    588                                         ssaId << "," << sinfo.ssaIdBefore << std::endl;*/
    589                             }
    590                         }
    591                     }
    592                 }
     597                    handleSSAEntryWhileResolving(replacesMap, stackVarMap, toResolveMap,
     598                                    entry, sentry);
    593599            }
    594600            else
Note: See TracChangeset for help on using the changeset viewer.