diff options
Diffstat (limited to 'contrib/llvm/lib/CodeGen/InterferenceCache.h')
| -rw-r--r-- | contrib/llvm/lib/CodeGen/InterferenceCache.h | 28 | 
1 files changed, 19 insertions, 9 deletions
diff --git a/contrib/llvm/lib/CodeGen/InterferenceCache.h b/contrib/llvm/lib/CodeGen/InterferenceCache.h index 800f70557526..91a1da94fbaf 100644 --- a/contrib/llvm/lib/CodeGen/InterferenceCache.h +++ b/contrib/llvm/lib/CodeGen/InterferenceCache.h @@ -77,7 +77,8 @@ class InterferenceCache {        /// Iterator pointing into the fixed RegUnit interference.        LiveInterval::iterator FixedI; -      RegUnitInfo(LiveIntervalUnion &LIU) : VirtTag(LIU.getTag()), Fixed(0) { +      RegUnitInfo(LiveIntervalUnion &LIU) +          : VirtTag(LIU.getTag()), Fixed(nullptr) {          VirtI.setMap(LIU.getMap());        }      }; @@ -93,7 +94,7 @@ class InterferenceCache {      void update(unsigned MBBNum);    public: -    Entry() : PhysReg(0), Tag(0), RefCount(0), Indexes(0), LIS(0) {} +    Entry() : PhysReg(0), Tag(0), RefCount(0), Indexes(nullptr), LIS(nullptr) {}      void clear(MachineFunction *mf, SlotIndexes *indexes, LiveIntervals *lis) {        assert(!hasRefs() && "Cannot clear cache entry with references"); @@ -135,7 +136,8 @@ class InterferenceCache {    // Point to an entry for each physreg. The entry pointed to may not be up to    // date, and it may have been reused for a different physreg. -  SmallVector<unsigned char, 2> PhysRegEntries; +  unsigned char* PhysRegEntries; +  size_t PhysRegEntriesCount;    // Next round-robin entry to be picked.    unsigned RoundRobin; @@ -147,7 +149,15 @@ class InterferenceCache {    Entry *get(unsigned PhysReg);  public: -  InterferenceCache() : TRI(0), LIUArray(0), MF(0), RoundRobin(0) {} +  InterferenceCache() +    : TRI(nullptr), LIUArray(nullptr), MF(nullptr), PhysRegEntries(nullptr), +      PhysRegEntriesCount(0), RoundRobin(0) {} + +  ~InterferenceCache() { +    free(PhysRegEntries); +  } + +  void reinitPhysRegEntries();    /// init - Prepare cache for a new function.    void init(MachineFunction*, LiveIntervalUnion*, SlotIndexes*, LiveIntervals*, @@ -164,7 +174,7 @@ public:      static BlockInterference NoInterference;      void setEntry(Entry *E) { -      Current = 0; +      Current = nullptr;        // Update reference counts. Nothing happens when RefCount reaches 0, so        // we don't have to check for E == CacheEntry etc.        if (CacheEntry) @@ -176,10 +186,10 @@ public:    public:      /// Cursor - Create a dangling cursor. -    Cursor() : CacheEntry(0), Current(0) {} -    ~Cursor() { setEntry(0); } +    Cursor() : CacheEntry(nullptr), Current(nullptr) {} +    ~Cursor() { setEntry(nullptr); } -    Cursor(const Cursor &O) : CacheEntry(0), Current(0) { +    Cursor(const Cursor &O) : CacheEntry(nullptr), Current(nullptr) {        setEntry(O.CacheEntry);      } @@ -192,7 +202,7 @@ public:      void setPhysReg(InterferenceCache &Cache, unsigned PhysReg) {        // Release reference before getting a new one. That guarantees we can        // actually have CacheEntries live cursors. -      setEntry(0); +      setEntry(nullptr);        if (PhysReg)          setEntry(Cache.get(PhysReg));      }  | 
