diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/LiveIntervalUnion.cpp | 28 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/LiveIntervalUnion.h | 12 | 
2 files changed, 3 insertions, 37 deletions
| diff --git a/llvm/lib/CodeGen/LiveIntervalUnion.cpp b/llvm/lib/CodeGen/LiveIntervalUnion.cpp index b30e169ee0f..cf5fb6a09f1 100644 --- a/llvm/lib/CodeGen/LiveIntervalUnion.cpp +++ b/llvm/lib/CodeGen/LiveIntervalUnion.cpp @@ -181,32 +181,6 @@ LiveIntervalUnion::Query::firstInterference() {    return FirstInterference;  } -// Treat the result as an iterator and advance to the next interfering pair -// of segments. This is a plain iterator with no filter. -bool LiveIntervalUnion::Query::nextInterference(InterferenceResult &IR) const { -  assert(isInterference(IR) && "iteration past end of interferences"); - -  // Advance either the VirtReg or LiveUnion segment to ensure that we visit all -  // unique overlapping pairs. -  if (IR.VirtRegI->end < IR.LiveUnionI.stop()) { -    if (++IR.VirtRegI == VirtReg->end()) -      return false; -  } -  else { -    if (!(++IR.LiveUnionI).valid()) { -      IR.VirtRegI = VirtReg->end(); -      return false; -    } -  } -  // Short-circuit findIntersection() if possible. -  if (overlap(*IR.VirtRegI, IR.LiveUnionI)) -    return true; - -  // Find the next intersection. -  findIntersection(IR); -  return isInterference(IR); -} -  // Scan the vector of interfering virtual registers in this union. Assume it's  // quite small.  bool LiveIntervalUnion::Query::isSeenInterference(LiveInterval *VirtReg) const { @@ -226,6 +200,8 @@ bool LiveIntervalUnion::Query::isSeenInterference(LiveInterval *VirtReg) const {  // For comments on how to speed it up, see Query::findIntersection().  unsigned LiveIntervalUnion::Query::  collectInterferingVRegs(unsigned MaxInterferingRegs) { +  if (InterferingVRegs.size() >= MaxInterferingRegs) +    return InterferingVRegs.size();    InterferenceResult IR = firstInterference();    LiveInterval::iterator VirtRegEnd = VirtReg->end();    LiveInterval *RecentInterferingVReg = NULL; diff --git a/llvm/lib/CodeGen/LiveIntervalUnion.h b/llvm/lib/CodeGen/LiveIntervalUnion.h index 7f494474f99..570ad94b77e 100644 --- a/llvm/lib/CodeGen/LiveIntervalUnion.h +++ b/llvm/lib/CodeGen/LiveIntervalUnion.h @@ -188,7 +188,7 @@ public:      }      // Does this live virtual register interfere with the union? -    bool checkInterference() { return isInterference(firstInterference()); } +    bool checkInterference() { return collectInterferingVRegs(1); }      // Count the virtual registers in this union that interfere with this      // query's live virtual register, up to maxInterferingRegs. @@ -218,17 +218,7 @@ public:      // Private interface for queries      const InterferenceResult &firstInterference(); -    bool nextInterference(InterferenceResult &IR) const;      void findIntersection(InterferenceResult &IR) const; - -    bool isInterference(const InterferenceResult &IR) const { -      if (IR.VirtRegI != VirtReg->end()) { -        assert(overlap(*IR.VirtRegI, IR.LiveUnionI) && -               "invalid segment iterators"); -        return true; -      } -      return false; -    }    };  }; | 

