From 29ff37f39c305455752941fbf8a426b1f4d877fc Mon Sep 17 00:00:00 2001 From: David Greene Date: Wed, 22 Jul 2009 20:08:25 +0000 Subject: [PATCH] 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 --- include/llvm/CodeGen/LiveInterval.h | 4 +++ lib/CodeGen/LiveInterval.cpp | 41 ++++++++++++++---------- lib/CodeGen/SimpleRegisterCoalescing.cpp | 18 +---------- 3 files changed, 29 insertions(+), 34 deletions(-) diff --git a/include/llvm/CodeGen/LiveInterval.h b/include/llvm/CodeGen/LiveInterval.h index 52e43d34289..6910f418767 100644 --- a/include/llvm/CodeGen/LiveInterval.h +++ b/include/llvm/CodeGen/LiveInterval.h @@ -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(); } diff --git a/lib/CodeGen/LiveInterval.cpp b/lib/CodeGen/LiveInterval.cpp index 0d2f6ba76a7..04281055510 100644 --- a/lib/CodeGen/LiveInterval.cpp +++ b/lib/CodeGen/LiveInterval.cpp @@ -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 << ")"; } diff --git a/lib/CodeGen/SimpleRegisterCoalescing.cpp b/lib/CodeGen/SimpleRegisterCoalescing.cpp index f5d85ab4544..49f7d9a45f8 100644 --- a/lib/CodeGen/SimpleRegisterCoalescing.cpp +++ b/lib/CodeGen/SimpleRegisterCoalescing.cpp @@ -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) && -- 2.34.1