mirror of
https://github.com/RPCS3/llvm.git
synced 2025-03-07 10:07:17 +00:00
Make some changes suggested by Bill and Evan.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76775 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6930f4f945
commit
29ff37f39c
@ -572,6 +572,10 @@ namespace llvm {
|
||||
///
|
||||
unsigned getSize() const;
|
||||
|
||||
/// ComputeJoinedWeight - Set the weight of a live interval after
|
||||
/// Other has been merged into it.
|
||||
void ComputeJoinedWeight(const LiveInterval &Other);
|
||||
|
||||
bool operator<(const LiveInterval& other) const {
|
||||
return beginNumber() < other.beginNumber();
|
||||
}
|
||||
|
@ -503,23 +503,7 @@ void LiveInterval::join(LiveInterval &Other, const int *LHSValNoAssignments,
|
||||
InsertPos = addRangeFrom(*I, InsertPos);
|
||||
}
|
||||
|
||||
// If either of these intervals was spilled, the weight is the
|
||||
// weight of the non-spilled interval. This can only happen with
|
||||
// iterative coalescers.
|
||||
|
||||
if (weight == HUGE_VALF && !TargetRegisterInfo::isPhysicalRegister(reg)) {
|
||||
// Remove this assert if you have an iterative coalescer
|
||||
assert(0 && "Joining to spilled interval");
|
||||
weight = Other.weight;
|
||||
}
|
||||
else if (Other.weight != HUGE_VALF) {
|
||||
weight += Other.weight;
|
||||
}
|
||||
else {
|
||||
// Remove this assert if you have an iterative coalescer
|
||||
assert(0 && "Joining from spilled interval");
|
||||
}
|
||||
// Otherwise the weight stays the same
|
||||
ComputeJoinedWeight(Other);
|
||||
|
||||
// Update regalloc hint if currently there isn't one.
|
||||
if (TargetRegisterInfo::isVirtualRegister(reg) &&
|
||||
@ -809,6 +793,29 @@ unsigned LiveInterval::getSize() const {
|
||||
return Sum;
|
||||
}
|
||||
|
||||
/// ComputeJoinedWeight - Set the weight of a live interval Joined
|
||||
/// after Other has been merged into it.
|
||||
void LiveInterval::ComputeJoinedWeight(const LiveInterval &Other) {
|
||||
// If either of these intervals was spilled, the weight is the
|
||||
// weight of the non-spilled interval. This can only happen with
|
||||
// iterative coalescers.
|
||||
|
||||
if (weight == HUGE_VALF &&
|
||||
!TargetRegisterInfo::isPhysicalRegister(reg)) {
|
||||
// Remove this assert if you have an iterative coalescer
|
||||
assert(0 && "Joining to spilled interval");
|
||||
weight = Other.weight;
|
||||
}
|
||||
else if (Other.weight != HUGE_VALF) {
|
||||
weight += Other.weight;
|
||||
}
|
||||
else {
|
||||
// Otherwise the weight stays the same
|
||||
// Remove this assert if you have an iterative coalescer
|
||||
assert(0 && "Joining from spilled interval");
|
||||
}
|
||||
}
|
||||
|
||||
std::ostream& llvm::operator<<(std::ostream& os, const LiveRange &LR) {
|
||||
return os << '[' << LR.start << ',' << LR.end << ':' << LR.valno->id << ")";
|
||||
}
|
||||
|
@ -1970,23 +1970,7 @@ bool SimpleRegisterCoalescing::SimpleJoin(LiveInterval &LHS, LiveInterval &RHS){
|
||||
LHS.addKills(LHSValNo, VNI->kills);
|
||||
LHS.MergeRangesInAsValue(RHS, LHSValNo);
|
||||
|
||||
// If either of these intervals was spilled, the weight is the
|
||||
// weight of the non-spilled interval. This can only happen
|
||||
// with iterative coalescers.
|
||||
if (LHS.weight == HUGE_VALF && !TargetRegisterInfo::isPhysicalRegister(LHS.reg)) {
|
||||
// Remove this assert if you have an iterative coalescer
|
||||
assert(0 && "Joining to spilled interval");
|
||||
LHS.weight = RHS.weight;
|
||||
}
|
||||
else if (RHS.weight != HUGE_VALF) {
|
||||
LHS.weight += RHS.weight;
|
||||
}
|
||||
else {
|
||||
// Remove this assert if you have an iterative coalescer
|
||||
assert(0 && "Joining from spilled interval");
|
||||
}
|
||||
|
||||
// Otherwise the LHS weight stays the same
|
||||
LHS.ComputeJoinedWeight(RHS);
|
||||
|
||||
// Update regalloc hint if both are virtual registers.
|
||||
if (TargetRegisterInfo::isVirtualRegister(LHS.reg) &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user