Changeset 4010 in CLRX


Ignore:
Timestamp:
Apr 17, 2018, 9:31:05 AM (6 weeks ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmRegAlloc?: Move Liveness to AsmRegAlloc?.h

Location:
CLRadeonExtender/trunk/amdasm
Files:
2 edited

Legend:

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

    r4009 r4010  
    734734        }
    735735}
    736 
    737 struct Liveness
    738 {
    739     std::map<size_t, size_t> l;
    740    
    741     Liveness() { }
    742    
    743     void clear()
    744     { l.clear(); }
    745    
    746     void join(std::map<size_t, size_t>::iterator it)
    747     {
    748         if (it != l.begin())
    749         {
    750             auto prevIt = it;
    751             --prevIt;
    752             if (prevIt->second >= it->first)
    753             {
    754                 // join with previous region
    755                 prevIt->second = it->second;
    756                 l.erase(it);
    757                 it = prevIt;
    758             }
    759         }
    760        
    761         auto nextIt = it;
    762         ++nextIt;
    763         if (nextIt != l.end())
    764         {
    765             if (nextIt->first <= it->second)
    766             {
    767                 // join with next region
    768                 it->second = nextIt->second;
    769                 l.erase(nextIt);
    770             }
    771         }
    772     }
    773    
    774     void expand(size_t k)
    775     {
    776         auto it = l.lower_bound(k);
    777         if (it != l.begin())
    778             --it;
    779         else // do nothing
    780             return;
    781         if (it->first <= k && it->second > k)
    782         {
    783             // we need expand previous region to this
    784             if (it==l.begin())
    785                 return;
    786             --it;
    787         }
    788         it->second = k+1;
    789         join(it);
    790     }
    791     void newRegion(size_t k)
    792     { join(l.insert(std::make_pair(k, k)).first); }
    793    
    794     void insert(size_t k, size_t k2)
    795     { join(l.insert(std::make_pair(k, k2)).first); }
    796    
    797     bool contain(size_t t) const
    798     {
    799         auto it = l.lower_bound(t);
    800         if (it==l.begin() && it->first>t)
    801             return false;
    802         if (it==l.end() || it->first>t)
    803             --it;
    804         return it->first<=t && t<it->second;
    805     }
    806 };
    807 
    808 typedef AsmRegAllocator::VarIndexMap VarIndexMap;
    809736
    810737static cxuint getRegType(size_t regTypesNum, const cxuint* regRanges,
  • CLRadeonExtender/trunk/amdasm/AsmRegAlloc.h

    r3995 r4010  
    2727#include <unordered_set>
    2828#include <unordered_map>
     29#include <map>
    2930#include <algorithm>
    3031#include <CLRX/utils/Utilities.h>
     
    252253#endif
    253254
     255struct Liveness
     256{
     257    std::map<size_t, size_t> l;
     258   
     259    Liveness() { }
     260   
     261    void clear()
     262    { l.clear(); }
     263   
     264    void join(std::map<size_t, size_t>::iterator it)
     265    {
     266        if (it != l.begin())
     267        {
     268            auto prevIt = it;
     269            --prevIt;
     270            if (prevIt->second >= it->first)
     271            {
     272                // join with previous region
     273                prevIt->second = it->second;
     274                l.erase(it);
     275                it = prevIt;
     276            }
     277        }
     278       
     279        auto nextIt = it;
     280        ++nextIt;
     281        if (nextIt != l.end())
     282        {
     283            if (nextIt->first <= it->second)
     284            {
     285                // join with next region
     286                it->second = nextIt->second;
     287                l.erase(nextIt);
     288            }
     289        }
     290    }
     291   
     292    void expand(size_t k)
     293    {
     294        auto it = l.lower_bound(k);
     295        if (it != l.begin())
     296            --it;
     297        else // do nothing
     298            return;
     299        if (it->first <= k && it->second > k)
     300        {
     301            // we need expand previous region to this
     302            if (it==l.begin())
     303                return;
     304            --it;
     305        }
     306        it->second = k+1;
     307        join(it);
     308    }
     309    void newRegion(size_t k)
     310    { join(l.insert(std::make_pair(k, k)).first); }
     311   
     312    void insert(size_t k, size_t k2)
     313    { join(l.insert(std::make_pair(k, k2)).first); }
     314   
     315    bool contain(size_t t) const
     316    {
     317        auto it = l.lower_bound(t);
     318        if (it==l.begin() && it->first>t)
     319            return false;
     320        if (it==l.end() || it->first>t)
     321            --it;
     322        return it->first<=t && t<it->second;
     323    }
     324};
     325
     326typedef AsmRegAllocator::VarIndexMap VarIndexMap;
     327
    254328};
    255329
Note: See TracChangeset for help on using the changeset viewer.