| #
4cf8fe31 |
| 22-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
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 <[email protected]> |
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 <[email protected]> |
Add print methods
llvm-svn: 117143
|
| #
f4bbe50f |
| 21-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
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 <[email protected]> |
Eliminate curli from SplitEditor. Use the LiveRangeEdit reference instead.
llvm-svn: 116547
|
| #
0f3e98ce |
| 15-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
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 <[email protected]> |
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 <[email protected]> |
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 <[email protected]> |
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 <[email protected]> |
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 <[email protected]> |
Print more loop info.
llvm-svn: 115951
|
| #
7c317300 |
| 07-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
Print out MBB number when rewriting.
llvm-svn: 115950
|
| #
49715fd4 |
| 07-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
Cache interval iterators in SplitEditor::addTruncSimpleRange so we only have to do one find().
llvm-svn: 115929
|
| #
9575af4b |
| 07-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
Clean up debug printing.
llvm-svn: 115928
|
|
Revision tags: llvmorg-2.8.0 |
|
| #
4d5156c7 |
| 05-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
Count uses in all nested loops, not just the deepest.
llvm-svn: 115710
|
| #
56e2925e |
| 05-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
Remove SplitAnalysis::removeUse. It was only used to make SplitAnalysis reusable, but that is no longer relevant since a split will always replace the original.
llvm-svn: 115709
|
| #
0445e2a0 |
| 05-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
dupli always has an interval now.
llvm-svn: 115708
|
| #
2dfa8be2 |
| 05-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
We can split around loops with multiple exits now.
llvm-svn: 115696
|
| #
89d276aa |
| 05-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
Update SplitEditor API to reflect the fact that the original live interval is never kept after splitting.
Keeping the original interval made sense when the split region doesn't modify the register,
Update SplitEditor API to reflect the fact that the original live interval is never kept after splitting.
Keeping the original interval made sense when the split region doesn't modify the register, and the original is spilled. We can get the same effect by detecting reloaded values when spilling around copies.
llvm-svn: 115695
show more ...
|
| #
b46d3236 |
| 05-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
Intervals are half-open.
llvm-svn: 115694
|
| #
671bab1c |
| 05-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
When we find a reaching definition, make sure it is visited from all paths by erasing it from the visited set. That ensures we create the right phi defs.
llvm-svn: 115666
|
| #
b0cedd5f |
| 05-Oct-2010 |
Jakob Stoklund Olesen <[email protected]> |
Don't use nextIndex to check for live out of instruction. Insert copy after defining instruction.
Fix LiveIntervalMap::extendTo to properly handle live segments starting before the current basic blo
Don't use nextIndex to check for live out of instruction. Insert copy after defining instruction.
Fix LiveIntervalMap::extendTo to properly handle live segments starting before the current basic block.
Make sure the open live range is extended to the inserted copy's use slot.
llvm-svn: 115665
show more ...
|
|
Revision tags: llvmorg-2.8.0-rc3 |
|
| #
56495686 |
| 25-Sep-2010 |
Lang Hames <[email protected]> |
Removed VNInfo::isDefAccurate(). Def "accuracy" can be checked by testing whether LiveIntervals::getInstructionFromIndex(def) returns NULL.
llvm-svn: 114791
|
| #
6f8bd42e |
| 21-Sep-2010 |
Jakob Stoklund Olesen <[email protected]> |
Build the complement interval dupli after the split intervals instead of creating it before and subtracting split ranges.
This way, the SSA update code in LiveIntervalMap can properly create and use
Build the complement interval dupli after the split intervals instead of creating it before and subtracting split ranges.
This way, the SSA update code in LiveIntervalMap can properly create and use new phi values in dupli. Now it is possible to create split regions where a value escapes along two different CFG edges, creating phi values outside the split region.
This is a work in progress and probably quite broken.
llvm-svn: 114492
show more ...
|
|
Revision tags: llvmorg-2.8.0-rc2 |
|
| #
9855109b |
| 16-Sep-2010 |
Jakob Stoklund Olesen <[email protected]> |
Use the value mapping provided by LiveIntervalMap. This simplifies the code a great deal because we don't have to worry about maintaining SSA form.
Unconditionally copy back to dupli when the regist
Use the value mapping provided by LiveIntervalMap. This simplifies the code a great deal because we don't have to worry about maintaining SSA form.
Unconditionally copy back to dupli when the register is live out of the split range, even if the live-out value was defined outside the range. Skipping the back-copy only makes sense when the live range is going to spill outside the split range, and we don't know that it will. Besides, this was a hack to avoid SSA update issues.
Clear up some confusion about the end point of a half-open LiveRange. Methinks LiveRanges need to be closed so both start and end are included in the range. The low bits of a SlotIndex are symbolic, so a half-open range doesn't really make sense. This would be a pervasive change, though.
llvm-svn: 114043
show more ...
|