Add a register allocation preference field; add a method to compute size of a live interval.

llvm-svn: 36216
This commit is contained in:
Evan Cheng 2007-04-17 20:25:11 +00:00
parent 2f45bf31c5
commit 57b5214d59
2 changed files with 15 additions and 1 deletions

View File

@ -81,6 +81,7 @@ namespace llvm {
struct LiveInterval {
typedef SmallVector<LiveRange,4> Ranges;
unsigned reg; // the register of this interval
unsigned preference; // preferred register to allocate for this interval
float weight; // weight of this interval
MachineInstr* remat; // definition if the definition rematerializable
Ranges ranges; // the ranges in which this register is live
@ -94,7 +95,7 @@ namespace llvm {
public:
LiveInterval(unsigned Reg, float Weight)
: reg(Reg), weight(Weight), remat(NULL) {
: reg(Reg), preference(0), weight(Weight), remat(NULL) {
}
typedef Ranges::iterator iterator;
@ -256,6 +257,10 @@ namespace llvm {
removeRange(LR.start, LR.end);
}
/// getSize - Returns the sum of sizes of all the LiveRange's.
///
unsigned getSize() const;
bool operator<(const LiveInterval& other) const {
return beginNumber() < other.beginNumber();
}

View File

@ -349,6 +349,8 @@ void LiveInterval::join(LiveInterval &Other, int *LHSValNoAssignments,
ValueNumberInfo.clear();
ValueNumberInfo.append(NewValueNumberInfo.begin(), NewValueNumberInfo.end());
weight += Other.weight;
if (Other.preference && !preference)
preference = Other.preference;
}
/// MergeRangesInAsValue - Merge all of the intervals in RHS into this live
@ -467,6 +469,13 @@ void LiveInterval::MergeValueNumberInto(unsigned V1, unsigned V2) {
}
}
unsigned LiveInterval::getSize() const {
unsigned Sum = 0;
for (const_iterator I = begin(), E = end(); I != E; ++I)
Sum += I->end - I->start;
return Sum;
}
std::ostream& llvm::operator<<(std::ostream& os, const LiveRange &LR) {
return os << '[' << LR.start << ',' << LR.end << ':' << LR.ValId << ")";
}