From d9bbbb8484c19a33effc16342b484c614e923a7d Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 24 Jul 2004 03:41:50 +0000 Subject: [PATCH] In the joiner, merge the small interval into the large interval. This restores us back to taking about 10.5s on gcc, instead of taking 15.6s! The net result is that my big patches have hand no significant effect on compile time or code quality. heh. llvm-svn: 15156 --- llvm/lib/CodeGen/LiveInterval.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/llvm/lib/CodeGen/LiveInterval.cpp b/llvm/lib/CodeGen/LiveInterval.cpp index 1cd9fb1a4a8e..79aa710c03b9 100644 --- a/llvm/lib/CodeGen/LiveInterval.cpp +++ b/llvm/lib/CodeGen/LiveInterval.cpp @@ -260,6 +260,15 @@ void LiveInterval::join(LiveInterval &Other, unsigned CopyIdx) { unsigned MergedSrcValIdx = SourceLR->ValId; unsigned MergedDstValIdx = DestLR->ValId; + // Try to do the least amount of work possible. In particular, if there are + // more liverange chunks in the other set than there are in the 'this' set, + // swap sets to merge the fewest chunks in possible. + if (Other.ranges.size() > ranges.size()) { + std::swap(MergedSrcValIdx, MergedDstValIdx); + std::swap(ranges, Other.ranges); + std::swap(NumValues, Other.NumValues); + } + // Join the ranges of other into the ranges of this interval. Ranges::iterator InsertPos = ranges.begin(); std::map Dst2SrcIdxMap;