mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-04 01:42:09 +00:00
Add a register allocation preference field; add a method to compute size of a live interval.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36216 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
eff03db46d
commit
e52eef8e9a
@ -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();
|
||||
}
|
||||
|
@ -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 << ")";
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user