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
|