summaryrefslogtreecommitdiff
path: root/lib/CodeGen/LiveInterval.cpp
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2013-02-20 23:51:10 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2013-02-20 23:51:10 +0000
commit9bd7c3cc1306b6b2abc472d1e6ca2f7d0f3f3fbb (patch)
treedf4f7a663b4334b59fe9d44c527435a64473548c /lib/CodeGen/LiveInterval.cpp
parent100c93c850911a33a4de59103beafd204d9fd150 (diff)
downloadllvm-9bd7c3cc1306b6b2abc472d1e6ca2f7d0f3f3fbb.tar.gz
llvm-9bd7c3cc1306b6b2abc472d1e6ca2f7d0f3f3fbb.tar.bz2
llvm-9bd7c3cc1306b6b2abc472d1e6ca2f7d0f3f3fbb.tar.xz
Don't allocate memory in LiveInterval::join().
Rewrite value numbers directly in the 'Other' LiveInterval which is moribund anyway. This avoids allocating the OtherAssignments vector. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175690 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LiveInterval.cpp')
-rw-r--r--lib/CodeGen/LiveInterval.cpp17
1 files changed, 7 insertions, 10 deletions
diff --git a/lib/CodeGen/LiveInterval.cpp b/lib/CodeGen/LiveInterval.cpp
index 54f0da008b..dccd847d07 100644
--- a/lib/CodeGen/LiveInterval.cpp
+++ b/lib/CodeGen/LiveInterval.cpp
@@ -464,10 +464,12 @@ void LiveInterval::join(LiveInterval &Other,
ranges.erase(OutIt, end());
}
- // Remember assignements because val# ids are changing.
- SmallVector<unsigned, 16> OtherAssignments;
+ // Rewrite Other values before changing the VNInfo ids.
+ // This can leave Other in an invalid state because we're not coalescing
+ // touching segments that now have identical values. That's OK since Other is
+ // not supposed to be valid after calling join();
for (iterator I = Other.begin(), E = Other.end(); I != E; ++I)
- OtherAssignments.push_back(RHSValNoAssignments[I->valno->id]);
+ I->valno = NewVNInfo[RHSValNoAssignments[I->valno->id]];
// Update val# info. Renumber them and make sure they all belong to this
// LiveInterval now. Also remove dead val#'s.
@@ -487,13 +489,8 @@ void LiveInterval::join(LiveInterval &Other,
// Okay, now insert the RHS live ranges into the LHS.
LiveRangeUpdater Updater(this);
- unsigned RangeNo = 0;
- for (iterator I = Other.begin(), E = Other.end(); I != E; ++I, ++RangeNo) {
- // Map the valno in the other live range to the current live range.
- VNInfo *VNI = NewVNInfo[OtherAssignments[RangeNo]];
- assert(VNI && "Adding a dead range?");
- Updater.add(I->start, I->end, VNI);
- }
+ for (iterator I = Other.begin(), E = Other.end(); I != E; ++I)
+ Updater.add(*I);
}
/// MergeRangesInAsValue - Merge all of the intervals in RHS into this live