aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/CodeGen/LiveIntervalAnalysis.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/CodeGen/LiveIntervalAnalysis.h')
-rw-r--r--include/llvm/CodeGen/LiveIntervalAnalysis.h33
1 files changed, 28 insertions, 5 deletions
diff --git a/include/llvm/CodeGen/LiveIntervalAnalysis.h b/include/llvm/CodeGen/LiveIntervalAnalysis.h
index a78aed186f..a70deffdc1 100644
--- a/include/llvm/CodeGen/LiveIntervalAnalysis.h
+++ b/include/llvm/CodeGen/LiveIntervalAnalysis.h
@@ -29,9 +29,29 @@ namespace llvm {
class MRegisterInfo;
class VirtRegMap;
+ /// LiveRange structure - This represents a simple register range in the
+ /// program, with an inclusive start point and an exclusive end point.
+ /// These ranges are rendered as [start,end).
+ struct LiveRange {
+ unsigned start; // Start point of the interval (inclusive)
+ unsigned end; // End point of the interval (exclusive)
+ LiveRange(unsigned S, unsigned E) : start(S), end(E) {
+ assert(S < E && "Cannot create empty or backwards range");
+ }
+
+ bool operator<(const LiveRange &LR) const {
+ return start < LR.start || (start == LR.start && end < LR.end);
+ }
+ bool operator==(const LiveRange &LR) const {
+ return start == LR.start && end == LR.end;
+ }
+ private:
+ LiveRange(); // DO NOT IMPLEMENT
+ };
+ std::ostream& operator<<(std::ostream& os, const LiveRange &LR);
+
struct LiveInterval {
- typedef std::pair<unsigned, unsigned> Range;
- typedef std::vector<Range> Ranges;
+ typedef std::vector<LiveRange> Ranges;
unsigned reg; // the register of this interval
float weight; // weight of this interval:
// (number of uses *10^loopDepth)
@@ -44,14 +64,17 @@ namespace llvm {
bool spilled() const;
+ /// start - Return the lowest numbered slot covered by interval.
unsigned start() const {
assert(!empty() && "empty interval for register");
- return ranges.front().first;
+ return ranges.front().start;
}
+ /// end - return the maximum point of the interval of the whole,
+ /// exclusive.
unsigned end() const {
assert(!empty() && "empty interval for register");
- return ranges.back().second;
+ return ranges.back().end;
}
bool expiredAt(unsigned index) const {
@@ -62,7 +85,7 @@ namespace llvm {
bool overlaps(const LiveInterval& other) const;
- void addRange(unsigned start, unsigned end);
+ void addRange(LiveRange R);
void join(const LiveInterval& other);