diff options
author | Alkis Evlogimenos <alkis@evlogimenos.com> | 2003-12-18 08:48:48 +0000 |
---|---|---|
committer | Alkis Evlogimenos <alkis@evlogimenos.com> | 2003-12-18 08:48:48 +0000 |
commit | dd2cc65f34f9b7bfda1cd0c42becedfc361d46f8 (patch) | |
tree | 3415d818768ab0624eee51b7331945a3a4eb2564 /lib/CodeGen/LiveIntervalAnalysis.h | |
parent | 5b7142a8776dce105222863313d3f73a858a9840 (diff) |
Handle multiple virtual register definitions gracefully.
Move some of the longer LiveIntervals::Interval method out of the
header and add debug information to them. Fix bug and simplify range
merging code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10509 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LiveIntervalAnalysis.h')
-rw-r--r-- | lib/CodeGen/LiveIntervalAnalysis.h | 51 |
1 files changed, 4 insertions, 47 deletions
diff --git a/lib/CodeGen/LiveIntervalAnalysis.h b/lib/CodeGen/LiveIntervalAnalysis.h index 2be89fda5b..54b5ca3fee 100644 --- a/lib/CodeGen/LiveIntervalAnalysis.h +++ b/lib/CodeGen/LiveIntervalAnalysis.h @@ -59,55 +59,12 @@ namespace llvm { return end() <= index; } - bool overlaps(unsigned index) const { - for (Ranges::const_iterator - i = ranges.begin(), e = ranges.end(); i != e; ++i) { - if (index >= i->first && index < i->second) { - return true; - } - } - return false; - } - - void addRange(unsigned start, unsigned end) { - Range range = std::make_pair(start, end); - Ranges::iterator it = - std::lower_bound(ranges.begin(), ranges.end(), range); - - if (it == ranges.end()) { - it = ranges.insert(it, range); - goto exit; - } - - assert(range.first <= it->first && "got wrong iterator?"); - // merge ranges if necesary - if (range.first < it->first) { - if (range.second >= it->first) { - it->first = range.first; - } - else { - it = ranges.insert(it, range); - assert(it != ranges.end() && "wtf?"); - goto exit; - } - } - - exit: - mergeRangesIfNecessary(it); - } + void addRange(unsigned start, unsigned end); private: - void mergeRangesIfNecessary(Ranges::iterator it) { - while (it != ranges.begin()) { - Ranges::iterator prev = it - 1; - if (prev->second < it->first) { - break; - } - prev->second = it->second; - ranges.erase(it); - it = prev; - } - } + void mergeRangesForward(Ranges::iterator it); + + void mergeRangesBackward(Ranges::iterator it); }; struct StartPointComp { |