Add a LiveRangeUpdater class.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 20 Feb 2013 18:18:12 +0000 (18:18 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 20 Feb 2013 18:18:12 +0000 (18:18 +0000)
commit1a41f32546019340f27a6f3854f3a73163a25dfe
tree7b198be81877a22dfb38f1f3a1f6e77a115d400a
parent7b170500dcfce130c1e5af1c9150014e69e56819
Add a LiveRangeUpdater class.

Adding new segments to large LiveIntervals can be expensive because the
LiveRange objects after the insertion point may need to be moved left or
right. This can cause quadratic behavior when adding a large number of
segments to a live range.

The LiveRangeUpdater class allows the LIveInterval to be in a temporary
invalid state while segments are being added. It maintains an internal
gap in the LiveInterval when it is shrinking, and it has a spill area
for new segments when the LiveInterval is growing.

The behavior is similar to the existing mergeIntervalRanges() function,
except it allocates less memory for the spill area, and the algorithm is
turned inside out so the loop is driven by the clients.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175644 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/LiveInterval.h
lib/CodeGen/LiveInterval.cpp