History log of /external/llvm/lib/CodeGen/RegisterCoalescer.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
22c310d78ce9630af15b0de94c18a409705b7496 10-Dec-2014 Tim Murray <timmurray@google.com> Revert "Revert "Bring in fixes for Cortex-A53 errata + build updates.""

This reverts commit c8db087b3b6d8767db4fa54057ac8fa448d812ca.
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
c8db087b3b6d8767db4fa54057ac8fa448d812ca 23-Oct-2014 Tim Murray <timmurray@google.com> Revert "Bring in fixes for Cortex-A53 errata + build updates."

This reverts commit 8a1773694c6d9b1277647440583811ad3d85c6a4.

bug 18094492
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
8a1773694c6d9b1277647440583811ad3d85c6a4 17-Oct-2014 Stephen Hines <srhines@google.com> Bring in fixes for Cortex-A53 errata + build updates.

Bug: 18034609

(cherry picked from commit bfc2d688b591c574c0cc788348c74545ce894efa)

Change-Id: I010fb735bb84fe97ccb8e3878f9601cb533962f4
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
dce4a407a24b04eebc6a376f8e62b41aaa7b071f 29-May-2014 Stephen Hines <srhines@google.com> Update LLVM for 3.5 rebase (r209712).

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

Change-Id: Ifadecab779f128e62e430c2b4f6ddd84953ed617
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
4f3b5e8c9232e43d1291aab8db5f5698d7ee0ea4 10-Oct-2013 Matthias Braun <matze@braunis.de> Represent RegUnit liveness with LiveRange instance

Previously LiveInterval has been used, but having a spill weight and
register number is unnecessary for a register unit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192397 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e25dde550baec1f79caf2fc06edd74e7ae6ffa33 10-Oct-2013 Matthias Braun <matze@braunis.de> Work on LiveRange instead of LiveInterval where possible

Also change some pointer arguments to references at some places where
0-pointers are not allowed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192396 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
0bb5a66b0388d2c52a887eaafe3749aaceb6a754 04-Oct-2013 Matthias Braun <matze@braunis.de> Fix comment

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191966 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
b6ac11cd03e9dd97b45dc97787171f942ef8e344 26-Sep-2013 Andrew Trick <atrick@apple.com> Added temp flag -misched-bench for staging in default changes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191423 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
0d293e45b66c742fdbc3998209bb20ed6c5806bf 22-Sep-2013 Benjamin Kramer <benny.kra@googlemail.com> Provide basic type safety for array_pod_sort comparators.

This makes using array_pod_sort significantly safer. The implementation relies
on function pointer casting but that should be safe as we're dealing with void*
here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191175 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
2d5558cbaecfcaea72b80a725417dde6ed80ee04 06-Sep-2013 Matthias Braun <matze@braunis.de> remove pointless assert

The if above it ensures the property anyway.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190168 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
c725865bbcfb935f3698f26b6608fdbd2b2d3fd4 06-Sep-2013 Matthias Braun <matze@braunis.de> fix comment

There's no 'B3' in the example.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190167 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
1feb5854aeeda897e9318c8193d187673c8576b8 15-Aug-2013 Mark Lacey <mark.lacey@apple.com> Track new virtual registers by register number.

Track new virtual registers by register number, rather than by the live
interval created for them. This is the first step in separating the
creation of new virtual registers and new live intervals. Eventually
live intervals will be created and populated on demand after the virtual
registers have been created and used in instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188434 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
202eb7b18e220205ec86a03ddf18f2066c70ab15 06-Jul-2013 Jakob Stoklund Olesen <stoklund@2pi.dk> Use modern API to avoid exposing LiveInterval internals.

No functional change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185733 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
ff197dfcf9ac50a62d21e0c30644e09ca3bb92f5 21-Jun-2013 Andrew Trick <atrick@apple.com> Fix a -join-globalcopies bug; handle undef operands.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184569 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
0db6df0d963a8eee763fd878a72c3153501491c0 21-Jun-2013 Andrew Trick <atrick@apple.com> Modify the -join-globalcopies option (off by default).

Always coalesce in forward order to propagate rematerialization.
I'm fixing this option so I can enable it by default soon.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184568 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
b5f906b98fe5c05c491c6cf2ec30fcf206b60b27 21-Jun-2013 Andrew Trick <atrick@apple.com> Make rematerialization in the coalescer less sensitive to LRG order.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184567 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
89dbe9744255864445b1c9f9a613ae333d3f79c8 14-Jun-2013 Tim Northover <tnorthover@apple.com> Mark rematerialized super/sub registers as dead.

When we're rematerializing into a not-quite-right register we already add the
real definition as an imp-def, but we should also be marking the "official"
register as dead, since nothing else is going to use it as a result of this
remat.

Not doing this can affect pressure tracking.

rdar://problem/14158833

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184002 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
d01fb9e212d989ff14e84a332c5b18f8a23d4b35 30-May-2013 Tim Northover <tnorthover@apple.com> Fix rematerialization into physical registers.

r182872 introduced a bug in how the register-coalescer's rematerialization
handled defining a physical register. It relied on the output of the
coalescer's setRegisters method to determine whether the replacement
instruction needed an implicit-def. However, this value isn't necessarily the
same as the CopyMI's actual destination register which is what the rest of the
basic-block expects us to be defining.

The commit changes the rematerializer to use the actual register attached to
CopyMI in its decision.

This will be tested soon by an X86 patch which moves everything to using
MOV32r0 instead of other sizes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182925 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
aae0fa998af0f65221d7b98630162be6d88f05dc 29-May-2013 Tim Northover <tnorthover@apple.com> Teach ReMaterialization to be more cunning about subregisters

This allows rematerialization during register coalescing to handle
more cases involving operations like SUBREG_TO_REG which might need to
be rematerialized using sub-register indices.

For example, code like:
v1(GPR64):sub_32 = MOVZ something
v2(GPR64) = COPY v1(GPR64)
should be convertable to:
v2(GPR64):sub_32 = MOVZ something

but previously we just gave up in places like this

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182872 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
69d37fa6351d5fe2a97ea24a2d0d667a92f14a9c 05-Mar-2013 Bill Wendling <isanbard@gmail.com> Remove unused #includes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176467 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
1f258a6d53b29f6dfb60436da4aa76e996644d84 14-Feb-2013 Cameron Zwarich <zwarich@apple.com> RegisterCoalescer::reMaterializeTrivialDef() can constrain the destination
register class to match the defining instruction.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175130 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
1d4673228143965fafbcb679417f5a9be53d0a2a 14-Feb-2013 Cameron Zwarich <zwarich@apple.com> Fix RegisterCoalescer::rematerializeTrivialDef() so that it works on flipped
CoalescerPairs. Also, make it take a CoalescerPair directly like other methods
of RegisterCoalescer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175123 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
c5f147459b1704e25df4ff888729dd5d22d73381 14-Feb-2013 Cameron Zwarich <zwarich@apple.com> Fix some issues with rematerialization in RegisterCoalescer when the destination
of the copy is a subregister def. The current code assumes that it can do a full
def of the destination register, but it is not checking that the def operand is
read-undef. It also doesn't clear the subregister index of the destination in
the new instruction to reflect the full subregister def.

These issues were found running 'make check' with my next commit that enables
rematerialization in more cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175122 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
4be3853fd0a0e3b37a27afe05327e638e680c463 13-Feb-2013 Manman Ren <mren@apple.com> Debug Info: LiveDebugVarible can remove DBG_VALUEs, make sure we emit them back.

RegisterCoalescer used to depend on LiveDebugVariable. LDV removes DBG_VALUEs
without emitting them at the end.

We fix this by removing LDV from RegisterCoalescer. Also add an assertion to
make sure we call emitDebugValues if DBG_VALUEs are removed at
runOnMachineFunction.

rdar://problem/13183203
Reviewed by Andy & Jakob


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175023 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
251ed7f3e59a857dd92bda1ba4f9305f33deb67b 03-Jan-2013 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix PR14732 by handling all kinds of IMPLICIT_DEF live ranges.

Most IMPLICIT_DEF instructions are removed by the ProcessImplicitDefs
pass, and a few are reinserted by PHIElimination when a PHI argument is
<undef>.

RegisterCoalescer was assuming that all IMPLICIT_DEF live ranges look
like those created by PHIElimination, and that their live range never
leaves the basic block.

The PR14732 test case does tricks with PHI nodes that causes a longer
IMPLICIT_DEF live range to appear. This happens very rarely, but
RegisterCoalescer should be able to handle it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171435 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
0b8c9a80f20772c3793201ab5b251d3520b9cea3 02-Jan-2013 Chandler Carruth <chandlerc@gmail.com> Move all of the header files which are involved in modelling the LLVM IR
into their new header subdirectory: include/llvm/IR. This matches the
directory structure of lib, and begins to correct a long standing point
of file layout clutter in LLVM.

There are still more header files to move here, but I wanted to handle
them in separate commits to make tracking what files make sense at each
layer easier.

The only really questionable files here are the target intrinsic
tablegen files. But that's a battle I'd rather not fight today.

I've updated both CMake and Makefile build systems (I think, and my
tests think, but I may have missed something).

I've also re-sorted the includes throughout the project. I'll be
committing updates to Clang, DragonEgg, and Polly momentarily.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171366 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
d04a8d4b33ff316ca4cf961e06c9e312eff8e64f 03-Dec-2012 Chandler Carruth <chandlerc@gmail.com> Use the new script to sort the includes of every file under lib.

Sooooo many of these had incorrect or strange main module includes.
I have manually inspected all of these, and fixed the main module
include to be the nearest plausible thing I could find. If you own or
care about any of these source files, I encourage you to take some time
and check that these edits were sensible. I can't have broken anything
(I strictly added headers, and reordered them, never removed), but they
may not be the headers you'd really like to identify as containing the
API being implemented.

Many forward declarations and missing includes were added to a header
files to allow them to parse cleanly when included first. The main
module rule does in fact have its merits. =]

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169131 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
89bea17af235ea3a69485e73e54e71053c1bd936 29-Nov-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Avoid rewriting instructions twice.

This could cause miscompilations in targets where sub-register
composition is not always idempotent (ARM).

<rdar://problem/12758887>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168837 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
1ead68d769f27f6d68d4aaeffe4199fa2cacbc95 28-Nov-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Make the LiveRegMatrix analysis available to targets.

No functional change, just moved header files.

Targets can inject custom passes between register allocation and
rewriting. This makes it possible to tweak the register allocation
before rewriting, using the full global interference checking available
from LiveRegMatrix.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168806 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
9e3c3886d0b42b80f9eb38067fa85d96c75a4ec5 27-Nov-2012 Jakub Staszak <kubastaszak@gmail.com> Remove duplicated #includes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168712 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
cdf493dd0b74fa8a784bd1ea690351e0f4b608ad 16-Nov-2012 Andrew Trick <atrick@apple.com> Use array_pod_sort instead of std::sort.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168203 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
c6d6aeb95feca2efc6ee652555dbb29f0a3d41c8 15-Nov-2012 Andrew Trick <atrick@apple.com> Fix an obvious merge bug in -join-globalcopies (disabled).

Jakub Staszak spotted this in review. I don't notice these things
until I manually rerun benchmarks. But reducing unit tests is a very
high priority.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168021 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
8762a6bc2b83dfc11e784772311ad0b8fa5211e2 14-Nov-2012 Jakub Staszak <kubastaszak@gmail.com> Use reserve() to avoid vector reallocation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167991 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
39c71da6db9f52cf48430282a27384563a77793e 14-Nov-2012 Jakub Staszak <kubastaszak@gmail.com> canJoinPhys method doesn't modify CoalescerPair. Make it const.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167972 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
a6aae0273af9963eaf58aa548f7a918f100e67c7 13-Nov-2012 Andrew Trick <atrick@apple.com> Revert -join-splitedges to a boolean cmd line option.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167880 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
3106aa125eb2756083e950362b6769b87cb3430a 13-Nov-2012 Andrew Trick <atrick@apple.com> The MachineScheduler does not currently require JoinSplitEdges.

This option will eventually either be enabled unconditionally or
replaced by a more general live range splitting optimization.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167879 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
2344abc939b29ab80bbd247995a0ceb2efa5938b 13-Nov-2012 Andrew Trick <atrick@apple.com> Fix -join-splitedges: my previous "cleanup" broke it.

Working on reducing unit tests.
This won't be enabled unless a subtarget enables misched.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167851 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
ad1cc1d1bfc0accd3f1af5c02ac367ff46a4bfdf 13-Nov-2012 Andrew Trick <atrick@apple.com> misched: Allow subtargets to enable misched and dependent options.

This allows me to begin enabling (or backing out) misched by default
for one subtarget at a time. To run misched we typically want to:
- Disable SelectionDAG scheduling (use the source order scheduler)
- Enable more aggressive coalescing (until we decide to always run the coalescer this way)
- Enable MachineScheduler pass itself.

Disabling PostRA sched may follow for some subtargets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167826 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
265058d9239e6867d06dc8aa40db5f33390abd17 13-Nov-2012 Andrew Trick <atrick@apple.com> Added RegisterCoalescer support for joining global copies first.

This adds the -join-globalcopies option which can be enabled by
default once misched is also enabled.

Ideally, the register coalescer would be able to split local live
ranges in a way that produces copies that can be easily resolved by
the scheduler. Until then, this heuristic should be good enough to at
least allow the scheduler to run after coalescing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167825 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
f546ac5f9bdedc7d1ae49238c65a93201d0e4f05 13-Nov-2012 Andrew Trick <atrick@apple.com> Cleanup the main RegisterCoalescer loop.

Block priorities still apply outside loops.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167793 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
43736c7cfaea3b0c3e2660b9cd5c01e306f7c0df 13-Nov-2012 Andrew Trick <atrick@apple.com> Cleanup -join-splitedges. Make the loop more obvious.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167785 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
3c9e55867e2c8ae7a9e528bce865ebfa963f30a9 12-Nov-2012 Andrew Trick <atrick@apple.com> Added a temporary option to avoid critical edges splitting.

This teaches the register coalescer to be less prone to split critical
edges. I am currently benchmarking this with the new (post-coalescer)
scheduler. I plan to enable this by default and remove the option as
soon as misched is enabled.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167758 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
21caa9ef03e3f2d4e860c8fc3cd53015c42934bf 01-Nov-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Exploit the new identity composition in composeSubRegIndices().

The static compose() function in RegisterCoalescer was doing the exact
same thing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167198 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
573303e62a913ec881fde3434d7babed0bd4da33 29-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Completely disallow partial copies in adjustCopiesBackFrom().

Partial copies can show up even when CoalescerPair.isPartial() returns
false. For example:

%vreg24:dsub_0<def> = COPY %vreg31:dsub_0; QPR:%vreg24,%vreg31

Such a partial-partial copy is not good enough for the transformation
adjustCopiesBackFrom() needs to do.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166944 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
163f67f4d98aab114cb9b04efd086f54f7688d0c 27-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Never attempt to join an early-clobber def with a regular kill.

This fixes PR14194.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166880 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
56acf63e35440068935bca999d19a81f76e876d6 21-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Don't crash when the Assignments vector is empty.

Reported by Vincent Lejeune using an out-of-tree target.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166398 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
cdcdfd2cab67366b1debbe36bf46c29f7fecda67 17-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Revert r166046 "Switch back to the old coalescer for now to fix the 32 bit bit"

A fix for PR14098, including the test case is in the next commit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166067 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
6f7cccd2e28bf544609ee8fdbfac4a24e9f37ff6 16-Oct-2012 Rafael Espindola <rafael.espindola@gmail.com> Switch back to the old coalescer for now to fix the 32 bit bit
llvm+clang+compiler-rt bootstrap.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166046 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
14d1dd95c7c969e07defebb6fe65df2fae1b30cf 16-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove RegisterClassInfo::isReserved() and isAllocatable().

Clients can use the equivalent functions in MRI.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165990 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
d86296a4aea7ebac9c8ef8ba92642b64545dec95 13-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Drop <def,dead> flags when merging into an unused lane.

The new coalescer can merge a dead def into an unused lane of an
otherwise live vector register.

Clear the <dead> flag when that happens since the flag refers to the
full virtual register which is still live after the partial dead def.

This fixes PR14079.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165877 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
795f951c6d5c60a10ffc8e0fdfa22b7c3b499f35 12-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix coalescing with IMPLICIT_DEF values.

PHIElimination inserts IMPLICIT_DEF instructions to guarantee that all
PHI predecessors have a live-out value. These IMPLICIT_DEF values are
not considered to be real interference when coalescing virtual
registers:

%vreg1 = IMPLICIT_DEF
%vreg2 = MOV32r0

When joining %vreg1 and %vreg2, the IMPLICIT_DEF instruction and its
value number should simply be erased since the %vreg2 value number now
provides a live-out value for the PHI predecesor block.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165813 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
6c0c6d613ac3223fdf515c1616331bdeb2a4f1a4 03-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove the old coalescer algorithm.

The new algorithm has been enabled by default for almost a week now and
seems to be stable.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165062 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
27cb347d0e765175efb2c4d388bcbba84cf1b95e 02-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Make sure the whole live range is covered when values are pruned twice.

JoinVals::pruneValues() calls LIS->pruneValue() to avoid conflicts when
overlapping two different values. This produces a set of live range end
points that are used to reconstruct the live range (with SSA update)
after joining the two registers.

When a value is pruned twice, the set of end points was insufficient:

v1 = DEF
v1 = REPLACE1
v1 = REPLACE2
KILL v1

The end point at KILL would only reconstruct the live range from
REPLACE2 to KILL, leaving the range REPLACE1-REPLACE2 dead.

Add REPLACE2 as an end point in this case so the full live range is
reconstructed.

This fixes PR13999.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165056 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
83ef63efced9a957fe370134314645d2188c7203 28-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove <def,read-undef> flags from partial redefinitions.

The new coalescer can turn a full virtual register definition into a
partial redef by merging another value into an unused vector lane.

Make sure to clear the <read-undef> flag on such defs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164807 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
5cf178f281b5bc52b61d4288a309a7d35ec3cc06 27-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Enable the new coalescer algorithm by default.

The new coalescer is better at merging values into unused vector lanes,
improving NEON code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164794 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e6e2d8cd90ceb5190aa646dc06584027f7d492d0 21-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Ignore PHI-defs for -new-coalescer interference checks.

A PHI can't create interference on its own. If two live ranges interfere
at a PHI, they must also interfere when leaving one of the PHI
predecessors.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164330 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
2df8ac84ae8317b6a96f19bbc984d2bd02cff087 21-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Extend -new-coalescer SSA update to handle mapped values as well.

The old-fashioned many-to-one value mapping doesn't always work when
merging vector lanes. A value can map to multiple different values, and
it can even be necessary to insert new PHIs.

When a value number is defined by a copy from a value number that
required SSa update, include the live range of the copied value number
in the SSA update as well. It is not necessarily a copy of the original
value number any longer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164329 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
d40d4c34f72d1eda3cd9ba0f3dbf2d43b726f06c 19-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Resolve conflicts involving dead vector lanes for -new-coalescer.

A common coalescing conflict in vector code is lane insertion:

%dst = FOO
%src = BAR
%dst:ssub0 = COPY %src

The live range of %src interferes with the ssub0 lane of %dst, but that
lane is never read after %src would have clobbered it. That makes it
safe to merge the live ranges and eliminate the COPY:

%dst = FOO
%dst:ssub0 = BAR

This patch teaches the new coalescer to resolve conflicts where dead
vector lanes would be clobbered, at least as long as the clobbered
vector lanes don't escape the basic block.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164250 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
87f7864c6d81ae134335b8271ac12c937c81dffc 18-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Merge into undefined lanes under -new-coalescer.

Add LIS::pruneValue() and extendToIndices(). These two functions are
used by the register coalescer when merging two live ranges requires
more than a trivial value mapping as supported by LiveInterval::join().

The pruneValue() function can remove the part of a value number that is
going to conflict in join(). Afterwards, extendToIndices can restore the
live range, using any new dominating value numbers and updating the SSA
form.

Use this complex value mapping to support merging a register into a
vector lane that has a conflicting value, but the clobbered lane is
undef.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164074 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
c722ae7a2b470e544ce570692ef3b109449d69ec 16-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Add alternative coalescing algorithm under a flag.

The live range of an SSA value forms a sub-tree of the dominator tree.
That means the live ranges of two values overlap if and only if the def
of one value lies within the live range of the other.

This can be used to simplify the interference checking a bit: Visit each
def in the two registers about to be joined. Check for interference
against the value that is live in the other register at the def point
only. It is not necessary to scan the set of overlapping live ranges,
this interference check can be done while computing the value mapping
required for the final live range join.

The new algorithm is prepared to handle more complicated conflict
resolution - We can allow overlapping live ranges with different values
as long as the differing lanes are undef or unused in the other
register.

The implementation in this patch doesn't do that yet, it creates code
that is nearly identical to the old algorithm's, except:

- The new stripCopies() function sees through multiple copies while
the old RegistersDefinedFromSameValue() only can handle one.

- There are a few rare cases where the new algorithm can erase an
IMPLICIT_DEF instuction that RegistersDefinedFromSameValue() couldn't
handle.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163991 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
ab9baf7ff4b58b3905bccad68c8d2ab59ea4202b 15-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Don't depend on kill flags in removeCopyByCommutingDef().

Kill flags are removed more and more aggressively during the register
allocation passes, it is better to get information from LiveIntervals.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163972 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
986d76d7b3844b9a2f3d01a48975952749267a93 22-Aug-2012 David Blaikie <dblaikie@gmail.com> Tidy up a few more uses of MF.getFunction()->getName().

Based on CR feedback from r162301 and Craig Topper's refactoring in r162347
here are a few other places that could use the same API (& in one instance drop
a Function.h dependency).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162367 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
96601ca332ab388754ca4673be8973396fea2ddd 22-Aug-2012 Craig Topper <craig.topper@gmail.com> Add a getName function to MachineFunction. Use it in places that previously did getFunction()->getName(). Remove includes of Function.h that are no longer needed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162347 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e744ac49f4cf878e2b34dba26964f04fb0415fa3 04-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Delete merged physreg copies in joinReservedPhysReg().

Previously, the identity copy would survive through register allocation
before it was removed by the rewriter.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161269 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
0ab7103e06ee1da7bde5b196a68be77ab49a005d 03-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Make the hasPHIKills flag a computed property.

The VNInfo::HAS_PHI_KILL is only half supported. We precompute it in
LiveIntervalAnalysis, but it isn't properly updated by live range
splitting and functions like shrinkToUses().

It is only used in one place: RegisterCoalescer::removeCopyByCommutingDef().

This patch changes that function to use a new LiveIntervals::hasPHIKill()
function that computes the flag for a given value number.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161254 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
34af6f597b09c13fba7d3a1960c0810cfc30beff 31-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Clear kill flags in removeCopyByCommutingDef().

We are extending live ranges, so kill flags are not accurate. They
aren't needed until they are recomputed after RA anyway.

<rdar://problem/11950722>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161023 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
9c3d5a70f40f9e7bb90f3cb8ec1d87cff6e3f0ae 01-Jul-2012 Rafael Espindola <rafael.espindola@gmail.com> Now that RegistersDefinedFromSameValue handles one instruction being an
implicit_def, the other instruction can be anything, including instructions
that define multiple values. Be careful about that and don't assume what operand
0 is.
Fixes pr13249.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159509 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
682e8d05c7def2b82edc354abf1d38df607d39c8 30-Jun-2012 Rafael Espindola <rafael.espindola@gmail.com> Handle implicit_defs in the register coalescer. I am still trying to produce
a reduced testcase, but this fixes pr13209.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159479 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
04ce06dc4c9dff4ff7a8b97079e3cbb7b60da3ab 22-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix a crash in --debug code.

Don't try to print out the live range of a physreg.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159021 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e6d21144054c7b7e0445307f58f703b08d189d75 22-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove some redundant LIS->hasInterval() checks.

These functions only operate on virtual registers now, and they all have
live ranges.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159015 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
241d0209a765c97c684b120527e185f17723f650 22-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove LiveIntervals::trackingRegUnits().

With regunit liveness permanently enabled, this function would always
return true.

Also remove now obsolete code for checking physreg interference.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159006 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
71b49cb5c73ba912f2fab30f35ed1e43c35a2139 21-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Update regunits in RegisterCoalescer::reMaterializeTrivialDef.

Old code would only update physreg live intervals.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158881 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
324143d888a83511b6e022b4c541b18cc7773886 15-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Use regunit liveness in RegisterCoalescer when it is available.

We only do very limited physreg coalescing now, but we still merge
virtual registers into reserved registers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158526 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
1525260b3e50cc578939ef41b60609689eecfdd2 06-Jun-2012 Andrew Trick <atrick@apple.com> Move RegisterClassInfo.h.

Allow targets to access this API. It's required for RegisterPressure.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158102 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
a7542d5f870c5d98960d1676e23ac1d1d975d7e5 06-Jun-2012 Benjamin Kramer <benny.kra@googlemail.com> Remove unused private fields found by clang's new -Wunused-private-field.

There are some that I didn't remove this round because they looked like
obvious stubs. There are dead variables in gtest too, they should be
fixed upstream.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158090 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
396618b43a85e12d290a90b181c6af5d7c0c5f11 02-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Switch all register list clients to the new MC*Iterator interface.

No functional change intended.

Sorry for the churn. The iterator classes are supposed to help avoid
giant commits like this one in the future. The TableGen-produced
register lists are getting quite large, and it may be necessary to
change the table representation.

This makes it possible to do so without changing all clients (again).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157854 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
0984461dfb329c8e43ca70e264f56cd39bbae573 02-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove physreg support from adjustCopiesBackFrom and removeCopyByCommutingDef.

After physreg coalescing was disabled, these functions can't do anything
useful with physregs anyway.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157849 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e3b548219ff47b1384aa7325ebbe21c795c19974 23-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Correctly deal with identity copies in RegisterCoalescer.

Now that the coalescer keeps live intervals and machine code in sync at
all times, it needs to deal with identity copies differently.

When merging two virtual registers, all identity copies are removed
right away. This means that other identity copies must come from
somewhere else, and they are going to have a value number.

Deal with such copies by merging the value numbers before erasing the
copy instruction. Otherwise, we leave dangling value numbers in the live
interval.

This fixes PR12927.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157340 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
857ed2260403f2cbfe702e83da283b78e341707e 20-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Clear kill flags on the fly when joining intervals.

With physreg joining out of the way, it is easy to recognize the
instructions that need their kill flags cleared while testing for
interference.

This allows us to skip the final scan of all instructions for an 11%
speedup of the coalescer pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157169 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
4991de8fe1e72230cf714378b96411f1b59f6b77 20-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Missed a push_back in r157147.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157148 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
f0bf8b401827b58ec171c9d994c46d7f810a3e17 20-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Avoid deleting extra copies when RegistersDefinedFromSameValue is true.

This function adds copies to be erased to DupCopies, avoid also adding
them to DeadCopies.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157147 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
067fcb4087a2c816f6536907b9918165e5b00b33 20-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix build bots.

Avoid looking at the operands of a potentially erased instruction.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157146 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e1b93d2e86a3396b1b1d3d761f0335b17c5f54b8 20-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Eliminate some uses of struct LiveRange.

That struct ought to be a LiveInterval implementation detail.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157143 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
a991ea5f7f2df661dc1ad7bd230d3a401dfb6411 20-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Simplify overlap check.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157137 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
7ebed91fddbcd259d03c4b438719ac1ce2a4fc87 20-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix 12892.

Dead code elimination during coalescing could cause a virtual register
to be split into connected components. The following rewriting would be
confused about the already joined copies present in the code, but
without a corresponding value number in the live range.

Erase all joined copies instantly when joining intervals such that the
MI and LiveInterval representations are always in sync.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157135 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
ec096b492549d625e4be608fcaea265b96dabc03 19-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove the late DCE in RegisterCoalescer.

Dead code and joined copies are now eliminated on the fly, and there is
no need for a post pass.

This makes the coalescer work like other modern register allocator
passes: Code is changed on the fly, there is no pending list of changes
to be committed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157132 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
ccce1233a27e9527cfb68cbced311351332a3a4e 19-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Erase joined copies immediately.

The late dead code elimination is no longer necessary.

The test changes are cause by a register hint that can be either %rdi or
%rax. The choice depends on the use list order, which this patch changes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157131 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
56366601765c1ff43f8796c271a818f8c272af27 19-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix an ancient bug in removeCopyByCommutingDef().

Before rewriting uses of one value in A to register B, check that there
are no tied uses. That would require multiple A values to be rewritten.

This bug can't bite in the current version of the code for a fairly
subtle reason: A tied use would have caused 2-addr to insert a copy
before the use. If the copy has been coalesced, it will be found by the
same loop changed by this patch, and the optimization is aborted.

This was exposed by 400.perlbench and lua after applying a patch that
deletes joined copies aggressively.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157130 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
03c8383324da4fe42fae4e5685072a782935644d 19-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Collect inflatable virtual registers on the fly.

There is no reason to defer the collection of virtual registers whose
register class may be replaced with a larger class.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157125 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
1dc6d7cbb5affee14a2fc5e7269616f3b7b4b6fa 19-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Eliminate dead code after remat.

This will remove the original def once it has no more uses.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157104 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
67ccb29cec06c85210f334cfbdae144460170cd3 19-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Don't remat during updateRegDefsUses().

Remaining virtreg->physreg copies were rematerialized during
updateRegDefsUses(), but we already do the same thing in joinCopy() when
visiting the physreg copy instruction.

Eliminate the preserveSrcInt argument to reMaterializeTrivialDef(). It
is now always true.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157103 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
3662f0d492533435c30969118fd025f6bed46654 19-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Immediately erase trivially useless copies.

There is no need for these instructions to stick around since they are
known to be not dead.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157102 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
bd6f44a3a2a1404721bcbb67edf92b8480a3e655 19-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Run proper recursive dead code elimination during coalescing.

Dead copies cause problems because they are trivial to coalesce, but
removing them gived the live range a dangling end point. This patch
enables full dead code elimination which trims live ranges to their uses
so end points don't dangle.

DCE may erase multiple instructions. Put the pointers in an ErasedInstrs
set so we never risk visiting erased instructions in the work list.

There isn't supposed to be any dead copies entering RegisterCoalescer,
but they do slip by as evidenced by test/CodeGen/X86/coalescer-dce.ll.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157101 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
b3776d33cfaba3fc48acccf166d2bd4871ee51c7 18-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Move all work list processing to copyCoalesceWorkList().

This will make it possible to filter out erased instructions later.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157073 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
846b183a9ed2999d3f35c7c6b54a5796c0660b9e 18-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Simplify RegisterCoalescer::copyCoalesceInMBB().

It is no longer necessary to separate VirtCopies, PhysCopies, and
ImpDefCopies. Implicitly defined copies are extremely rare after we
added the ProcessImplicitDefs pass, and physical register copies are not
joined any longer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157059 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
34a18775a402f269425b5d79efe385fe122cc64d 18-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove support for PhysReg joining.

This has been disabled for a while, and it is not a feature we want to
support. Copies between physical and virtual registers are eliminated by
good hinting support in the register allocator. Joining virtual and
physical registers is really a form of register allocation, and the
coalescer is not properly equipped to do that. In particular, it cannot
backtrack coalescing decisions, and sometimes that would cause it to
create programs that were impossible to register allocate, by exhausting
a small register class.

It was also very difficult to keep track of the live ranges of aliasing
registers when extending the live range of a physreg. By disabling
physreg joining, we can let fixed physreg live ranges remain constant
throughout the register allocator super-pass.

One type of physreg joining remains: A virtual register that has a
single value which is a copy of a reserved register can be merged into
the reserved physreg. This always lowers register pressure, and since we
don't compute live ranges for reserved registers, there are no problems
with aliases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157055 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
94e58f3a7c50e14819d411db3b6df10bbd35cb5e 17-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Never clear <undef> flags on already joined copies.

RegisterCoalescer set <undef> flags on all operands of copy instructions
that are scheduled to be removed. This is so they won't affect
shrinkToUses() by introducing false register reads.

Make sure those <undef> flags are never cleared, or shrinkToUses() could
cause live intervals to end at instructions about to be deleted.

This would be a lot simpler if RegisterCoalescer could just erase joined
copies immediately instead of keeping all the to-be-deleted instructions
around.

This fixes PR12862. Unfortunately, bugpoint can't create a sane test
case for this. Like many other coalescer problems, this failure depends
of a very fragile series of events.

<rdar://problem/11474428>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157001 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
07a267faec7bd77fdece44f242cb4270120e0ef2 16-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Set sub-register <undef> flags more accurately.

When widening an existing <def,reads-undef> operand to a super-register,
it may be necessary to clear the <undef> flag because the wider register
is now read-modify-write through the instruction.

Conversely, it may be necessary to add an <undef> flag when the
coalescer turns a full-register def into a sub-register def, but the
larger register wasn't live before the instruction.

This happens in test/CodeGen/ARM/coalesce-subregs.ll, but the test
is too small for the <undef> flags to affect the generated code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156951 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
83b3a293349919d18bc05d87bc03156ef6637370 16-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Enable sub-sub-register copy coalescing.

It is now possible to coalesce weird skewed sub-register copies by
picking a super-register class larger than both original registers. The
included test case produces code like this:

vld2.32 {d16, d17, d18, d19}, [r0]!
vst2.32 {d18, d19, d20, d21}, [r0]

We still perform interference checking as if it were a normal full copy
join, so this is still quite conservative. In particular, the f1 and f2
functions in the included test case still have remaining copies because
of false interference.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156878 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
ceacd6da8c31106333952f6dc4fd6e6aa98312f1 16-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Teach RegisterCoalescer to handle symmetric sub-register copies.

It is possible to coalesce two overlapping registers to a common
super-register that it larger than both of the original registers.

The important difference is that it may be necessary to rewrite DstReg
operands as well as SrcReg operands because the sub-register index has
changed.

This behavior is still disabled by CoalescerPair.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156869 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
141aea9cff95b8df8ca89fb757dc44ee37a3d8df 16-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> We never call adjustCopiesBackFrom() for partial copies.

There is no need to look at an always null SrcIdx.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156866 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
94b62ac5f3b2732251f164ee6feab2dd1a4b967f 15-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Extend the CoalescerPair interface to handle symmetric sub-register copies.

Now both SrcReg and DstReg can be sub-registers of the final coalesced
register.

CoalescerPair::setRegisters still rejects such copies because
RegisterCoalescer doesn't yet handle them.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156848 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
92ff7cae7c5a6ce236549516119a9e0b2e71fda0 08-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Extract methods for joining physregs.

No functional change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156345 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
9790266eeae86b2d763d0760f239ab90bc1de84a 08-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Naming convention and whitespace. No functional change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156342 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
defa0afa146f4c2370fe126b7860d6d57cf20909 08-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Coalesce subreg-subreg copies.

At least some of them:

%vreg1:sub_16bit = COPY %vreg2:sub_16bit; GR64:%vreg1, GR32: %vreg2

Previously, we couldn't figure out that the above copy could be
eliminated by coalescing %vreg2 with %vreg1:sub_32bit.

The new getCommonSuperRegClass() hook makes it possible.

This is not very useful yet since the unmodified part of the destination
register usually interferes with the source register. The coalescer
needs to understand sub-register interference checking first.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156334 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
397fc4874efe9c17e737d4c5c50bd19dc3bf27f5 08-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Add an MF argument to TRI::getPointerRegClass() and TII::getRegClass().

The getPointerRegClass() hook can return register classes that depend on
the calling convention of the current function (ptr_rc_tailcall).

So far, we have been able to infer the calling convention from the
subtarget alone, but as we add support for multiple calling conventions
per target, that no longer works.

Patch by Yiannis Tsiouris!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156328 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
40a2b653e165b5afc2f612b4b3edbb54a7b5eb59 25-Apr-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove the -disable-cross-class-join option.

Cross-class joins have been normal and fully supported for a while now.
With TableGen generating the getMatchingSuperRegClass() hook, they are
unlikely to cause problems again.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155552 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
a2404e3458ca7d570802ca296240733f2aa41098 25-Apr-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Cross-class joining is winning.

Remove the heuristic for disabling cross-class joins. The greedy
register allocator can handle the narrow register classes, and when it
splits a live range, it can pick a larger register class.

Benchmarks were unaffected by this change.

<rdar://problem/11302212>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155551 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
9ebfbf8b9fd5f982e0db9293808bd32168615ba9 05-Mar-2012 Craig Topper <craig.topper@gmail.com> Convert more GenRegisterInfo tables from unsigned to uint16_t to reduce static data size.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152016 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
8d9c3a4ee739d0cb508e7a982bfbb1fb52cb0ec4 04-Mar-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Stop adding <imp-def> operands when coalescing sub-registers.

We are already setting <undef> flags, and that is good enough. The
<imp-def> operands don't mean anything any more.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152009 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e4fd907e72a599eddfa7a81eac4366b5b82523e3 04-Mar-2012 Craig Topper <craig.topper@gmail.com> Use uint16_t to store register overlaps to reduce static data.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152001 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
275ff9bb17698a5eee613c20eca31b4835ae60db 01-Mar-2012 Lang Hames <lhames@gmail.com> Don't redundantly copy implicit operands when rematerializing.

While we're at it - don't copy vreg implicit operands while rematerializing.
This fixes PR12138.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151779 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
3ed4dee530984b7087dd3bbf4cfd8a3f1947c8e0 13-Feb-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Check regmask interference for -join-physregs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150404 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
8dd26253f54247e77e5accfdd70e7b4bf27b39c2 10-Feb-2012 Andrew Trick <atrick@apple.com> RegAlloc superpass: includes phi elimination, coalescing, and scheduling.

Creates a configurable regalloc pipeline.

Ensure specific llc options do what they say and nothing more: -reglloc=... has no effect other than selecting the allocator pass itself. This patch introduces a new umbrella flag, "-optimize-regalloc", to enable/disable the optimizing regalloc "superpass". This allows for example testing coalscing and scheduling under -O0 or vice-versa.

When a CodeGen pass requires the MachineFunction to have a particular property, we need to explicitly define that property so it can be directly queried rather than naming a specific Pass. For example, to check for SSA, use MRI->isSSA, not addRequired<PHIElimination>.

CodeGen transformation passes are never "required" as an analysis

ProcessImplicitDefs does not require LiveVariables.

We have a plan to massively simplify some of the early passes within the regalloc superpass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150226 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
602cb9d9f2307913aa816abbe37fc158c79feb0a 06-Feb-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Make sure a reserved register has a live interval before merging.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149910 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
eec68e7ffa22d489562a58299cd2fc6f089b893b 02-Feb-2012 Lang Hames <lhames@gmail.com> Re-apply the coalescer fix from r149147. Commit r149597 should have fixed the llvm-gcc and clang self-host issues.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149598 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
1c1c5bba577c710bdea01d084418d62281481cad 28-Jan-2012 Lang Hames <lhames@gmail.com> Remove code that adds live ranges for dead defs. It seems to be breaking things.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149163 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
907cc8f38df212a87a6028682d91df01ba923f4f 27-Jan-2012 Lang Hames <lhames@gmail.com> Add a "moveInstr" method to LiveIntervals. This can be used to move instructions
around within a basic block while maintaining live-intervals.

Updated ScheduleTopDownLive in MachineScheduler.cpp to use the moveInstr API
when reordering MIs.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149147 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
ff21bb53ae9496b0e24d0ea0cb392fae1d49128b 27-Jan-2012 Lang Hames <lhames@gmail.com> Backing out ill-considered 'refactor'.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149146 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
c5c2fcd307695c40b00a64152d83c7af13c446c0 27-Jan-2012 Lang Hames <lhames@gmail.com> Move some duplicate loops in the coalescer into their own function.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149144 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
b3396dc0034db4520525e600565337f0929066b4 27-Jan-2012 Lang Hames <lhames@gmail.com> Physreg dead defs should be handled too.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149118 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
3b0714d993a37c722603f7cbfab71848a99e91cd 27-Jan-2012 Lang Hames <lhames@gmail.com> Rewrite instruction operands in AdjustCopiesBackFrom. Fixes PR11861.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149097 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e0bd8c3a2608f39f341eb3440df723dc48d435a5 23-Jan-2012 Lang Hames <lhames@gmail.com> copyImplicitOps is redundant here - the loop above already copies these ops.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148725 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e02a17c4efb843b8627f3d819c62f88a7f2fb457 17-Jan-2012 Lang Hames <lhames@gmail.com> Fix typo in comment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148268 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
34786a3ad760b9901912f70a8a17fd85e0643f21 07-Jan-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Optimize reserved register coalescing.

Reserved registers don't have proper live ranges, their LiveInterval
simply has a snippet of liveness for each def. Virtual registers with a
single value that is a copy of a reserved register (typically %esp) can
be coalesced with the reserved register if the live range doesn't
overlap any reserved register defs.

When coalescing with a reserved register, don't modify the reserved
register live range. Just leave it as a bunch of dead defs. This
eliminates quadratic coalescer behavior in i386 functions with many
function calls.

PR11699

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147726 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
4281e20aab7f1fe1b35b31c9237ad89c20937e02 07-Jan-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Use the 'regalloc' debug tag for most register allocator tracing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147725 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
8f391d9330e1a4ed66e72ceac28ed70814f05623 08-Dec-2011 Pete Cooper <peter_cooper@apple.com> Reverting r145899 as it breaks clang self-hosting

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146136 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
5a96b3dad2f634c9081c8b2b6c2575441dc5a2bd 07-Dec-2011 Evan Cheng <evan.cheng@apple.com> Add bundle aware API for querying instruction properties and switch the code
generator to it. For non-bundle instructions, these behave exactly the same
as the MC layer API.

For properties like mayLoad / mayStore, look into the bundle and if any of the
bundled instructions has the property it would return true.
For properties like isPredicable, only return true if *all* of the bundled
instructions have the property.
For properties like canFoldAsLoad, isCompare, conservatively return false for
bundles.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146026 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
7c2a4a30e0e16762c75adacebd05ec9fcbccf16b 06-Dec-2011 Evan Cheng <evan.cheng@apple.com> First chunk of MachineInstr bundle support.
1. Added opcode BUNDLE
2. Taught MachineInstr class to deal with bundled MIs
3. Changed MachineBasicBlock iterator to skip over bundled MIs; added an iterator to walk all the MIs
4. Taught MachineBasicBlock methods about bundled MIs


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145975 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
d3743fc092c5b547552857abd45e1863eecb0377 06-Dec-2011 Pete Cooper <peter_cooper@apple.com> Removed isWinToJoinCrossClass from the register coalescer.

The new register allocator is much more able to split back up ranges too constrained by register classes.

Fixes <rdar://problem/10466609>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145899 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
6e39290baf236020f130d8695f7624004706bb08 05-Oct-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove unused DstSubIdx argument.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141214 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
b077cf338bd85a6a7397ec88d65278f02f0ed06f 05-Oct-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Also add <def,undef> flags when coalescing sub-registers.

RegisterCoalescer can create sub-register defs when it is joining a
register with a sub-register. Add <undef> flags to these new
sub-register defs where appropriate.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141138 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e27e1ca3c90b69e78242c98a669337f84ccded7f 01-Oct-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Move getCommonSubClass() into TRI.

It will soon need the context.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140896 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
9b82d50d209adf915d3c7f871dc82cb73349db80 15-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Revert r139782, "RemoveCopyByCommutingDef doesn't need hasPHIKill()."

It does, after all.

RemoveCopyByCommutingDef rewrites the uses of one particular value
number in A. It doesn't know how to rewrite phi uses, so there can't be
any.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139787 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
de07abe35de24e551783ee20a4213729b3524baa 15-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> RemoveCopyByCommutingDef doesn't need hasPHIKill().

Instead, let HasOtherReachingDefs() test for defs in B that overlap any
phi-defs in A as well. This test is slightly different, but almost
identical.

A perfectly precise test would only check those phi-defs in A that are
reachable from AValNo.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139782 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
4ea24e993f179113a9bb76ee152cc490e738c936 15-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> It is safe to remat a value killed by phis.

The source live range is recomputed using shrinkToUses() which does
handle phis correctly. The hasPHIKill() condition was relevant in the
old days when ReMaterializeTrivialDef() tried to recompute the live
range itself.

The shrinkToUses() function will mark the original def as dead when no
more uses and phi kills remain. It is then removed by
runOnMachineFunction().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139781 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
8040e064346cc3b78dece7d8ac50593a1c834c46 02-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Simplify by using isFullCopy().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139019 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
4a74b3b933e2944ff313dc5d24da6f9e8ec4c1c4 09-Aug-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Inflate register classes after coalescing.

Coalescing can remove copy-like instructions with sub-register operands
that constrained the register class. Examples are:

x86: GR32_ABCD:sub_8bit_hi -> GR32
arm: DPR_VFP2:ssub0 -> DPR

Recompute the register class of any virtual registers that are used by
less instructions after coalescing.

This affects code generation for the Cortex-A8 where we use NEON
instructions for f32 operations, c.f. fp_convert.ll:

vadd.f32 d16, d1, d0
vcvt.s32.f32 d0, d16

The register allocator is now free to use d16 for the temporary, and
that comes first in the allocation order because it doesn't interfere
with any s-registers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137133 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
c19e6dd64fe4fa825c8d79e1d097e301c66eaf72 09-Aug-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Rename member variables to follow coding standards.

No functional change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137094 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
8e0cca6945ec09bad0decf34ecd832f7e84dc7f1 09-Aug-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Move the RegisterCoalescer private to its implementation file.

RegisterCoalescer.h still has the CoalescerPair class interface.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137088 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
27215676c7114132a0374f7b5c9ea73d9354d329 09-Aug-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Refer to the RegisterCoalescer pass by ID.

A public interface is no longer needed since RegisterCoalescer is not an
analysis any more.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137082 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e4709777e38b58b856cf8395e071a3326d50a402 27-Jul-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Eliminate copies of undefined values during coalescing.

These copies would coalesce easily, but the resulting value would be
defined by a deleted instruction. Now we also remove the undefined value
number from the destination register.

This fixes PR10503.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136174 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
65268575c419a890052a446d28329f9e81302a05 03-Jul-2011 Rafael Espindola <rafael.espindola@gmail.com> Fix an easy fixme.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134364 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
017205d3c12a1b6b04c63f402eed1023c4c83c3e 02-Jul-2011 Rafael Espindola <rafael.espindola@gmail.com> Use getVNInfoAt.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134312 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
a9badd250cac2e5090eb950bb0456c37ee6c8f7a 02-Jul-2011 Rafael Espindola <rafael.espindola@gmail.com> Check the VN of the src register at the two copies, not just the
register number.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134309 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
ed5bc470aab7097c30e5f881158112f7830472f3 01-Jul-2011 Duncan Sands <baldrick@free.fr> Disable commit 134216 ("Add 134199 back, but disable the optimization when the second
copy is a kill") to see if it fixes the i386 dragonegg buildbot, which is timing out
because gcc built with dragonegg is going into an infinite loop.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134237 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
8f1bdac3eba0e065c8ebe2a9c671e299c1fc6797 01-Jul-2011 Rafael Espindola <rafael.espindola@gmail.com> Avoid DenseMap lookup.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134231 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
fe11caaa73782e3182a4d4840ee00336dab9490a 01-Jul-2011 Rafael Espindola <rafael.espindola@gmail.com> Fix off by one error. I misunderstood the comment about killedAt.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134229 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
1c8b97cbc03e0e1966d244a27b55e74bde35671e 01-Jul-2011 Rafael Espindola <rafael.espindola@gmail.com> Check the liveinterval, not the kill flag.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134228 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
0c13e9471a4aa32207923d84c0990eeb9bb898ab 01-Jul-2011 Rafael Espindola <rafael.espindola@gmail.com> Add 134199 back, but disable the optimization when the second copy is a kill.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134216 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
15e96be3c70ab2e4a50c505c2b90e4ce1095dbd6 01-Jul-2011 Rafael Espindola <rafael.espindola@gmail.com> Revert my previous patch while I debug llvm-gcc bootstrap.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134201 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
c747acb8d97d4df51d738383b49b8115519b88fb 01-Jul-2011 Rafael Espindola <rafael.espindola@gmail.com> Don't give up on coalescing A and B when we find

A = X
B = X

Instead, proceed as if we had found

A = X
B = A

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134199 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
00258d17cd7152237141648d26e1b096cf0e882b 29-Jun-2011 Rafael Espindola <rafael.espindola@gmail.com> make compose and isMoveInstr static functions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134093 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e837dead3c8dc3445ef6a0e2322179c57e264a13 28-Jun-2011 Evan Cheng <evan.cheng@apple.com> - Rename TargetInstrDesc, TargetOperandInfo to MCInstrDesc and MCOperandInfo and
sink them into MC layer.
- Added MCInstrInfo, which captures the tablegen generated static data. Chang
TargetInstrInfo so it's based off MCInstrInfo.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134021 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
15993f83a419950f06d2879d6701530ae6449317 27-Jun-2011 Evan Cheng <evan.cheng@apple.com> More refactoring. Move getRegClass from TargetOperandInfo to TargetInstrInfo.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133944 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
5b220213bfe9c37c2bb41a7ae0804e06a14f1007 27-Jun-2011 Rafael Espindola <rafael.espindola@gmail.com> There is only one register coalescer. Merge it into the base class and
remove the analysis group.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133899 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
655739de7b09dcfecd9f3e5f1734e53ec90a19f3 27-Jun-2011 Rafael Espindola <rafael.espindola@gmail.com> Merge SimpleRegisterCoalescing.cpp into RegisterCoalescer.cpp.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133897 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
fdf16ca44f130afe80c57481d0c08130aa08cc09 26-Jun-2011 Rafael Espindola <rafael.espindola@gmail.com> Move RegisterCoalescer.h to lib/CodeGen.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133895 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
325e2643559fcec8b0396dfa16e415cc86a22a09 13-Oct-2010 Owen Anderson <resistor@mac.com> Analysis groups need to initialize their default implementations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116441 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
ce665bd2e2b581ab0858d1afe359192bac96b868 08-Oct-2010 Owen Anderson <resistor@mac.com> Now with fewer extraneous semicolons!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115996 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e9ef41a47d2ee637b6aed5d018c4d90019d987ac 06-Oct-2010 Owen Anderson <resistor@mac.com> Hide analysis group registration behind a macro, just like pass registration.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115835 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
04c528a0c86ddf3d6a70681f72e1b2ec07b0b53a 16-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove many calls to TII::isMoveInstr. Targets should be producing COPY anyway.

TII::isMoveInstr is going tobe completely removed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108507 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
0bc25f40402f48ba42fc45403f635b20d90fabb3 08-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Convert EXTRACT_SUBREG to COPY when emitting machine instrs.

EXTRACT_SUBREG no longer appears as a machine instruction. Use COPY instead.

Add isCopy() checks in many places using isMoveInstr() and isExtractSubreg().
The isMoveInstr hook will be removed later.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107879 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
5c00e077952d14899c3fc26709c7b2dfd36d0209 08-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove references to INSERT_SUBREG after de-SSA.

Fix X86InstrInfo::convertToThreeAddressWithLEA to generate COPY instead of
INSERT_SUBREG.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107878 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
4b76ffc1ffca2ed016467e916d5223515b485592 07-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Revert "Remove references to INSERT_SUBREG after de-SSA" r107725.

Buildbot breakage.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107744 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
d3b376b4483d816367dd28a41bcbccede1cdcbf0 07-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove references to INSERT_SUBREG after de-SSA

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107732 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
9c2e7ca3513bf41ad4dd9ff807e0d2742f592722 06-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Be more forgiving when calculating alias interference for physreg coalescing.

It is OK for an alias live range to overlap if there is a copy to or from the
physical register. CoalescerPair can work out if the copy is coalescable
independently of the alias.

This means that we can join with the actual destination interval instead of
using the getOrigDstReg() hack. It is no longer necessary to merge clobber
ranges into subregisters.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107695 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
273f7e42994a5bce0614d04d96dbfdf05fd652e5 03-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Detect and handle COPY in many places.

This code is transitional, it will soon be possible to eliminate
isExtractSubreg, isInsertSubreg, and isMoveInstr in most places.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107547 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
8df08017d81ef3749acdc3234e3f33c15a6d0def 24-Jun-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Be more strict about subreg-to-subreg copies in CoalescerPair.

Also keep track of the original DstREg before subregister adjustments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106753 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
b8ac3b035ba14663ebe57fde17f6a9f25134e005 24-Jun-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Revert "Replace a big gob of old coalescer logic with the new CoalescerPair class."

Whiny buildbots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106710 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
e9c59711d3d1e8b133763393bea92af6e36b0031 24-Jun-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Replace a big gob of old coalescer logic with the new CoalescerPair class.

CoalescerPair can determine if a copy can be coalesced, and which register gets
merged away. The old logic in SimpleRegisterCoalescing had evolved into
something a bit too convoluted.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106701 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
40d07bbebbe73914af28be1bdab169ce8333adca 15-Jun-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Add CoalescerPair helper class.

Given a copy instruction, CoalescerPair can determine which registers to
coalesce in order to eliminate the copy. It deals with all the subreg fun to
determine a tuple (DstReg, SrcReg, SubIdx) such that:

- SrcReg is a virtual register that will disappear after coalescing.
- DstReg is a virtual or physical register whose live range will be extended.
- SubIdx is 0 when DstReg is a physical register.
- SrcReg can be joined with DstReg:SubIdx.

CoalescerPair::isCoalescable() determines if another copy instruction is
compatible with the same tuple. This fixes some NEON miscompilations where
shuffles are getting coalesced as if they were copies.

The CoalescerPair class will replace a lot of the spaghetti logic in JoinCopy
later.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105997 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
844731a7f1909f55935e3514c9e713a62d67662e 13-May-2008 Dan Gohman <gohman@apple.com> Clean up the use of static and anonymous namespaces. This turned up
several things that were neither in an anonymous namespace nor static
but not intended to be global.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51017 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
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/lib/CodeGen/RegisterCoalescer.cpp
4ee451de366474b9c228b4e5fa573795a715216d 29-Dec-2007 Chris Lattner <sabre@nondot.org> Remove attribution from file headers, per discussion on llvmdev.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45418 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp
2c17c4d8d9f232f0329786ad9abee976bc0f3d27 06-Sep-2007 David Greene <greened@obbligato.org> Pluggable coalescers inplementation.





git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41743 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegisterCoalescer.cpp