Changeset 3609 in CLRX


Ignore:
Timestamp:
Jan 11, 2018, 5:57:30 PM (9 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: simplify resolveSSAConflict: remove handled from toRemoveMap and use size_t as value (sourceBlock).

File:
1 edited

Legend:

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

    r3608 r3609  
    466466};
    467467
    468 struct ResolveEntry
    469 {
    470     size_t sourceBlock;
    471     bool handled;
    472 };
    473 
    474468typedef AsmRegAllocator::SSAReplace SSAReplace; // first - orig ssaid, second - dest ssaid
    475469typedef AsmRegAllocator::SSAReplacesMap SSAReplacesMap;
     
    519513    std::vector<bool> visited(codeBlocks.size(), false);
    520514   
    521     std::unordered_map<AsmSingleVReg, ResolveEntry> toResolveMap;
     515    // key - vreg, value - source block where vreg of conflict found
     516    std::unordered_map<AsmSingleVReg, size_t> toResolveMap;
    522517   
    523518    while (!flowStack.empty())
     
    536531                {
    537532                    const SSAInfo& sinfo = sentry.second;
    538                     auto res = toResolveMap.insert({ sentry.first,
    539                         { entry.blockIndex, false } });
     533                    auto res = toResolveMap.insert({ sentry.first, entry.blockIndex, });
    540534                   
    541                     if (res.second && !res.first->second.handled && sinfo.readBeforeWrite)
     535                    if (res.second && sinfo.readBeforeWrite)
    542536                    {
    543537                        // resolve conflict for this variable ssaId>.
     
    549543                            // found, resolve by set ssaIdLast
    550544                            for (size_t ssaId: it->second)
     545                            {
    551546                                if (ssaId > sinfo.ssaIdBefore)
    552                                 {
    553547                                    /*std::cout << "  insertreplace: " <<
    554548                                        ssaId << ", " << sinfo.ssaIdBefore << std::endl;*/
    555549                                    insertReplace(replacesMap, sentry.first, ssaId,
    556550                                                sinfo.ssaIdBefore);
    557                                     res.first->second.handled = true;
    558                                 }
    559551                                /*else
    560552                                    std::cout << "  noinsertreplace: " <<
    561553                                        ssaId << "," << sinfo.ssaIdBefore << std::endl;*/
     554                            }
    562555                    }
    563556                }
     
    599592                // mark resolved variables as not handled for further processing
    600593                auto it = toResolveMap.find(sentry.first);
    601                 if (it != toResolveMap.end() &&
    602                     it->second.sourceBlock == entry.blockIndex)
     594                if (it != toResolveMap.end() && it->second == entry.blockIndex)
    603595                    // remove if not handled yet
    604596                    toResolveMap.erase(it);
Note: See TracChangeset for help on using the changeset viewer.