#
4584cd54 |
| 07-Mar-2014 |
Craig Topper <craig.topper@gmail.com> |
[C++11] Add 'override' keyword to virtual methods that override their base class.
llvm-svn: 203220
|
#
d787d3e5 |
| 22-Jan-2014 |
James Molloy <james.molloy@arm.com> |
MachineCopyPropagation has special logic for removing COPY instructions. It will remove plain COPYs using eraseFromParent(), but if the COPY has imp-defs/imp-uses it will convert it to a KILL, to kee
MachineCopyPropagation has special logic for removing COPY instructions. It will remove plain COPYs using eraseFromParent(), but if the COPY has imp-defs/imp-uses it will convert it to a KILL, to keep the imp-def around.
This actually totally breaks and causes the machine verifier to cry in several cases, one of which being:
%RAX<def> = COPY %RCX<kill> %ECX<def> = COPY %EAX<kill>, %RAX<imp-use,kill>
These subregister copies are together identified as noops, so are both removed. However, the second one as it has an imp-use gets converted into a kill:
%ECX<def> = KILL %EAX<kill>, %RAX<imp-use,kill>
As the original COPY has been removed, the verifier goes into tears at the use of undefined EAX and RAX.
There are several hacky solutions to this hacky problem (which is all to do with imp-use/def weirdnesses), but the least hacky I've come up with is to *always* remove COPYs by converting to KILLs. KILLs are no-ops to the code generator so the generated code doesn't change (which is why they were partially used in the first place), but using them also keeps the def/use and imp-def/imp-use chains alive:
%RAX<def> = KILL %RCX<kill> %ECX<def> = KILL %EAX<kill>, %RAX<imp-use,kill>
The patch passes all test cases including the ones that check the removal of MOVs in this circumstance, along with an extra test I added to check subregister behaviour (which made the machine verifier fall over before my patch).
The patch also adds some DEBUG() statements because the file hadn't got any.
llvm-svn: 199797
show more ...
|
Revision tags: llvmorg-3.4.0, llvmorg-3.4.0-rc3, llvmorg-3.4.0-rc2, llvmorg-3.4.0-rc1, llvmorg-3.3.1-rc1, llvmorg-3.3.0, llvmorg-3.3.0-rc3 |
|
#
abdb1d69 |
| 22-May-2013 |
Chad Rosier <mcrosier@apple.com> |
Simplify logic now that r182490 is in place. No functional change intended.
llvm-svn: 182531
|
Revision tags: llvmorg-3.3.0-rc2, llvmorg-3.3.0-rc1, llvmorg-3.2.0, llvmorg-3.2.0-rc3 |
|
#
ed0881b2 |
| 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
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. =]
llvm-svn: 169131
show more ...
|
#
bb1e9831 |
| 30-Nov-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Convert COPY instructions into KILLs if they have implicit defs.
MachineCopyPropagation doesn't understand super-register liveness well enough to be able to remove implicit defs of super-registers.
Convert COPY instructions into KILLs if they have implicit defs.
MachineCopyPropagation doesn't understand super-register liveness well enough to be able to remove implicit defs of super-registers.
This fixes a problem in ARM/2012-01-26-CopyPropKills.ll that is exposed by an future TwoAddressInstructionPass change. The KILL instructions are removed before the machine code is emitted.
llvm-svn: 169060
show more ...
|
Revision tags: llvmorg-3.2.0-rc2 |
|
#
508888e4 |
| 27-Nov-2012 |
Jakub Staszak <kubastaszak@gmail.com> |
Remove unneeded #include.
llvm-svn: 168664
|
Revision tags: llvmorg-3.2.0-rc1 |
|
#
c30a9af2 |
| 15-Oct-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Switch most getReservedRegs() clients to the MRI equivalent.
Using the cached bit vector in MRI avoids comstantly allocating and recomputing the reserved register bit vector.
llvm-svn: 165983
|
#
54038d79 |
| 01-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
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).
llvm-svn: 157854
show more ...
|
#
92a00839 |
| 01-Jun-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Switch some getAliasSet clients to MCRegAliasIterator.
MCRegAliasIterator can optionally visit the register itself, allowing for simpler code.
llvm-svn: 157837
|
Revision tags: llvmorg-3.1.0, llvmorg-3.1.0-rc3, llvmorg-3.1.0-rc2, llvmorg-3.1.0-rc1 |
|
#
5544bf1b |
| 27-Mar-2012 |
Lang Hames <lhames@gmail.com> |
Use a SmallVector and linear lookup instead of a DenseSet - SourceMap values will always be tiny sets, so DenseSet is overkill (SmallSet won't work as we need iteration support).
llvm-svn: 153529
|
#
551662bf |
| 27-Mar-2012 |
Lang Hames <lhames@gmail.com> |
During MachineCopyPropagation a register may be the source operand of multiple copies being considered for removal. Make sure to track all of the copies, rather than just the most recent encountered,
During MachineCopyPropagation a register may be the source operand of multiple copies being considered for removal. Make sure to track all of the copies, rather than just the most recent encountered, by holding a DenseSet instead of an unsigned in SrcMap.
No test case - couldn't reduce something with a sane size.
llvm-svn: 153487
show more ...
|
#
4b02a29e |
| 05-Mar-2012 |
Craig Topper <craig.topper@gmail.com> |
Convert more GenRegisterInfo tables from unsigned to uint16_t to reduce static data size.
llvm-svn: 152016
|
#
1d326588 |
| 04-Mar-2012 |
Craig Topper <craig.topper@gmail.com> |
Use uint16_t to store register overlaps to reduce static data.
llvm-svn: 152001
|
#
ddeb9d11 |
| 27-Feb-2012 |
Evan Cheng <evan.cheng@apple.com> |
Fix for PR12090: clear def maps of aliases when visiting a copy. e.g. %S5<def> = COPY %S0<kill> First clear def map of Q1, etc.
No small test case available.
llvm-svn: 151574
|
#
63618f9b |
| 20-Feb-2012 |
Evan Cheng <evan.cheng@apple.com> |
Fix machine-cp by having it to check sub-register indicies. e.g. ecx = mov eax al = mov ch The second copy is not a nop because the sub-indices of ecx,ch is not the same of that of eax/al.
Re-enabl
Fix machine-cp by having it to check sub-register indicies. e.g. ecx = mov eax al = mov ch The second copy is not a nop because the sub-indices of ecx,ch is not the same of that of eax/al.
Re-enabled machine-cp. PR11940
llvm-svn: 151002
show more ...
|
#
938b4d26 |
| 09-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Erase dead copies that are clobbered by a call.
This does make a difference, at least when using RABasic.
llvm-svn: 150118
|
#
8610a59d |
| 08-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Handle register masks in MachineCopyPropagation.
For simplicity, treat calls with register masks as basic block boundaries. This means we can't copy propagate callee-saved registers across calls, b
Handle register masks in MachineCopyPropagation.
For simplicity, treat calls with register masks as basic block boundaries. This means we can't copy propagate callee-saved registers across calls, but I don't think that is a big deal.
llvm-svn: 150108
show more ...
|
#
1fa5bcbe |
| 08-Feb-2012 |
Andrew Trick <atrick@apple.com> |
Codegen pass definition cleanup. No functionality.
Moving toward a uniform style of pass definition to allow easier target configuration. Globally declare Pass ID. Globally declare pass initializer.
Codegen pass definition cleanup. No functionality.
Moving toward a uniform style of pass definition to allow easier target configuration. Globally declare Pass ID. Globally declare pass initializer. Use INITIALIZE_PASS consistently. Add a call to the initializer from CodeGen.cpp. Remove redundant "createPass" functions and "getPassName" methods.
While cleaning up declarations, cleaned up comments (sorry for large diff).
llvm-svn: 150100
show more ...
|
#
9e761997 |
| 08-Feb-2012 |
Andrew Trick <atrick@apple.com> |
whitespace
llvm-svn: 150094
|
#
8c139a51 |
| 26-Jan-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Clear kill flags before propagating a copy.
The live range of the source register may be extended when a redundant copy is eliminated. Make sure any kill flags between the two copies are cleared.
T
Clear kill flags before propagating a copy.
The live range of the source register may be extended when a redundant copy is eliminated. Make sure any kill flags between the two copies are cleared.
This fixes PR11765.
llvm-svn: 149069
show more ...
|
#
520730ff |
| 08-Jan-2012 |
Evan Cheng <evan.cheng@apple.com> |
Avoid eraseing copies from a reserved register unless the definition can be safely proven not to have been clobbered. No small test case possible.
llvm-svn: 147751
|
#
00b1a3cd |
| 07-Jan-2012 |
Evan Cheng <evan.cheng@apple.com> |
Added a late machine instruction copy propagation pass. This catches opportunities that only present themselves after late optimizations such as tail duplication .e.g. ## BB#1: movl %eax,
Added a late machine instruction copy propagation pass. This catches opportunities that only present themselves after late optimizations such as tail duplication .e.g. ## BB#1: movl %eax, %ecx movl %ecx, %eax ret
The register allocator also leaves some of them around (due to false dep between copies from phi-elimination, etc.)
This required some changes in codegen passes. Post-ra scheduler and the pseudo-instruction expansion passes have been moved after branch folding and tail merging. They were before branch folding before because it did not always update block livein's. That's fixed now. The pass change makes independently since we want to properly schedule instructions after branch folding / tail duplication.
rdar://10428165 rdar://10640363
llvm-svn: 147716
show more ...
|