#
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 ...
|
#
315b42c3 |
| 17-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Rewrite instructions as part of ConnectedVNInfoEqClasses::Distribute.
llvm-svn: 127779
|
#
32210de3 |
| 15-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Preserve both isPHIDef and isDefByCopy bits when copying parent values.
llvm-svn: 127697
|
#
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 |
|
#
27e0a4ab |
| 05-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Work around a coalescer bug.
The coalescer can in very rare cases leave too large live intervals around after rematerializing cheap-as-a-move instructions.
Linear scan doesn't really care, but live
Work around a coalescer bug.
The coalescer can in very rare cases leave too large live intervals around after rematerializing cheap-as-a-move instructions.
Linear scan doesn't really care, but live range splitting gets very confused when a live range is killed by a ghost instruction.
I will fix this properly in the coalescer after 2.9 branches.
llvm-svn: 127096
show more ...
|
#
d4f78895 |
| 04-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Tweak debug output. No functional changes.
llvm-svn: 127006
|
#
1a69e233 |
| 04-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Use an IndexedMap instead of a DenseMap for the live-out cache.
This speeds up updateSSA() so it only accounts for 5% of the live range splitting time.
llvm-svn: 126972
|
#
9a6382fc |
| 03-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Cache basic block bounds instead of asking SlotIndexes::getMBBRange all the time.
This speeds up the greedy register allocator by 15%. DenseMap is not as fast as one might hope.
llvm-svn: 126921
|
#
c9601988 |
| 03-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Change the SplitEditor interface to a single instance can be shared for multiple splits.
llvm-svn: 126912
|
#
5ea0712e |
| 03-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Only run the updateSSA loop when we have actually seen multiple values.
When only a single value has been seen, new PHIDefs are never needed.
llvm-svn: 126911
|
#
815196ca |
| 02-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Turn the Edit member into a pointer so it can change dynamically.
No functional change.
llvm-svn: 126898
|
#
503b143a |
| 02-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Transfer simply defined values directly without recomputing liveness and SSA.
Values that map to a single new value in a new interval after splitting don't need new PHIDefs, and if the parent value
Transfer simply defined values directly without recomputing liveness and SSA.
Values that map to a single new value in a new interval after splitting don't need new PHIDefs, and if the parent value was never rematerialized the live range will be the same.
llvm-svn: 126894
show more ...
|
#
3648263a |
| 02-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Extract a method. No functional change.
llvm-svn: 126893
|
#
48af8923 |
| 02-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Move extendRange() into SplitEditor and delete the LiveRangeMap class.
Extract the updateSSA() method from the too long extendRange().
LiveOutCache can be shared among all the new intervals since t
Move extendRange() into SplitEditor and delete the LiveRangeMap class.
Extract the updateSSA() method from the too long extendRange().
LiveOutCache can be shared among all the new intervals since there is at most one of the new ranges live out from each basic block.
llvm-svn: 126818
show more ...
|
#
b0237619 |
| 02-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Rename mapValue to extendRange because that is its function now.
Simplify the signature - The return value and ParentVNI are no longer needed.
llvm-svn: 126809
|
#
9e326a84 |
| 02-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Move LiveIntervalMap::extendTo into LiveInterval itself.
This method could probably be used by LiveIntervalAnalysis::shrinkToUses, and now it can use extendIntervalEndTo() which coalesces ranges.
l
Move LiveIntervalMap::extendTo into LiveInterval itself.
This method could probably be used by LiveIntervalAnalysis::shrinkToUses, and now it can use extendIntervalEndTo() which coalesces ranges.
llvm-svn: 126803
show more ...
|
#
2b09bed5 |
| 01-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Delete dead code.
llvm-svn: 126801
|
#
8ef91fc8 |
| 01-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Move the value map from LiveIntervalMap to SplitEditor.
The value map is currently not used, all values are 'complex mapped' and LiveIntervalMap::mapValue is used to dig them out.
This is the first
Move the value map from LiveIntervalMap to SplitEditor.
The value map is currently not used, all values are 'complex mapped' and LiveIntervalMap::mapValue is used to dig them out.
This is the first step in a series changes leading to the removal of LiveIntervalMap. Its data structures can be shared among all the live intervals created by a split, so it is wasteful to create a copy for each.
llvm-svn: 126800
show more ...
|
#
977e3d3c |
| 01-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Delete dead code.
Local live range splitting is better driven by interference. This code was just guessing.
llvm-svn: 126799
|
#
ed172998 |
| 23-Feb-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
It is safe to ignore LastSplitPoint when the variable is not live out.
No code will be inserted after the split point anyway.
llvm-svn: 126319
|
#
60a26a65 |
| 21-Feb-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add SplitKit::isOriginalEndpoint and use it to force live range splitting to terminate.
An original endpoint is an instruction that killed or defined the original live range before any live ranges w
Add SplitKit::isOriginalEndpoint and use it to force live range splitting to terminate.
An original endpoint is an instruction that killed or defined the original live range before any live ranges were split.
When splitting global live ranges, avoid creating local live ranges without any original endpoints. We may still create global live ranges without original endpoints, but such a range won't be split again, and live range splitting still terminates.
llvm-svn: 126151
show more ...
|
#
f1a60a61 |
| 19-Feb-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Give SplitAnalysis a VRM member to access VirtRegMap::getOriginal().
llvm-svn: 126005
|
#
04aff708 |
| 19-Feb-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Missed member rename for naming convention.
llvm-svn: 126003
|
#
8dafc875 |
| 09-Feb-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Delete unused code for analyzing and splitting around loops.
Loop splitting is better handled by the more generic global region splitting based on the edge bundle graph.
llvm-svn: 125243
|
#
7cb57b30 |
| 09-Feb-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Use the LiveBLocks array for SplitEditor::splitSingleBlocks() as well.
This fixes a bug where splitSingleBlocks() could split a live range after a terminator instruction.
llvm-svn: 125237
|