Changeset 3847 in CLRX


Ignore:
Timestamp:
Feb 24, 2018, 9:46:57 AM (14 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: First version with SimpleCache? (for second points caching).

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

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

    r3846 r3847  
    567567};
    568568
    569 class CLRX_INTERNAL RBWSSAIdMap: public std::unordered_map<AsmSingleVReg, size_t>
    570 {
    571 public:
    572     RBWSSAIdMap()
    573     { }
    574    
    575     size_t weight() const
    576     { return size(); }
    577 };
    578 
     569typedef LastSSAIdMap RBWSSAIdMap;
    579570
    580571struct CLRX_INTERNAL RetSSAEntry
     
    638629    {
    639630        if (cacheSecPoints != nullptr)
    640             cacheSecPoints->insert({ sentry.first, sinfo.ssaIdBefore });
     631        {
     632            auto res = cacheSecPoints->insert({ sentry.first, { sinfo.ssaIdBefore } });
     633            if (!res.second)
     634            {
     635                auto sit = std::find(res.first->second.begin(), res.first->second.end(),
     636                        sinfo.ssaIdBefore);
     637                if (sit == res.first->second.end())
     638                    res.first->second.push_back(sinfo.ssaIdBefore);
     639            }
     640        }
    641641       
    642642        // resolve conflict for this variable ssaId>.
     
    723723                for (size_t ssaId: it->second)
    724724                {
    725                     if (ssaId > sentry.second)
     725                    for (size_t secSSAId: sentry.second)
    726726                    {
    727                         std::cout << "  insertreplace: " << sentry.first.regVar << ":" <<
    728                             sentry.first.index  << ": " <<
    729                             ssaId << ", " << sentry.second << std::endl;
    730                         insertReplace(replacesMap, sentry.first, ssaId,
    731                                     sentry.second);
     727                        if (ssaId > secSSAId)
     728                        {
     729                            std::cout << "  insertreplace: " <<
     730                                sentry.first.regVar << ":" <<
     731                                sentry.first.index  << ": " <<
     732                                ssaId << ", " << secSSAId << std::endl;
     733                            insertReplace(replacesMap, sentry.first, ssaId,
     734                                        secSSAId);
     735                        }
     736                        else if (ssaId < secSSAId)
     737                        {
     738                            std::cout << "  insertreplace2: " <<
     739                                sentry.first.regVar << ":" <<
     740                                sentry.first.index  << ": " <<
     741                                ssaId << ", " << secSSAId << std::endl;
     742                            insertReplace(replacesMap, sentry.first,
     743                                            secSSAId, ssaId);
     744                        }
     745                        /*else
     746                            std::cout << "  noinsertreplace: " <<
     747                                ssaId << "," << sinfo.ssaIdBefore << std::endl;*/
    732748                    }
    733                     else if (ssaId < sentry.second)
    734                     {
    735                         std::cout << "  insertreplace2: " << sentry.first.regVar << ":" <<
    736                             sentry.first.index  << ": " <<
    737                             ssaId << ", " << sentry.second << std::endl;
    738                         insertReplace(replacesMap, sentry.first,
    739                                         sentry.second, ssaId);
    740                     }
    741                     /*else
    742                         std::cout << "  noinsertreplace: " <<
    743                             ssaId << "," << sinfo.ssaIdBefore << std::endl;*/
    744749                }
    745750            }
     
    855860    }
    856861   
    857     /*if (toCache)
    858         resSecondPointsCache.put(nextBlock, cacheSecPoints);*/
     862    if (toCache)
     863        resSecondPointsCache.put(nextBlock, cacheSecPoints);
    859864}
    860865
  • CLRadeonExtender/trunk/tests/amdasm/AsmRegAlloc.cpp

    r3675 r3847  
    14341434        },
    14351435        {
    1436             { { "sa", 0 }, { { 6, 2 }, { 8, 2 } } },
    1437             { { "sa", 1 }, { { 7, 1 }, { 8, 1 } } },
     1436            { { "sa", 0 }, { { 6, 2 }, { 8, 2 }, { 8, 2 } } },
     1437            { { "sa", 1 }, { { 7, 1 }, { 8, 1 }, { 8, 1 } } },
    14381438            { { "sa", 4 }, { { 4, 1 } } }
    14391439        },
     
    28422842        },
    28432843        {   // SSA replaces
    2844             { { "sa", 2 }, { { 4, 3 }, { 5, 1 }, { 7, 1 } } },
    2845             { { "sa", 3 }, { { 3, 1 }, { 5, 1 } } }
     2844            { { "sa", 2 }, { { 4, 3 }, { 5, 1 }, { 7, 1 }, { 7, 1 } } },
     2845            { { "sa", 3 }, { { 3, 1 }, { 5, 1 }, { 5, 1 } } }
    28462846        },
    28472847        true, ""
Note: See TracChangeset for help on using the changeset viewer.