History log of /external/llvm/include/llvm/CodeGen/LiveInterval.h
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
dce4a407a24b04eebc6a376f8e62b41aaa7b071f 29-May-2014 Stephen Hines <srhines@google.com> Update LLVM for 3.5 rebase (r209712).

Change-Id: I149556c940fb7dc92d075273c87ff584f400941f
/external/llvm/include/llvm/CodeGen/LiveInterval.h
36b56886974eae4f9c5ebc96befd3e7bfe5de338 24-Apr-2014 Stephen Hines <srhines@google.com> Update to LLVM 3.5a.

Change-Id: Ifadecab779f128e62e430c2b4f6ddd84953ed617
/external/llvm/include/llvm/CodeGen/LiveInterval.h
eb3602472026dc029beb45ccbe09bc84162ba949 13-Nov-2013 Aaron Ballman <aaron@aaronballman.com> Replacing HUGE_VALF with llvm::huge_valf in order to work around a warning triggered in MSVC 12.

Patch reviewed by Reid Kleckner and Jim Grosbach.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194533 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
03d9609c6154ed91daefb4e4f89b7298c11961f3 10-Oct-2013 Matthias Braun <matze@braunis.de> Print register in LiveInterval::print()

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192398 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
5649e25ce86b9d89d228ae7c392413571b0f8c19 10-Oct-2013 Matthias Braun <matze@braunis.de> Pass LiveQueryResult by value

This makes the API a bit more natural to use and makes it easier to make
LiveRanges implementation details private.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192394 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
87a86058fa0726328de42ace85b5532d18775646 10-Oct-2013 Matthias Braun <matze@braunis.de> Refactor LiveInterval: introduce new LiveRange class

LiveRange just manages a list of segments and a list of value numbers
now as LiveInterval did previously, but without having details like spill
weight or a fixed register number.
LiveInterval is now a subclass of LiveRange and simply adds the spill weight
and the register number.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192393 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
331de11a0acc6a095b98914b5f05ff242c9d7819 10-Oct-2013 Matthias Braun <matze@braunis.de> Rename LiveRange to LiveInterval::Segment

The Segment struct contains a single interval; multiple instances of this struct
are used to construct a live range, but the struct is not a live range by
itself.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192392 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
3f4f420ab7acb10221ba971543a7eed5489fb626 28-Sep-2013 Robert Wilhelm <robert.wilhelm@gmx.net> Even more spelling fixes for "instruction".


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191611 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
b63db853500b3dcb46a96af3f2d5aec003e41d77 06-Sep-2013 Matthias Braun <matze@braunis.de> avoid unnecessary direct access to LiveInterval::ranges

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190170 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1920156982643a1c5c28af6f4684580b516eb597 06-Sep-2013 Matthias Braun <matze@braunis.de> remove unused argument from LiveRanges::join()

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190169 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
256cb9eaafef2aef81121be7542e04c40d9017cb 06-Sep-2013 Matthias Braun <matze@braunis.de> fix typo in comment

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190165 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
846b31d74aa673a178f57f9d47f366d8ddb756d3 30-Aug-2013 Andrew Trick <atrick@apple.com> Use LiveRangeQuery for instruction-level liveness queries.

Remove redundant or bug-prone LiveInterval APIs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189685 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
663bd9922776e5f7bc17dfc574efe3fe05ceb12c 30-Aug-2013 Andrew Trick <atrick@apple.com> mi-sched: update PressureDiffs on-the-fly for liveness.

This removes all expensive pressure tracking logic from the scheduling
critical path of node comparison.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189643 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1362dcb5899bc88f0e567dd10e2e9003a79ace21 30-Aug-2013 Andrew Trick <atrick@apple.com> Replace LiveInterval::killedAt with isKilledAtInstr.

Return true for LRGs that end at EarlyClobber or Register slots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189642 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1c6d387dc90fba589f8effb17c72a39f966f87df 14-Aug-2013 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove unnecessary parameter to RenumberValues.

Patch by Matthias Braun!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188393 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
906968c53336490c021b624c94642b10d9541d2c 14-Aug-2013 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove unused function.

Patch by Matthias Braun!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188392 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
292e417c1b3452c43d224e1a928c89bde6469515 14-Aug-2013 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove unused struct/enum

Patch by Matthias Braun!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188388 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
9e639e8fd95488cb4c8ef2f7f3a41919acb29ac4 11-Jul-2013 Craig Topper <craig.topper@gmail.com> Use SmallVectorImpl& instead of SmallVector to avoid repeating small vector size.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186098 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
e38afe1e335084134f7830ba6f2208e2ddde59b4 24-Apr-2013 Andrew Trick <atrick@apple.com> MI Sched: eliminate local vreg copies.

For now, we just reschedule instructions that use the copied vregs and
let regalloc elliminate it. I would really like to eliminate the
copies on-the-fly during scheduling, but we need a complete
implementation of repairIntervalsInRange() first.

The general strategy is for the register coalescer to eliminate as
many global copies as possible and shrink live ranges to be
extended-basic-block local. The coalescer should not have to worry
about resolving local copies (e.g. it shouldn't attemp to reorder
instructions). The scheduler is a much better place to deal with local
interference. The coalescer side of this equation needs work.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180193 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
d983d4c6ed5ef69ca2d2e07350cc346245f35b87 20-Feb-2013 Jakob Stoklund Olesen <stoklund@2pi.dk> Use LiveRangeUpdater instead of mergeIntervalRanges.

Performance is the same, but LiveRangeUpdater has a more flexible
interface.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175645 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1a41f32546019340f27a6f3854f3a73163a25dfe 20-Feb-2013 Jakob Stoklund Olesen <stoklund@2pi.dk> 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
/external/llvm/include/llvm/CodeGen/LiveInterval.h
2319a2397990c6ae638b79efd43f88135db66d7b 20-Feb-2013 Jakob Stoklund Olesen <stoklund@2pi.dk> Add a default constructor for LiveRange.

It is useful to be able to create temporary LiveRange object whose
members are filled in later.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175639 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
60af0f25616d8f228f1c5aa6ad79426fcc46baaa 20-Feb-2013 Cameron Zwarich <zwarich@apple.com> Modify LiveInterval::addRange() to match the comment about what it returns.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175602 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
255f89faee13dc491cb64fbeae3c763e7e2ea4e6 03-Dec-2012 Chandler Carruth <chandlerc@gmail.com> Sort the #include lines for the include/... tree with the script.

AKA: Recompile *ALL* the source code!

This one went much better. No manual edits here. I spot-checked for
silliness and grep-checked for really broken edits and everything seemed
good. It all still compiles. Yell if you see something that looks goofy.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169133 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
001d3dc976d7cda8a3dd8c7fd4020b0b96033f4e 17-Sep-2012 Craig Topper <craig.topper@gmail.com> Mark unimplemented copy constructors and copy assignment operators as LLVM_DELETED_FUNCTION.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164016 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
2131eb48875c7059eb04f0a324321e1e15e6597e 16-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix problem when using LiveRangeQuery with block entries.

A value that is live in to a basic block should be returned by valueIn()
in LiveRangeQuery(getMBBStartIdx(MBB)), unless it is a PHI-def which
should be returned by valueDefined() instead.

Current code isn't using this functionality. Future code will.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163990 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
9ae03fa69f6bc19acd8043414160320c1da0c3da 15-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Make LiveRangeQuery work for PHIDefs as well.

If a PHI value happens to be live out from the layout predecessor of its
def block, the def slot index will be in the middle of the segment:

%vreg11 = [192r,240B:0)[352r,416B:2)[416B,496r:1) 0@192r 1@480B-phi %2@352r

A LiveRangeQuery for 480 should return NULL from valueIn() since the
PHI value is defined at the block entry, not live in to the block.

No test case, future code depends on this functionality.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163971 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
01b50ca5b397128d43167d617ba849d4a83282f1 12-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Delete dead code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163735 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
45c5c57179e8b4938042431f8e12c9bfad67b3c8 06-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Allow overlaps between virtreg and physreg live ranges.

The RegisterCoalescer understands overlapping live ranges where one
register is defined as a copy of the other. With this change, register
allocators using LiveRegMatrix can do the same, at least for copies
between physical and virtual registers.

When a physreg is defined by a copy from a virtreg, allow those live
ranges to overlap:

%CL<def> = COPY %vreg11:sub_8bit; GR32_ABCD:%vreg11
%vreg13<def,tied1> = SAR32rCL %vreg13<tied0>, %CL<imp-use,kill>

We can assign %vreg11 to %ECX, overlapping the live range of %CL.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163336 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
b2beac2b9671f7d9773329d62c2821c8ac449ac5 03-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Completely eliminate VNInfo flags.

The 'unused' state of a value number can be represented as an invalid
def SlotIndex. This also exposed code that shouldn't have been looking
at unused value VNInfos.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161258 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
bf60aa9db5953dd99c561dfa9323b1e3293a5a85 03-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Eliminate the VNInfo::hasPHIKill() flag.

The only real user of the flag was removeCopyByCommutingDef(), and it
has been switched to LiveIntervals::hasPHIKill().

All the code changed by this patch was only concerned with computing and
propagating the flag.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161255 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
b18d779b35909cd5b753871f8bf2ff4f6c17ace1 27-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Eliminate the IS_PHI_DEF flag and VNInfo::setIsPHIDef().

A value number is a PHI def if and only if it begins at a block
boundary. This can be derived from the def slot, a separate flag is not
necessary.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160893 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
4e996de58cfad27033165d8feb8f296b8cbe20ca 11-Jul-2012 Chandler Carruth <chandlerc@gmail.com> Teach the LiveInterval::join function to use the fast merge algorithm,
generalizing its implementation sufficiently to support this value
number scenario as well.

This cuts out another significant performance hit in large functions
(over 10k basic blocks, etc), especially those with "natural" CFG
structures.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160026 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
e585e75612ef5fd32e2bb2c9f635496791a20f8b 10-Jul-2012 Chandler Carruth <chandlerc@gmail.com> Add an efficient merge operation to LiveInterval and use it to avoid
quadratic behavior when performing pathological merges. Fixes the core
element of PR12652.

There is only one user of addRangeFrom left: join. I'm hoping to
refactor further in a future patch and have join use this merge
operation as well.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159982 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
261b6330896736f674bdb2dd4556a0483f3cfe8d 10-Jul-2012 Chandler Carruth <chandlerc@gmail.com> Teach LiveIntervals how to verify themselves and start using it in some
of the trick merge routines. This adds a layer of testing that was
necessary when implementing more efficient (and complex) merge logic for
this datastructure.

No functionality changed here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159981 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
b77ec7d26405125fa5685370af5f17fcc9edbecd 06-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Simplify LiveInterval::print().

Don't print out the register number and spill weight, making the TRI
argument unnecessary.

This allows callers to interpret the reg field. It can currently be a
virtual register, a physical register, a spill slot, or a register unit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158031 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
4e53a40ea321c43bdf754147dd2ec064985e5b7b 05-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Implement LiveRangeCalc::extendToUses() and createDeadDefs().

These LiveRangeCalc methods are to be used when computing a live range
from scratch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158027 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
c313c6b9fffa58e88c166e50a759d689686f17f0 20-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Add a LiveRangeQuery class.

This class is meant to be the primary interface for examining a live
range in the vicinity on a given instruction. It avoids all the messy
dealings with iterators and early clobbers.

This is a more abstract interface to live ranges, hiding the
implementation as a vector of segments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157141 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
ff11c0185391023d4f7b3254de94e11a5bb9cd58 28-Apr-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Don't update spill weights when joining intervals.

We don't compute spill weights until after coalescing anyway.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155766 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
f4aee4c50e2ce46946f71bbb7d7a849b054018f7 28-Apr-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Spring cleaning - Delete dead code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155765 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
0aad7d274d6dfb0de1ebc00600cecf5e229b7c43 04-Feb-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Drop the REDEF_BY_EC VNInfo flag.

A live range that has an early clobber tied redef now looks like a
normal tied redef, except the early clobber def uses the early clobber
slot.

This is enough to handle any strange interference problems.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149769 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
3b1088a2cc15a39c7a7b8dd95a56143f1dda6863 04-Feb-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Don't store COPY pointers in VNInfo.

If a value is defined by a COPY, that instuction can easily and cheaply
be found by getInstructionFromIndex(VNI->def).

This reduces the size of VNInfo from 24 to 16 bytes, and improves
llc compile time by 3%.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149763 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
c2220057c0c464613a0b0fec36c0a582c7c94e2d 19-Jan-2012 Lang Hames <lhames@gmail.com> Added methods to get the live range immediately before a given slot. Intended to parallel the getVNInfoBefore method.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148453 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1130d220a33a6171e408d9ec4594242907541e1b 05-Jan-2012 Andrew Trick <atrick@apple.com> comment cleanup

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147585 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
2debd48ca790ac01be6e12e094fdf4fdcadc8364 13-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Rename SlotIndexes to match how they are used.

The old naming scheme (load/use/def/store) can be traced back to an old
linear scan article, but the names don't match how slots are actually
used.

The load and store slots are not needed after the deferred spill code
insertion framework was deleted.

The use and def slots don't make any sense because we are using
half-open intervals as is customary in C code, but the names suggest
closed intervals. In reality, these slots were used to distinguish
early-clobber defs from normal defs.

The new naming scheme also has 4 slots, but the names match how the
slots are really used. This is a purely mechanical renaming, but some
of the code makes a lot more sense now.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144503 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
a1dd30553da772a1702924bf1651f63fa5df7894 15-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Use getPrevSlot() instead of getPrevIndex().

The getPrevIndex() function moves to the same slot in the previous
instruction. For getVNInfoBefore(), we just need the previous slot in
the same instruction.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139793 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
df8412c4c1a3a798c5a849ebc3f56904568d40c4 15-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Stop verifying hasPHIKill() flags.

There is only one legitimate use remaining, in addIntervalsForSpills().
All other calls to hasPHIKill() are only used to update PHIKill flags.

The addIntervalsForSpills() function is part of the old spilling
framework, only used by linearscan.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139783 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
573a32d4870ff4af7f59fc020caf07fb6ef61e37 15-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Leave hasPHIKill flags alone in LiveInterval::RenumberValues.

It is conservatively correct to keep the hasPHIKill flags, even after
deleting PHI-defs.

The calculation can be very expensive after taildup has created a
quadratic number of indirectbr edges in the CFG, and the hasPHIKill flag
isn't used for anything after RenumberValues().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139780 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
b1afbac64b7c4c06959350acc175fb3552012f57 15-Sep-2011 Andrew Trick <atrick@apple.com> [regcoalescing] bug fix for RegistersDefinedFromSameValue.

An improper SlotIndex->VNInfo lookup was leading to unsafe copy removal.
Fixes PR10920 401.bzip2 miscompile with no IV rewrite.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139765 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
ee5655dca467d3812145a2f965c31edf4875c93e 13-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Switch extendInBlock() to take a kill slot instead of the last use slot.

Three out of four clients prefer this interface which is consistent with
extendIntervalEndTo() and LiveRangeCalc::extend().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139604 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
f5497fb1b474028709f0a6d8556251dc21e34c26 17-May-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Teach LiveInterval::isZeroLength about null SlotIndexes.

When instructions are deleted, they leave tombstone SlotIndex entries.
The isZeroLength method should ignore these null indexes.

This causes RABasic to sometimes spill a callee-saved register in the
abi-isel.ll test, so don't run that test with -regalloc=basic. Prioritizing
register allocation according to spill weight can cause more registers to be
used.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131436 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
6ee56e658a6f676e01a06d7a53d1d5c87710f3c3 30-Apr-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Avoid using stale entries form the sibling value map.

This could happen when trying to use a value that had been eliminated after dead
code elimination and folding loads.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130597 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
2254227791ea267426b9ac674fc6d87decb65bc1 17-Mar-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Rewrite instructions as part of ConnectedVNInfoEqClasses::Distribute.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127779 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
9763e2bf39b84f18bd464b0cda61fe1cd98dcaae 02-Mar-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Move LiveIntervalMap::extendTo into LiveInterval itself.

This method could probably be used by LiveIntervalAnalysis::shrinkToUses, and
now it can use extendIntervalEndTo() which coalesces ranges.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126803 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
0f43811903f10394f7088f4634c0b4f9668cbac0 03-Feb-2011 Eric Christopher <echristo@apple.com> Reapply this.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124779 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
463a2977b1d9e6679f859db9f32e9e783b075c10 03-Feb-2011 Eric Christopher <echristo@apple.com> Temporarily revert 124765 in an attempt to find the cycle breaking bootstrap.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124778 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
2cd21119593becfa1962cfaca0319fd67913f545 03-Feb-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Defer SplitKit value mapping until all defs are available.

The greedy register allocator revealed some problems with the value mapping in
SplitKit. We would sometimes start mapping values before all defs were known,
and that could change a value from a simple 1-1 mapping to a multi-def mapping
that requires ssa update.

The new approach collects all defs and register assignments first without
filling in any live intervals. Only when finish() is called, do we compute
liveness and mapped values. At this time we know with certainty which values map
to multiple values in a split range.

This also has the advantage that we can compute live ranges based on the
remaining uses after rematerializing at split points.

The current implementation has many opportunities for compile time optimization.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124765 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
be97e906e03dd9b22e14f6749157c9d5f9701dd5 09-Jan-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Teach TargetRegisterInfo how to cram stack slot indexes in with the virtual and
physical register numbers.

This makes the hack used in LiveInterval official, and lets LiveInterval be
oblivious of stack slots.

The isPhysicalRegister() and isVirtualRegister() predicates don't know about
this, so when a variable may contain a stack slot, isStackSlot() should always
be tested first.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123128 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
b907e8a2d40dc546f21ff7e122a80b121653851a 21-Dec-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Use IntEqClasses to compute connected components of live intervals.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122296 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
8d121404370cd57be7e72543127a1afe2faa1b10 18-Dec-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Avoid dereferencing end() in collectInterferingVRegs() when there is no
interference.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122108 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
cb367778c0fb3200292df4f3982f54167444d1f6 29-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Print out the connected components in the verifier after complaining about their
multiplicity.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117630 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
0253df9a897ce541d56146699cedd79c464bda5e 08-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> After splitting, the remaining LiveInterval may be fragmented into multiple
connected components. These components should be allocated different virtual
registers because there is no reason for them to be allocated together.

Add the ConnectedVNInfoEqClasses class to calculate the connected components,
and move values to new LiveIntervals.

Use it from SplitKit::rewrite by creating new virtual registers for the
components.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116006 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
e0a73ec0a982a4213f3de9860545d9bf2814593d 02-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> When RemoveCopyByCommutingDef is creating additional identity copies, just use
LiveInterval::MergeValueNumberInto instead of trying to extend LiveRanges and
getting it wrong.

This fixed PR8249 where a valno with a multi-segment live range was defined by
an identity copy created by RemoveCopyByCommutingDef. Some of the live
segments disappeared.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115385 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
207f8f688b0d530ebe4542ae0db599a6463b670b 25-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Avoid using VNInfo::getCopy as much as possible. I want to get rid of it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114794 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
6e2968c85c1e162ee5bc813769eab223e3df0f15 25-Sep-2010 Lang Hames <lhames@gmail.com> Removed VNInfo::isDefAccurate(). Def "accuracy" can be checked by testing whether LiveIntervals::getInstructionFromIndex(def) returns NULL.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114791 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
f568b2706e274c7d8081cfd0a7ee9b881e5c313b 21-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Add LiveInterval::find and use it for most LiveRange searching operations
instead of calling lower_bound or upper_bound directly.

This cleans up the search logic a bit because {lower,upper}_bound compare
LR->start by default, and it is usually simpler to search LR->end.

Funnelling all searches through one function also makes it possible to replace
the search algorithm with something faster than binary search.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114448 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
0635ead2c4f2182a480a3281b9b2fff084a10634 21-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove dead method.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114447 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
6c4329ec96fa49e42310a8fe57813a5d7b73e621 09-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Rearrange for better alignment and less padding

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113445 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
71160b44d7d9b66c65ad6ac5f2061c64e9cb0676 08-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove dead code and data.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113411 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
4a4bc3fba61dbb513f7213c7aa93faa30d18e0a2 08-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove dead code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113386 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
07c2b7ff685523458f92339facfd814689e55873 04-Sep-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove dead code.

Clobber ranges are no longer used when joining physical registers.
Instead, all aliases are checked for interference.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113084 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
fff2c4726baa0d6c9cb184c815677e33c0357c93 12-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Also recompute HasPHIKill flags in LiveInterval::RenumberValues.

If a phi-def value were removed from the interval, the phi-kill flags are no
longer valid.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110949 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1b2932024f098a6968645ac78d5848951d877c19 12-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove trailing whitespace.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110944 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
df30cf9e61e6586b45b74d1312bef1ee758ef94f 10-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Transpose the calculation of spill weights such that we are calculating one
register at a time. This turns out to be slightly faster than iterating over
instructions, but more importantly, it allows us to compute spill weights for
new registers created after the spill weight pass has run.

Also compute the allocation hint at the same time as the spill weight. This
allows us to use the spill weight as a cost metric for copies, and choose the
most profitable hint if there is more than one possibility.

The new hints provide a very small (< 0.1%) but universal code size improvement.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110631 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
23436597a8efad427059f2a6db5264e6a40d2dc7 06-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Add LiveInterval::RenumberValues - Garbage collection for VNInfos.

After heavy editing of a live interval, it is much easier to simply renumber the
live values instead of trying to keep track of the unused ones.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110463 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
6f4e4df1005e67917ebfcf66c8ea5bad5f587155 26-Jul-2010 Lang Hames <lhames@gmail.com> Factored out a bit of common code to mark VNInfos for deletion.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109388 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
624e0b2be6a8db6187206090ee5bc8f24cf55cb7 22-Jul-2010 Lang Hames <lhames@gmail.com> If 'other' was empty 'overlapsFrom(other, other.begin());' will segfault. This avoids that.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109075 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
8de3b1eb868fc5e9b6acb334ee487d943863f810 02-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Rematerialize as much as possible before inserting spills and reloads.

This allows us to recognize the common case where all uses could be
rematerialized, and no stack slot allocation is necessary.

If some values could be fully rematerialized, remove them from the live range
before allocating a stack slot for the rest.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107492 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
ce9a20b808ba48adf72e0c0615f903a65e9f9eb8 26-Jun-2010 Benjamin Kramer <benny.kra@googlemail.com> VNInfos don't need to be destructed anymore.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106943 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
15a571436da812c7cecbc3f3423ead2edff50358 26-Jun-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Don't track kills in VNInfo. Use interval ends instead.

The VNInfo.kills vector was almost unused except for all the code keeping it
updated. The few places using it were easily rewritten to check for interval
ends instead.

The two new methods LiveInterval::killedAt and killedInRange are replacements.

This brings us down to 3 independent data structures tracking kills.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106905 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
31135c06920017efa3998723fd1993fea3d1d6c6 13-Jun-2010 Benjamin Kramer <benny.kra@googlemail.com> Let SmallVector take advantage of LiveRange's podness.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105913 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
24cdd2f82c73de23a183ec6d93498be34dc02de7 21-May-2010 Lang Hames <lhames@gmail.com> Removed scaleNumbering method declaration from LiveInterval (not defined, not used).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104311 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
991de14dd62dcbab4b31357ae22dc5b053ba50a0 30-Mar-2010 Benjamin Kramer <benny.kra@googlemail.com> Introduce SpecificBumpPtrAllocator, a wrapper for BumpPtrAllocator which allows
only a single type of object to be allocated. Use it to make VNInfo destruction
typesafe.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99919 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
01cb1b665da03e2b74c0724f71751e912ec8c2be 30-Mar-2010 Torok Edwin <edwintorok@gmail.com> Reapply r99881 with some fixes: only call destructor in releaseMemory!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99883 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
e5d90416ee1a4f45eba80789a7a3cbc3d497a4cd 01-Mar-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Use methods to determine if a LiveInterval is spillable.

Don't accidentally produce unspillable intervals for deeply nested loops.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97496 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
f3b11aa6a72e0c31066a60c2e888e7a5eb5f2399 10-Feb-2010 Dan Gohman <gohman@apple.com> Fix several comments which had previously been "the the" where a
different word was intended.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95795 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
f451cb870efcf9e0302d25ed05f4cac6bb494e42 10-Feb-2010 Dan Gohman <gohman@apple.com> Fix "the the" and similar typos.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95781 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
233a60ec40b41027ff429e2f2c27fa2be762f2e9 04-Nov-2009 Lang Hames <lhames@gmail.com> The Indexes Patch.

This introduces a new pass, SlotIndexes, which is responsible for numbering
instructions for register allocation (and other clients). SlotIndexes numbering
is designed to match the existing scheme, so this patch should not cause any
changes in the generated code.

For consistency, and to avoid naming confusion, LiveIndex has been renamed
SlotIndex.

The processImplicitDefs method of the LiveIntervals analysis has been moved
into its own pass so that it can be run prior to SlotIndexes. This was
necessary to match the existing numbering scheme.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85979 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
cc3b0650f1feec45d1a2890b20c05c4b325f1788 03-Oct-2009 Lang Hames <lhames@gmail.com> Renamed MachineInstrIndex to LiveIndex.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83254 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
752195e3c662c6b5db042cf897c984624720f3b8 14-Sep-2009 Evan Cheng <evan.cheng@apple.com> Add early coalescing to liveintervals. This is work in progress and is known to miscompute some tests. Read it at your own rish, I have aged 10 year while writing this.

The gist of this is if source of some of the copies that feed into a phi join is defined by the phi join, we'd like to eliminate them. However, if any of the non-identity source overlaps the live interval of the phi join then the coalescer won't be able to coalesce them. The early coalescer's job is to eliminate the identity copies by partially-coalescing the two live intervals.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81796 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
4a39ba992677ce48c61cbdad02594d9737eabdf0 12-Sep-2009 Lang Hames <lhames@gmail.com> Whoops. Committed the headers for r81605 - 'Moved some more index operations over to LiveIntervals.'

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81609 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
da4ae4be5b2b8fa35ef989e548530833428f36bf 05-Sep-2009 Bob Wilson <bob.wilson@apple.com> Stabilize the order of live intervals in the priority_queue used by the
linear scan reg alloc. This fixes a problem I ran into where extracting
a function from a larger file caused the generated code to change (masking
the problem I was trying to debug) because the allocator behaved differently.

This changes the results for two X86 regression checks. stack-color-with-reg
is improved, with one less instruction, but pr3495 is worse, with one more
copy. As far as I can tell, these tests were just getting lucky or unlucky,
so I've changed the expected results.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81060 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
4d44081c8c93ee3a39d448e9404970ab56171ee9 04-Sep-2009 Lang Hames <lhames@gmail.com> Removed yet another std::ostream reference.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81042 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
a85d2bb86b57e54e1416f56bf6b2897a707470be 04-Sep-2009 Lang Hames <lhames@gmail.com> Removed some junk and a std::ostream operator that was hanging around.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81041 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
8651125d2885f74546b6e2a556082111d5b75da3 04-Sep-2009 Lang Hames <lhames@gmail.com> Replaces uses of unsigned for indexes in LiveInterval and VNInfo with
a new class, MachineInstrIndex, which hides arithmetic details from
most clients. This is a step towards allowing the register allocator
to update/insert code during allocation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81040 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
c02497f5bae87e71fd5617db5751cb0b3a14bbed 23-Aug-2009 Chris Lattner <sabre@nondot.org> shoot a few more std::ostream print methods in the head.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79814 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
52c1afcaea61440950a11a4ccadac4354420d727 11-Aug-2009 Lang Hames <lhames@gmail.com> Modified VNInfo. The "copy" member is now a union which holds the copy for a register interval, or the defining register for a stack interval. Access is via getCopy/setCopy and getReg/setReg.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78620 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1cd1d98232c3c3a0bd3810c3bf6c2572ea02f208 24-Jul-2009 Daniel Dunbar <daniel@zuster.org> Move more to raw_ostream, provide support for writing MachineBasicBlock,
LiveInterval, etc to raw_ostream.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76965 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
29ff37f39c305455752941fbf8a426b1f4d877fc 22-Jul-2009 David Greene <greened@obbligato.org> 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
/external/llvm/include/llvm/CodeGen/LiveInterval.h
23702eacab9d7fa21f250113d02e413a7ac50fda 15-Jul-2009 Daniel Dunbar <daniel@zuster.org> Remove mismatched and unnecessary declaration.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75841 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
d23f0d0451a4ffc0c12d7a73559fa35587ce7abb 14-Jul-2009 Lang Hames <lhames@gmail.com> New VNInfo alignment patch by Ryan Flynn.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75609 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1b8f70a0d3d72ce55c8036b79bcc80b130b5f7b2 14-Jul-2009 Lang Hames <lhames@gmail.com> Unbroke LiveInterval.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75588 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
08759c56010aaffae5c63944230c06acd0033e5b 14-Jul-2009 Lang Hames <lhames@gmail.com> Tidy up VNInfo alignment code. Patch contributed by Ryan Flynn.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75587 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
ffd1326ff8dfc652a8026c3faebf55bbba7c32c7 09-Jul-2009 Lang Hames <lhames@gmail.com> Improved tracking of value number kills. VN kills are now represented
as an (index,bool) pair. The bool flag records whether the kill is a
PHI kill or not. This code will be used to enable splitting of live
intervals containing PHI-kills.

A slight change to live interval weights introduced an extra spill
into lsr-code-insertion (outside the critical sections). The test
condition has been updated to reflect this.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75097 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
10382fb71d8306f320ecbeb7049d25354c0e5457 19-Jun-2009 Lang Hames <lhames@gmail.com> More VNInfo tweaking, plus a little progress on intra-block splitting.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73750 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
b7b39987bb1f9acc4cc0efe0f4c2d1ee5e2c9148 18-Jun-2009 Chris Lattner <sabre@nondot.org> Don't use int8_t, that requires DataTypes.h



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73682 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
73d2f15fb5af9ca91f1f01dbaea6ff54a6fed68b 18-Jun-2009 Zhongxing Xu <xuzhongxing@gmail.com> include header for uint8_t.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73675 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
857c4e01f85601cf2084adb860616256ee47c177 17-Jun-2009 Lang Hames <lhames@gmail.com> VNInfo cleanup.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73634 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
90f95f88c6ce09c6744777dc9d140c3c77203b92 14-Jun-2009 Evan Cheng <evan.cheng@apple.com> Move register allocation preference (or hint) from LiveInterval to MachineRegisterInfo. This allows more passes to set them.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73346 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
f41538d1b54f55e8900394929b50f7ce3e61125f 02-Jun-2009 Lang Hames <lhames@gmail.com> Update to in-place spilling framework. Includes live interval scaling and trivial rewriter.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72729 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
0adb527d169e1f557676fda35bc9abb735e5c912 25-Apr-2009 Evan Cheng <evan.cheng@apple.com> Do not share a single unknown val# for all the live ranges merged into a physical sub-register live interval. When coalescer is merging in clobbered virtaul register live interval into a physical register live interval, give each virtual register val# a separate val# in the physical register live interval. Otherwise, the coalescer would have lost track of the definitions information it needs to make correct coalescing decisions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70026 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
cccdb2b602cf421d8890130308945163620ebc68 18-Apr-2009 Evan Cheng <evan.cheng@apple.com> Add a new LiveInterval::overlaps(). It checks if the live interval overlaps a range specified by [Start, End).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69434 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
de551f91d8816632a76a065084caab9fab6aacff 01-Apr-2009 Dan Gohman <gohman@apple.com> Use CHAR_BIT instead of hard-coding 8 in several places where it
is appropriate. This helps visually differentiate host-oriented
calculations from target-oriented calculations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68227 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
a2e6435e483f30e00382a5758f6dcc67e213b57a 11-Mar-2009 Evan Cheng <evan.cheng@apple.com> Two coalescer fixes in one.
1. Use the same value# to represent unknown values being merged into sub-registers.
2. When coalescer commute an instruction and the destination is a physical register, update its sub-registers by merging in the extended ranges.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66610 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
86fb9fdb2000213d3cd5a082e8501cb8fe974a14 08-Feb-2009 Evan Cheng <evan.cheng@apple.com> Strengthen the previous check.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64076 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
77fde2cbb1fbf9daf5235fa734c6c09b2d530617 08-Feb-2009 Evan Cheng <evan.cheng@apple.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64073 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
5b93f6fa82e33b17d618b3e24da513f547861481 02-Feb-2009 Owen Anderson <resistor@mac.com> MergeValueInto is too smart: it might choose to do the merge the opposite direction.
Live interval reconstruction needs to account for this, and scour its maps to
prevent dangling references.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63558 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
5a3c6a87b0173b9d367f7b55e7c99e5110ede057 29-Jan-2009 Evan Cheng <evan.cheng@apple.com> Exit with nice warnings when register allocator run out of registers.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63267 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
42cc6e33ec0f63560c31f1928c56b4b0465d537c 29-Jan-2009 Evan Cheng <evan.cheng@apple.com> Fix comment about removeRange.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63255 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
169d4080277c71548de52b54c8a79f99694351c6 28-Dec-2008 Owen Anderson <resistor@mac.com> Forgot to commit this file.

Add a clear() method to remove all ranges and value numbers for a live interval.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61459 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
fce40287181af1ae376c3991626ffbf0ccd902b7 20-Dec-2008 Dan Gohman <gohman@apple.com> LiveInterval::removeKills and isKill don't need 'this' and
can be static member functions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61278 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
5379f412bc6ac6171f3bd73930197bfce88c2faa 19-Dec-2008 Evan Cheng <evan.cheng@apple.com> Fix PR3149. If an early clobber def is a physical register and it is tied to an input operand, it effectively extends the live range of the physical register. Currently we do not have a good way to represent this.

172 %ECX<def> = MOV32rr %reg1039<kill>
180 INLINEASM <es:subl $5,$1
sbbl $3,$0>, 10, %EAX<def>, 14, %ECX<earlyclobber,def>, 9, %EAX<kill>,
36, <fi#0>, 1, %reg0, 0, 9, %ECX<kill>, 36, <fi#1>, 1, %reg0, 0
188 %EAX<def> = MOV32rr %EAX<kill>
196 %ECX<def> = MOV32rr %ECX<kill>
204 %ECX<def> = MOV32rr %ECX<kill>
212 %EAX<def> = MOV32rr %EAX<kill>
220 %EAX<def> = MOV32rr %EAX
228 %reg1039<def> = MOV32rr %ECX<kill>

The early clobber operand ties ECX input to the ECX def.

The live interval of ECX is represented as this:
%reg20,inf = [46,47:1)[174,230:0) 0@174-(230) 1@46-(47)

The right way to represent this is something like
%reg20,inf = [46,47:2)[174,182:1)[181:230:0) 0@174-(182) 1@181-230 @2@46-(47)

Of course that won't work since that means overlapping live ranges defined by two val#.

The workaround for now is to add a bit to val# which says the val# is redefined by a early clobber def somewhere. This prevents the move at 228 from being optimized away by SimpleRegisterCoalescing::AdjustCopiesBackFrom.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61259 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
2ad8245566a3c92d4559727a877d57ecf5d078c8 26-Nov-2008 Dan Gohman <gohman@apple.com> LiveRanges are represented as half-open ranges. Fix the findLiveInMBBs code
and the LiveInterval.h top-level comment and accordingly. This fixes blocks
having spurious live-in registers in boundary cases.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60092 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
4974b6aae1ec6f385ee212942d9a01ba1f4997e3 12-Nov-2008 Dan Gohman <gohman@apple.com> Correct a function name in a comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59143 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
54898938673d2a13ce31626ec34b2d4d314b2c81 29-Oct-2008 Evan Cheng <evan.cheng@apple.com> - More pre-split fixes: spill slot live interval computation bug; restore point bug.
- If a def is spilt, remember its spill index to allow its reuse.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58375 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
86b49f8e2de796cb46c7c8b6a4c4900533fd53f4 24-Sep-2008 Dale Johannesen <dalej@apple.com> Next round of earlyclobber handling. Approach the
RA problem by expanding the live interval of an
earlyclobber def back one slot. Remove
overlap-earlyclobber throughout. Remove
earlyclobber bits and their handling from
live internals.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56539 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
79faf61fad36c34dd818da1e97a214d70c02e4ce 20-Sep-2008 Dale Johannesen <dalej@apple.com> Shorten and rearrange data fields to save a word of memory.
Per review feedback.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56388 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
fa48f941304f29f967e0a7fc6807d7026ba99b7b 19-Sep-2008 Dale Johannesen <dalej@apple.com> Remove AsmThatEarlyClobber etc. from LiveIntervalAnalysis
and redo as linked list walk. Logic moved into RA.
Per review feedback.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56326 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
99ec779a93cf7a09ac336b63d2d67818960343a1 23-Jun-2008 Evan Cheng <evan.cheng@apple.com> Instead of adding an isSS field to LiveInterval to denote stack slot. Use top bit of 'reg' instead. If the top bit is set, than the LiveInterval represents a stack slot live interval.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52639 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
3f32d65912b4da23793dab618d981be2ce11c331 04-Jun-2008 Evan Cheng <evan.cheng@apple.com> Add a stack slot coloring pass. Not yet enabled.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51934 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1baa88e3de8947b02d9ef4caa73e5860f048ec6e 29-May-2008 Dan Gohman <gohman@apple.com> Prune and tidy #includes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51697 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
34cd4a484e532cc463fd5a4bf59b88d13c5467c1 05-May-2008 Evan Cheng <evan.cheng@apple.com> Fix more -Wshorten-64-to-32 warnings.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50659 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
f30a49d9e02bdf9ba9703f8f1f52a3c6186e0065 03-Apr-2008 Evan Cheng <evan.cheng@apple.com> Special handling of zero-sized live intervals.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49167 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
e85fe660e4e99d30ca9292b706b8ffe6d0367dca 26-Feb-2008 Bill Wendling <isanbard@gmail.com> Detabify


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47597 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
c8d044e4f779fdcfc5e7d592927740fd8f672a70 15-Feb-2008 Evan Cheng <evan.cheng@apple.com> - Removing the infamous r2rMap_ and rep() method. Now the coalescer will update
register defs and uses after each successful coalescing.
- Also removed a number of hacks and fixed some subtle kill information bugs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47167 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
d2b8d7bc51b0e41d09b32aeaa550358ccb379009 13-Feb-2008 Evan Cheng <evan.cheng@apple.com> - Added removeValNo() to remove all live ranges of a particular value#.
- removeRange() can now update value# information.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47044 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
6f0d024a534af18d9e60b3ea757376cd8a3a980e 10-Feb-2008 Dan Gohman <gohman@apple.com> Rename MRegisterInfo to TargetRegisterInfo.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46930 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
7ed47a13356daed2a34cd2209a31f92552e3bdd8 29-Dec-2007 Chris Lattner <sabre@nondot.org> Don't attribute in file headers anymore. See llvmdev for the
discussion of this change. Boy are my fingers tired. ;-)



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45411 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
c3fc7d9ec9b495c8a88cd854247105c296d3aabd 29-Nov-2007 Evan Cheng <evan.cheng@apple.com> Replace the odd kill# hack with something less fragile.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44434 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
28e9a5fe94b96570c3939c61fab18204abdd6b97 17-Oct-2007 Evan Cheng <evan.cheng@apple.com> Update comments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43064 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
34729256e8058d4106706e9feb2dfad7893502d1 14-Oct-2007 Evan Cheng <evan.cheng@apple.com> When coalescing an EXTRACT_SUBREG and the dst register is a physical register,
the source register will be coalesced to the super register of the LHS. Properly
merge in the live ranges of the resulting coalesced interval that were part of
the original source interval to the live interval of the super-register.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42961 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
32dfbeada7292167bb488f36a71a5a6a519ddaff 12-Oct-2007 Evan Cheng <evan.cheng@apple.com> EXTRACT_SUBREG coalescing support. The coalescer now treats EXTRACT_SUBREG like
(almost) a register copy. However, it always coalesced to the register of the
RHS (the super-register). All uses of the result of a EXTRACT_SUBREG are sub-
register uses which adds subtle complications to load folding, spiller rewrite,
etc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42899 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
af992f782fb2cac8d00b352c3dd73f6e782b5758 06-Sep-2007 David Greene <greened@obbligato.org> Constify to catch bugs.







git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41751 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
38a90969eaae1d0ef366c0fbe39f0ee447de7a8d 05-Sep-2007 Evan Cheng <evan.cheng@apple.com> Accidentially left this out.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41730 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
f3bb2e65d12857f83b273f4ecab013680310bbbc 05-Sep-2007 Evan Cheng <evan.cheng@apple.com> Use pool allocator for all the VNInfo's to improve memory access locality. This reduces coalescing time on siod Mac OS X PPC by 35%. Also remove the back ptr from VNInfo to LiveInterval and other tweaks.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41729 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
d4e4937b79a7da789379a09117cc74f20cd60623 31-Aug-2007 Evan Cheng <evan.cheng@apple.com> Remove an unnecessary element, saving 4 bytes per LiveInterval.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41641 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
7ecb38be0a533e7b9c7d3b8e9b5c8a6fa5f6b349 29-Aug-2007 Evan Cheng <evan.cheng@apple.com> Change LiveRange so it keeps a pointer to the VNInfo rather than an index.
Changes related modules so VNInfo's are not copied. This decrease
copy coalescing time by 45% and overall compilation time by 10% on siod.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41579 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1a66f0a4f2348473263fab757d96588bc1e93554 28-Aug-2007 Evan Cheng <evan.cheng@apple.com> Recover most of the compile time regression due to recent live interval changes.
1. Eliminate the costly live interval "swapping".
2. Change ValueNumberInfo container from SmallVector to std::vector. The former
performs slowly when the vector size is very large.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41536 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
81975f6dfd9d306d0ea7ce3ef22561c949de9af9 27-Aug-2007 Dan Gohman <gohman@apple.com> Add explicit keywords and remove spurious trailing semicolons.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41482 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
a6db2d3df22ee173e653a441a8be3f0810ce8631 16-Aug-2007 Evan Cheng <evan.cheng@apple.com> Comments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41119 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
549f27d3070195d6647b796841a5291b4549e8e0 14-Aug-2007 Evan Cheng <evan.cheng@apple.com> Re-implement trivial rematerialization. This allows def MIs whose live intervals that are coalesced to be rematerialized.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41060 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
4f8ff168de12eabdeb4b9437bf9402489ecf85cb 11-Aug-2007 Evan Cheng <evan.cheng@apple.com> Code to maintain kill information during register coalescing.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41016 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
24c2e5cf7e926452ea5875d027ec0d24d9c19e39 08-Aug-2007 Evan Cheng <evan.cheng@apple.com> Adding kill info to val#.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40925 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
a141cfe5b2beb16599b5bab8c73333b31cc7a548 08-Aug-2007 Evan Cheng <evan.cheng@apple.com> Clean up and bug fix.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40921 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
8df786012dc6b875f31ba4152e09c6e0098082ee 08-Aug-2007 Evan Cheng <evan.cheng@apple.com> - Each val# can have multiple kills.
- Fix some minor bugs related to special markers on val# def. ~0U means
undefined, ~1U means dead val#.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40916 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
a8d94f1315f722de056af03763664b77a5baac26 08-Aug-2007 Evan Cheng <evan.cheng@apple.com> - LiveInterval value#'s now have 3 components: def instruction #,
kill instruction #, and source register number (iff the value# is defined by a
copy).
- Now def instruction # is set for every value#, not just for copy defined ones.
- Update some outdated code related inactive live ranges.
- Kill info not yet set. That's next patch.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40913 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
e52eef8e9a10ada9efc1fed115e5b6eefb22b1da 17-Apr-2007 Evan Cheng <evan.cheng@apple.com> Add a register allocation preference field; add a method to compute size of a live interval.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36216 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
2638e1a6b9e3c0e22b398987e1db99bee81db4fb 20-Mar-2007 Evan Cheng <evan.cheng@apple.com> First cut trivial re-materialization support.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35208 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
5c7e326585f3a543388ba871c3425f7664cd9143 17-Dec-2006 Bill Wendling <isanbard@gmail.com> Added an automatic cast to "std::ostream*" etc. from OStream. We then can
rework the hacks that had us passing OStream in. We pass in std::ostream*
instead, check for null, and then dispatch to the correct print() method.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32636 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
4b607748d86b44cc59e5cf3eee194dfd9b0fcd86 16-Dec-2006 Jeff Cohen <jeffc@jolt-lang.org> The best unbreakage yet, addressing Bill's concerns.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32622 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
c21c5eeb4f56f160e79522df2d3aab5cfe73c05d 15-Dec-2006 Jeff Cohen <jeffc@jolt-lang.org> An even better unbreakage...


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32617 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
d5c0f439924ec6c839c3c6ba16122e460a296336 15-Dec-2006 Jeff Cohen <jeffc@jolt-lang.org> Complete unbreak of VC++ (Chris identified the simple fix).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32615 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
e81561909d128c6e2d8033cb5465a49b2596b26a 07-Dec-2006 Bill Wendling <isanbard@gmail.com> Changed llvm_ostream et all to OStream. llvm_cerr, llvm_cout, llvm_null, are
now cerr, cout, and NullStream resp.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32298 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
bdc679d564e67a81792e463f6614b0088f975025 29-Nov-2006 Bill Wendling <isanbard@gmail.com> Converted to using llvm streams instead of <iostream>s


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31992 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
b5ebf15b2b2ce8989caf1a1114b05d80b0f9bd48 28-Nov-2006 Bill Wendling <isanbard@gmail.com> Added a temporary hack to get the llvm-streams to work for future checkins.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31978 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
eba4be809086c59d58050f6d2eceb0c029785dff 28-Nov-2006 Bill Wendling <isanbard@gmail.com> Added helper function to transition to using llvm streams.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31953 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1bcf7a309eb46c66adc154ad9c8f0562653a8e13 16-Nov-2006 Bill Wendling <isanbard@gmail.com> Added "removeRange", which takes and removes an entire LiveRange.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31781 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
2efe1094528b08460508bb8a2028c249536b353a 02-Sep-2006 Chris Lattner <sabre@nondot.org> add a prototype


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30051 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
5d9b6f28239ecc6f57eeb3752455a6caf21ff270 01-Sep-2006 Chris Lattner <sabre@nondot.org> remove some particularly expensive assertions


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30014 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
91725b75852443923b419fd23215194cfc65dd88 31-Aug-2006 Chris Lattner <sabre@nondot.org> avoid calling the virtual isMoveInstr method endlessly by caching its results.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29994 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
6d8fbef015ff836bcb8f64f52c49805e43f8ea9f 30-Aug-2006 Chris Lattner <sabre@nondot.org> Teach the coallescer to coallesce live intervals joined by an arbitrary
number of copies, potentially defining live ranges that appear to have
differing value numbers that become identical when coallsced. Among other
things, this fixes CodeGen/X86/shift-coalesce.ll and PR687.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29968 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
c114b2cad7293d98686d380273085f5c32966b52 26-Aug-2006 Chris Lattner <sabre@nondot.org> Completely change the way that joining with physregs is implemented. This
paves the way for future changes, increases coallescing opportunities (in
theory, not witnessed in practice), and eliminates the really expensive
LiveIntervals::overlapsAliases method.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29890 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
f7da2c7b0c6293c268881628fc351bed7763f1f4 25-Aug-2006 Chris Lattner <sabre@nondot.org> Take advantage of the recent improvements to the liveintervals set (tracking
instructions which define each value#) to simplify and improve the coallescer.
In particular, this patch:

1. Implements iterative coallescing.
2. Reverts an unsafe hack from handlePhysRegDef, superceeding it with a
better solution.
3. Implements PR865, "coallescing" away the second copy in code like:

A = B
...
B = A

This also includes changes to symbolically print registers in intervals
when possible.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29862 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
be4f88a8b8bb3311e0dc4cde8533763d7923c3ea 22-Aug-2006 Chris Lattner <sabre@nondot.org> Improve the LiveInterval class to keep track of which machine instruction
defines each value# tracked by the interval. This will be used to improve
coallescing.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29830 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
969e262656066e76d59b39eb6e8b17ed9f448383 22-Aug-2006 Chris Lattner <sabre@nondot.org> Switch to using smallvector for liveintervals. This speeds up live interval
analysis 11% on kc++.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29812 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
0c2f83e756ad808aedf6cb39ea043d3d4cd79909 22-Aug-2006 Chris Lattner <sabre@nondot.org> move LiveInterval state all together


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29806 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
9471c8a93b117d8ac01c4ef1cb9faa583e03dec0 26-Jan-2006 Jeff Cohen <jeffc@jolt-lang.org> Improve compatibility with VC2005, patch by Morten Ofstad!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25661 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
0692bbd991abe449327276ab8b10f1c822530450 20-Oct-2005 Chris Lattner <sabre@nondot.org> add a new method


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23840 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
38135af219c48a8626d6af34a92e7e8bb957c81f 14-May-2005 Chris Lattner <sabre@nondot.org> Print the symbolic register name in a register allocator debug dump.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22002 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
1a3a48776340c96df5df673df1c159391d1a1cb7 18-Nov-2004 Chris Lattner <sabre@nondot.org> Fix typeo


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17938 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
bae74d9192f04d8185c7b4580565d56cc4ef53f2 18-Nov-2004 Chris Lattner <sabre@nondot.org> Add ability to give hints to the overlaps routines.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17934 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
743ef6d70e710353c1e2b6a4b23af1262f4a475b 18-Nov-2004 Chris Lattner <sabre@nondot.org> Add new advanceTo method


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17932 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
8d8d513d4dcd4d98b92ccce10a9907086af28f1e 18-Nov-2004 Chris Lattner <sabre@nondot.org> Fix a minor bug in expiredAt. endNumber() is the first number that is not valid.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17931 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
23b71c1e1e33219327b1c0edf43034dbe4c3ae90 18-Nov-2004 Chris Lattner <sabre@nondot.org> Rename some methods, use 'begin' instead of 'start', add new LiveInterval
iterator/begin/end members.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17930 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
d3a205eab5761298ccfb320834b5f0ea0184ab27 25-Jul-2004 Chris Lattner <sabre@nondot.org> Make a method const, no functionality changes


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15193 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
3f86193cd2153595f0e32d8a8d8a0e7d4ec97faf 24-Jul-2004 Alkis Evlogimenos <alkis@evlogimenos.com> Remove implementation of operator= and make it private so that it is
not used accidentally.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15172 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
a1613db62fec94845aa8306232fb665273615bad 24-Jul-2004 Alkis Evlogimenos <alkis@evlogimenos.com> Change std::map<unsigned, LiveInterval*> into a std::map<unsigned,
LiveInterval>. This saves some space and removes the pointer
indirection caused by following the pointer.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15167 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
abf295fc6cfb438617e8b105022ce506f56674d8 24-Jul-2004 Chris Lattner <sabre@nondot.org> Little stuff:

* Fix comment typeo
* add dump() methods
* add a few new methods like getLiveRangeContaining, removeRange & joinable
(which is currently the same as overlaps)
* Remove the unused operator==

Bigger change:

* In LiveInterval, instead of using a boolean isDefinedOnce to keep track of
if there are > 1 definitions in a particular interval, keep a counter,
NumValues to keep track of exactly how many there are.
* In LiveRange, add a new ValId element to indicate which of the numbered
values each LiveRange belongs to. We now no longer merge LiveRanges if
they are of differing value ID's even if they are neighbors.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15152 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
b26c215c059d4674bd6a9a8b94da86e497e64844 23-Jul-2004 Chris Lattner <sabre@nondot.org> Change addRange and join to be a little bit smarter. In particular, we don't
want to insert a new range into the middle of the vector, then delete ranges
one at a time next to the inserted one as they are merged.

Instead, if the inserted interval overlaps, just start merging. The only time
we insert into the middle of the vector is when we don't overlap at all. Also
delete blocks of live ranges if we overlap with many of them.

This patch speeds up joining by .7 seconds on a large testcase, but more
importantly gets all of the range adding code into addRangeFrom.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15141 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
e6ad392802d8643ec7efad9bb80c0c429edda499 23-Jul-2004 Chris Lattner <sabre@nondot.org> New helper method


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15138 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
ebd7e6c54dce754a88d8f38df4ac2f388f35435e 23-Jul-2004 Chris Lattner <sabre@nondot.org> Instead of searching for a live interval pair, search for a location. This gives
a very modest speedup of .3 seconds compiling 176.gcc (out of 20s).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15136 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/LiveInterval.h
fb449b9ea5a37fb411aee7d42f6a76119602288d 23-Jul-2004 Chris Lattner <sabre@nondot.org> Pull the LiveRange and LiveInterval classes out of LiveIntervals.h (which
will soon be renamed) into their own file. The new file should not emit
DEBUG output or have other side effects. The LiveInterval class also now
doesn't know whether its working on registers or some other thing.

In the future we will want to use the LiveInterval class and friends to do
stack packing. In addition to a code simplification, this will allow us to
do it more easily.


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