#
cbbd8192 |
| 03-Nov-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Tag debug output as regalloc
llvm-svn: 118193
|
#
1e32688e |
| 01-Nov-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
When inserting copies during splitting, always use the parent register as the source, and let rewrite() clean it up.
This way, kill flags on the inserted copies are fixed as well during rewrite().
When inserting copies during splitting, always use the parent register as the source, and let rewrite() clean it up.
This way, kill flags on the inserted copies are fixed as well during rewrite().
We can't just assume that all the copies we insert are going to be kills since critical edges into loop headers sometimes require both source and dest to be live out of a block.
llvm-svn: 117980
show more ...
|
#
a5d4b4ff |
| 01-Nov-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Update kill flags while rewriting instructions after splitting.
llvm-svn: 117959
|
#
0cfc497f |
| 30-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Make sure copies are inserted after any exception handling labels at the top of a basic block.
llvm-svn: 117764
|
#
140542fc |
| 29-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Don't transfer unused values to the new intervals formed by splitting.
llvm-svn: 117673
|
#
25ed920b |
| 29-Oct-2010 |
Benjamin Kramer <benny.kra@googlemail.com> |
Silence Release build warnings.
llvm-svn: 117671
|
#
2cdca458 |
| 29-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Never propagate the idom value out of a block that defines its own value.
llvm-svn: 117669
|
#
c9f90c2a |
| 28-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Replace SplitKit SSA update with an iterative algorithm very similar to the one in SSAUpdaterImpl.h
Verifying live intervals revealed that the old method was completely wrong, and we need an iterati
Replace SplitKit SSA update with an iterative algorithm very similar to the one in SSAUpdaterImpl.h
Verifying live intervals revealed that the old method was completely wrong, and we need an iterative approach to calculating PHI placemant. Fortunately, we have MachineDominators available, so we don't have to compute that over and over like SSAUpdaterImpl.h must.
Live-out values are cached between calls to mapValue() and computed in a greedy way, so most calls will be working with very small block sets.
Thanks to Bob for explaining how this should work.
llvm-svn: 117599
show more ...
|
#
e172a8b7 |
| 28-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Make MachineDominators available for SplitEditor. We are going to need it for proper SSA updating.
This doesn't cause MachineDominators to be recomputed since we are already requiring MachineLoopInf
Make MachineDominators available for SplitEditor. We are going to need it for proper SSA updating.
This doesn't cause MachineDominators to be recomputed since we are already requiring MachineLoopInfo which uses dominators as well.
llvm-svn: 117598
show more ...
|
#
79e1407c |
| 27-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Handle critical loop predecessors by making both inside and outside registers live out.
This doesn't prevent us from inserting a loop preheader later on, if that is better.
llvm-svn: 117424
|
#
795ed981 |
| 27-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Compute critical loop predecessors in the same way as critical loop exits.
Critical edges going into a loop are not as bad as critical exits. We can handle them by splitting the critical edge, or by
Compute critical loop predecessors in the same way as critical loop exits.
Critical edges going into a loop are not as bad as critical exits. We can handle them by splitting the critical edge, or by having both inside and outside registers live out of the predecessor.
llvm-svn: 117423
show more ...
|
#
e4f3317c |
| 26-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
After splitting, compute connected components of all new registers, not just for the remainder register.
Example:
bb0: x = 1 bb1: use(x) ... x = 2 jump bb1
When x is isolated in bb1, the
After splitting, compute connected components of all new registers, not just for the remainder register.
Example:
bb0: x = 1 bb1: use(x) ... x = 2 jump bb1
When x is isolated in bb1, the inner part breaks into two components, x1 and x2:
bb0: x0 = 1 bb1: x1 = x0 use(x1) ... x2 = 2 x0 = x2 jump bb1
llvm-svn: 117408
show more ...
|
#
022e7795 |
| 26-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Call RenumberValues for all new registers created during splitting. This is necessary to get correct hasPHIKill flags.
llvm-svn: 117406
|
#
4453324e |
| 26-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Preserve PHIDef bits in cloned values during splitting.
llvm-svn: 117405
|
#
4cf8fe31 |
| 22-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Be more strict about detecting multi-use blocks for isolation.
When a block has exactly two uses and the register is both live-in and live-out, don't isolate the block. We would be inserting two cop
Be more strict about detecting multi-use blocks for isolation.
When a block has exactly two uses and the register is both live-in and live-out, don't isolate the block. We would be inserting two copies, so we haven't really made any progress.
If the live-in and live-out values separate into disconnected components after splitting, we would be making progress. We can't detect that for now.
llvm-svn: 117169
show more ...
|
#
2d600755 |
| 22-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Be more strict when detecting critical edges before loop splitting.
An exit block with a critical edge must only have predecessors in the loop, or just before the loop. This guarantees that the inse
Be more strict when detecting critical edges before loop splitting.
An exit block with a critical edge must only have predecessors in the loop, or just before the loop. This guarantees that the inserted copies in the loop predecessors dominate the exit block.
llvm-svn: 117144
show more ...
|
#
9a743016 |
| 22-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add print methods
llvm-svn: 117143
|
#
f4bbe50f |
| 21-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Don't include the destination interval in the union when computing Parent - union(Y, ...). Doh.
llvm-svn: 117042
|
#
3f1f7b67 |
| 15-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Eliminate curli from SplitEditor. Use the LiveRangeEdit reference instead.
llvm-svn: 116547
|
#
0f3e98ce |
| 15-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Move stack slot assignments into LiveRangeEdit.
All registers created during splitting or spilling are assigned to the same stack slot as the parent register.
When splitting or rematting, we may no
Move stack slot assignments into LiveRangeEdit.
All registers created during splitting or spilling are assigned to the same stack slot as the parent register.
When splitting or rematting, we may not spill at all. In that case the stack slot is still assigned, but it will be dead.
llvm-svn: 116546
show more ...
|
#
72911e49 |
| 14-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Create a new LiveRangeEdit class to keep track of the new registers created when splitting or spillling, and to help with rematerialization.
Use LiveRangeEdit in InlineSpiller and SplitKit. This wil
Create a new LiveRangeEdit class to keep track of the new registers created when splitting or spillling, and to help with rematerialization.
Use LiveRangeEdit in InlineSpiller and SplitKit. This will eventually make it possible to share remat code between InlineSpiller and SplitKit.
llvm-svn: 116543
show more ...
|
#
f1131801 |
| 14-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Only split around a loop if the live range has uses outside the loop periphery.
Before we would also split around a loop if any peripheral block had multiple uses. This could cause repeated splittin
Only split around a loop if the live range has uses outside the loop periphery.
Before we would also split around a loop if any peripheral block had multiple uses. This could cause repeated splitting when splitting a different live range would insert uses into the periphery.
Now -spiller=inline passes the nightly test suite again.
llvm-svn: 116494
show more ...
|
#
959fcc6c |
| 08-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Rename SplitEditor::rewrite to finish() and break it out into a couple of new functions: computeRemainder and rewrite.
When the remainder breaks up into multiple components, remember to rewrite thos
Rename SplitEditor::rewrite to finish() and break it out into a couple of new functions: computeRemainder and rewrite.
When the remainder breaks up into multiple components, remember to rewrite those uses as well.
llvm-svn: 116121
show more ...
|
#
0f1677e1 |
| 07-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
After splitting, the remaining LiveInterval may be fragmented into multiple connected components. These components should be allocated different virtual registers because there is no reason for them
After splitting, the remaining LiveInterval may be fragmented into multiple connected components. These components should be allocated different virtual registers because there is no reason for them to be allocated together.
Add the ConnectedVNInfoEqClasses class to calculate the connected components, and move values to new LiveIntervals.
Use it from SplitKit::rewrite by creating new virtual registers for the components.
llvm-svn: 116006
show more ...
|
#
9bfd9679 |
| 07-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Print more loop info.
llvm-svn: 115951
|