#
7f8e563a |
| 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 mayL
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.
llvm-svn: 146026
show more ...
|
Revision tags: llvmorg-3.0.0, llvmorg-3.0.0-rc4 |
|
#
90b5e565 |
| 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.
Th
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.
llvm-svn: 144503
show more ...
|
Revision tags: llvmorg-3.0.0-rc3, llvmorg-3.0.0-rc2, llvmorg-3.0.0-rc1 |
|
#
da960069 |
| 09-Aug-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Move CalculateRegClass to MRI::recomputeRegClass.
This function doesn't have anything to do with spill weights, and MRI already has functions for manipulating the register class of a virtual registe
Move CalculateRegClass to MRI::recomputeRegClass.
This function doesn't have anything to do with spill weights, and MRI already has functions for manipulating the register class of a virtual register.
llvm-svn: 137123
show more ...
|
#
bbad3bce |
| 05-Jul-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Fix PR10277.
Remat during spilling triggers dead code elimination. If a phi-def becomes unused, that may also cause live ranges to split into separate connected components.
This type of splitting i
Fix PR10277.
Remat during spilling triggers dead code elimination. If a phi-def becomes unused, that may also cause live ranges to split into separate connected components.
This type of splitting is different from normal live range splitting. In particular, there may not be a common original interval.
When the split range is its own original, make sure that the new siblings are also their own originals. The range being split cannot be used as an original since it doesn't cover the new siblings.
llvm-svn: 134413
show more ...
|
#
c5a8c08d |
| 05-May-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add some statistics to the splitting and spilling frameworks.
llvm-svn: 130931
|
#
7d406793 |
| 02-May-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Minimize the slot indexes spanned by register ranges created when splitting.
When an interfering live range ends at a dead slot index between two instructions, make sure that the inserted copy instr
Minimize the slot indexes spanned by register ranges created when splitting.
When an interfering live range ends at a dead slot index between two instructions, make sure that the inserted copy instruction gets a slot index after the dead ones. This makes it possible to avoid the interference.
Ideally, there shouldn't be interference ending at a deleted instruction, but physical register coalescing can sometimes do that to sub-registers.
This fixes PR9823.
llvm-svn: 130687
show more ...
|
#
86e53ced |
| 20-Apr-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add debug output for rematerializable instructions.
llvm-svn: 129883
|
#
871f7060 |
| 15-Apr-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remember to set flag.
llvm-svn: 129579
|
#
96d04c8e |
| 11-Apr-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Don't shrink live ranges after dead code elimination unless it is going to help.
In particular, don't repeatedly recompute the PIC base live range after rematerialization.
llvm-svn: 129275
|
Revision tags: llvmorg-2.9.0 |
|
#
18fd84c7 |
| 05-Apr-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
When dead code elimination removes all but one use, try to fold the single def into the remaining use.
Rematerialization can leave single-use loads behind that we might as well fold whenever possibl
When dead code elimination removes all but one use, try to fold the single def into the remaining use.
Rematerialization can leave single-use loads behind that we might as well fold whenever possible.
llvm-svn: 128918
show more ...
|
#
dd9a2ece |
| 30-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Treat clones the same as their origin.
When DCE clones a live range because it separates into connected components, make sure that the clones enter the same register allocator stage as the register
Treat clones the same as their origin.
When DCE clones a live range because it separates into connected components, make sure that the clones enter the same register allocator stage as the register they were cloned from.
For instance, clones may be split even when they where created during spilling. Other registers created during spilling are not candidates for splitting or even (re-)spilling.
llvm-svn: 128524
show more ...
|
#
e991f728 |
| 29-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Recompute register class and hint for registers created during spilling.
The spill weight is not recomputed for an unspillable register - it stays infinite.
llvm-svn: 128490
|
#
0ed9ebca |
| 29-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remember to use the correct register when rematerializing for snippets.
llvm-svn: 128469
|
#
d8af5298 |
| 29-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Properly enable rematerialization when spilling after live range splitting.
The instruction to be rematerialized may not be the one defining the register that is being spilled. The traceSiblingValue
Properly enable rematerialization when spilling after live range splitting.
The instruction to be rematerialized may not be the one defining the register that is being spilled. The traceSiblingValue() function sees through sibling copies to find the remat candidate.
llvm-svn: 128449
show more ...
|
Revision tags: llvmorg-2.9.0-rc3, llvmorg-2.9.0-rc2 |
|
#
b993f639 |
| 23-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Notify the delegate before removing dead values from a live interval.
The register allocator needs to know when the range shrinks.
llvm-svn: 128145
|
#
8630840c |
| 17-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Dead code elimination may separate the live interval into multiple connected components.
I have convinced myself that it can only happen when a phi value dies. When it happens, allocate new virtual
Dead code elimination may separate the live interval into multiple connected components.
I have convinced myself that it can only happen when a phi value dies. When it happens, allocate new virtual registers for the components.
llvm-svn: 127827
show more ...
|
#
e14b2b22 |
| 16-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add a LiveRangeEdit delegate callback before shrinking a live range.
The register allocator needs to adjust its live interval unions when that happens.
llvm-svn: 127774
|
#
c738c965 |
| 16-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Erase virtual registers that are unused after DCE.
llvm-svn: 127773
|
#
557a82c0 |
| 16-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Clarify debugging output.
llvm-svn: 127771
|
#
43a87501 |
| 13-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Tell the register allocator about new unused virtual registers.
This allows the allocator to free any resources used by the virtual register, including physical register assignments.
llvm-svn: 1275
Tell the register allocator about new unused virtual registers.
This allows the allocator to free any resources used by the virtual register, including physical register assignments.
llvm-svn: 127560
show more ...
|
#
8e089640 |
| 09-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add a LiveRangeEdit::Delegate protocol.
This will we used for keeping register allocator data structures up to date while LiveRangeEdit is trimming live intervals.
llvm-svn: 127300
|
#
ea5ebfed |
| 08-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Delete dead code after rematerializing.
LiveRangeEdit::eliminateDeadDefs() will eventually be used by coalescing, splitting, and spilling for dead code elimination. It can delete chains of dead inst
Delete dead code after rematerializing.
LiveRangeEdit::eliminateDeadDefs() will eventually be used by coalescing, splitting, and spilling for dead code elimination. It can delete chains of dead instructions as long as there are no dependency loops.
llvm-svn: 127287
show more ...
|
Revision tags: llvmorg-2.9.0-rc1 |
|
#
27f942fa |
| 07-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Make the UselessRegs argument optional in the LiveRangeEdit constructor.
llvm-svn: 127181
|
#
13eb3650 |
| 19-Feb-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
This method belonged in VirtRegMap.
llvm-svn: 126002
|
#
4376d67b |
| 18-Feb-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Use VirtRegMap's Virt2SplitMap to keep track of the original live range before splitting.
All new virtual registers created for spilling or splitting point back to their original.
llvm-svn: 125980
|