summaryrefslogtreecommitdiff
path: root/lib/CodeGen/LiveInterval.cpp
diff options
context:
space:
mode:
authorDavid Greene <greened@obbligato.org>2009-07-22 20:08:25 +0000
committerDavid Greene <greened@obbligato.org>2009-07-22 20:08:25 +0000
commit29ff37f39c305455752941fbf8a426b1f4d877fc (patch)
treecd379f840c5159d3e7dddbf3e157b3a572a241dd /lib/CodeGen/LiveInterval.cpp
parent6930f4f9451c2f852477bdbcb640f0562b661753 (diff)
downloadllvm-29ff37f39c305455752941fbf8a426b1f4d877fc.tar.gz
llvm-29ff37f39c305455752941fbf8a426b1f4d877fc.tar.bz2
llvm-29ff37f39c305455752941fbf8a426b1f4d877fc.tar.xz
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
Diffstat (limited to 'lib/CodeGen/LiveInterval.cpp')
-rw-r--r--lib/CodeGen/LiveInterval.cpp41
1 files changed, 24 insertions, 17 deletions
diff --git a/lib/CodeGen/LiveInterval.cpp b/lib/CodeGen/LiveInterval.cpp
index 0d2f6ba76a..0428105551 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 << ")";
}