History log of /external/llvm/lib/CodeGen/RegAllocBase.h
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
9384111e90cb840e7eb867098f19910cf4c4a11d 12-Jan-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Make data structures private.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147979 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
a8bd9a68f7c00fe1d895bb5e27ff804aa33abd64 11-Jan-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Sink spillInterferences into RABasic.

This helper method is too simplistic for RAGreedy.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147976 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
078203f301baaa1fc96e172708f4bf7f9c7dcf82 11-Jan-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Cleanup.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147975 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
5f2316a3b55f88dab2190212210770180a32aa95 03-Jun-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Switch AllocationOrder to using RegisterClassInfo instead of a BitVector
of reserved registers.

Use RegisterClassInfo in RABasic as well. This slightly changes som
allocation orders because RegisterClassInfo puts CSR aliases last.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132581 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
bdda37d7fbafe6876f248341837423a4100f95a5 10-May-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix PR9883. Make sure all caches are invalidated when a live range is repaired.

The previous invalidation missed the alias interference caches.

Also add a stats counter for the number of repaired ranges.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131133 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
2926733240d0766fbd45df6eb609ad2328f0307d 16-Mar-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Tag cached interference with a user-provided tag instead of the virtual register number.

The live range of a virtual register may change which invalidates the cached
interference information.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127772 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
98d9648de7d571b2e6d139b65961a70d1833b0d7 23-Feb-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Change the RAGreedy register assignment order so large live ranges are allocated first.

This is based on the observation that long live ranges are more difficult to
allocate, so there is a better chance of solving the puzzle by handling the big
pieces first. The allocator will evict and split long alive ranges when they get
in the way.

RABasic is still using spill weights for its priority queue, so the interface to
the queue has been virtualized.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126259 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
2710638db2eb84cd7eefb8bb9a1b7e5c49413d45 09-Feb-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Evict a lighter single interference before attempting to split a live range.

Registers are not allocated strictly in spill weight order when live range
splitting and spilling has created new shorter intervals with higher spill
weights.

When one of the new heavy intervals conflicts with a single lighter interval,
simply evict the old interval instead of trying to split the heavy one.

The lighter interval is a better candidate for splitting, it has a smaller use
density.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125151 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
7fb95d4235ad588d4105544b2ae3fa1aa0eba3b1 29-Dec-2010 Cameron Zwarich <zwarich@apple.com> Add a missing word to a comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122625 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
af24964251e27c2dd863239ba66ffd967b593be5 18-Dec-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Make the -verify-regalloc command line option available to base classes as
RegAllocBase::VerifyEnabled.

Run the machine code verifier in a few interesting places during RegAllocGreedy.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122107 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
533f58ecdd8a4732c2f0e149387c4d8d8d4142de 11-Dec-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Add named timer groups for the different stages of register allocation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121604 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
4680dec5fb3a1b624f13ca9b2a555ca90a07973e 11-Dec-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Move MRI into RegAllocBase. Clean up debug output a bit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121599 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
b853e6c3702149cdbbd6fa404334e3ba0055641a 09-Dec-2010 Andrew Trick <atrick@apple.com> Added register reassignment prototype to RAGreedy. It's a simple
heuristic to reshuffle register assignments when we can't find an
available reg.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121388 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
d0bec3e62c98b1f0ef3a41db8f95599b2014c131 08-Dec-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Store (priority,regnum) pairs in the priority queue instead of providing an
abstract priority queue interface in subclasses that want to override the
priority calculations.

Subclasses must provide a getPriority() implementation instead.

This approach requires less code as long as priorities are expressable as simple
floats, and it avoids the dangers of defining potentially expensive priority
comparison functions.

It also should speed up priority_queue operations since they no longer have to
chase pointers when comparing registers. This is not measurable, though.

Preferably, we shouldn't use floats to guide code generation. The use of floats
here is derived from the use of floats for spill weights. Spill weights have a
dynamic range that doesn't lend itself easily to a fixpoint implementation.

When someone invents a stable spill weight representation, it can be reused for
allocation priorities.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121294 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
1b19dc1d8b7594434ea9a157bfe2ae68eabf9f05 08-Dec-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Move RABasic::addMBBLiveIns to the base class, it is generally useful.

Minor optimization to the use of IntervalMap iterators. They are fairly
heavyweight, so prefer SI.valid() over SI != end().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121217 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
953af2c3c560a13bd5eeb676c128b7e362dca684 08-Dec-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Switch LiveIntervalUnion from std::set to IntervalMap.

This speeds up RegAllocBasic by 20%, not counting releaseMemory which becomes
way faster.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121201 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
18c57a8a09a7c79fbcf4348b0ad8135246ab984f 01-Dec-2010 Andrew Trick <atrick@apple.com> Coding style. No significant functionality. Abandon linear scan style
in favor of the widespread llvm style. Capitalize variables and add
newlines for visual parsing. Rename variables for readability.
And other cleanup.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120490 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
8a83d54528c197675ba0f21ebe95ac30fa3d8841 11-Nov-2010 Andrew Trick <atrick@apple.com> Check TRI->getReservedRegs because other allocators do it. Even though
it makes no sense for allocation_order iterators to visit reserved regs.
The inline spiller depends on AliasAnalysis.
Manage the Query state to avoid uninitialized or stale results.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118800 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
f4baeaf8485f01beda46d29fd55753199dc68070 10-Nov-2010 Andrew Trick <atrick@apple.com> RABasic is nearly functionally complete. There are a few remaining
benchmarks hitting an assertion.
Adds LiveIntervalUnion::collectInterferingVRegs.
Fixes "late spilling" by checking for any unspillable live vregs among
all physReg aliases.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118701 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
071d1c063f1080c70a7141d947a96cf511a1ba45 09-Nov-2010 Andrew Trick <atrick@apple.com> Adds RABasic verification and tracing.
(retry now that the windows build is green)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118630 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
32d9aeb1df982638766757704c4e23f58ffb40d1 09-Nov-2010 Andrew Trick <atrick@apple.com> Reverting r118604. Windows build broke.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118613 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
39a5ce46a51c8e855a2f52c9f733d9d5dd8a65c4 09-Nov-2010 Andrew Trick <atrick@apple.com> Adds RABasic verification and tracing.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118604 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
e141a4960f702bef957b28abde3801ec64e32d87 08-Nov-2010 Andrew Trick <atrick@apple.com> Adds support for spilling previously allocated live intervals to
handle cases in which a register is unavailable for spill code.
Adds LiveIntervalUnion::extract. While processing interferences on a
live virtual register, reuses the same Query object for each
physcial reg.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118423 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
e16eecc323879744dcff4f359ba9ccdb25bd6909 26-Oct-2010 Andrew Trick <atrick@apple.com> Jakob's review of the basic register allocator.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117384 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
f4331060548004471f5bb10e330ba4ce4de28ad2 23-Oct-2010 Andrew Trick <atrick@apple.com> Nonvirtual dtor that was accessible enough to be bad.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117180 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h
14e8d71cc945034d4ee6e76be00e00f14efac62f 23-Oct-2010 Andrew Trick <atrick@apple.com> This is a prototype of an experimental register allocation
framework. It's purpose is not to improve register allocation per se,
but to make it easier to develop powerful live range splitting. I call
it the basic allocator because it is as simple as a global allocator
can be but provides the building blocks for sophisticated register
allocation with live range splitting.

A minimal implementation is provided that trivially spills whenever it
runs out of registers. I'm checking in now to get high-level design
and style feedback. I've only done minimal testing. The next step is
implementing a "greedy" allocation algorithm that does some register
reassignment and makes better splitting decisions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117174 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocBase.h