#
840b81a1 |
| 13-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remember to actually update SplitAnalysis statistics now that we have a fancy function to do it.
llvm-svn: 110994
|
#
991e4ee8 |
| 12-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Handle an empty dupli.
This can happen if the original interval has been broken into two disconnected parts. Ideally, we should be able to detect when the graph is disconnected and create separate i
Handle an empty dupli.
This can happen if the original interval has been broken into two disconnected parts. Ideally, we should be able to detect when the graph is disconnected and create separate intervals, but that code is not implemented yet.
Example:
Two basic blocks are both branching to a loop header. Our interval is defined in both basic blocks, and live into the loop along both edges.
We decide to split the interval around the loop. The interval is split into an inside part and an outside part. The outside part now has two disconnected segments, one in each basic block.
If we later decide to split the outside interval into single blocks, we get one interval per basic block and an empty dupli for the remainder.
llvm-svn: 110976
show more ...
|
#
32c181c4 |
| 12-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Update the SplitAnalysis statistics as uses are moved from curli to the new split intervals. THis means the analysis can be used for multiple splits as long as curli doesn't shrink.
llvm-svn: 110975
|
#
09106893 |
| 12-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Also recompute HasPHIKill flags in LiveInterval::RenumberValues.
If a phi-def value were removed from the interval, the phi-kill flags are no longer valid.
llvm-svn: 110949
|
#
fa3ea11a |
| 12-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Clean up debug output.
llvm-svn: 110940
|
#
622848b2 |
| 12-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Implement single block splitting.
Before spilling a live range, we split it into a separate range for each basic block where it is used. That way we only get one reload per basic block if the new sm
Implement single block splitting.
Before spilling a live range, we split it into a separate range for each basic block where it is used. That way we only get one reload per basic block if the new smaller ranges can allocate to a register.
This type of splitting is already present in the standard spiller.
llvm-svn: 110934
show more ...
|
#
62e72147 |
| 10-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
More debug spew
llvm-svn: 110720
|
#
53c50220 |
| 10-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Implement register class inflation.
When splitting a live range, the new registers have fewer uses and the permissible register class may be less constrained. Recompute the register class constraint
Implement register class inflation.
When splitting a live range, the new registers have fewer uses and the permissible register class may be less constrained. Recompute the register class constraint from the uses of new registers created for a split. This may let them be allocated from a larger set, possibly avoiding a spill.
llvm-svn: 110703
show more ...
|
#
284c2dbf |
| 10-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Recalculate the spill weight and allocation hint for virtual registers created during live range splitting.
llvm-svn: 110686
|
#
45e07c8f |
| 06-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Lazily defer duplicating the live interval we are splitting until we know it is necessary.
Sometimes, live range splitting doesn't shrink the current interval, but simply changes some instructions t
Lazily defer duplicating the live interval we are splitting until we know it is necessary.
Sometimes, live range splitting doesn't shrink the current interval, but simply changes some instructions to use a new interval. That makes the original more suitable for spilling. In this case, we don't need to duplicate the original.
llvm-svn: 110481
show more ...
|
#
8c0f6931 |
| 06-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add LiveInterval::RenumberValues - Garbage collection for VNInfos.
After heavy editing of a live interval, it is much easier to simply renumber the live values instead of trying to keep track of the
Add LiveInterval::RenumberValues - Garbage collection for VNInfos.
After heavy editing of a live interval, it is much easier to simply renumber the live values instead of trying to keep track of the unused ones.
llvm-svn: 110463
show more ...
|
#
7e0de5ef |
| 06-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Fix swapped COPY operands.
llvm-svn: 110453
|
#
dc96e28d |
| 04-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Checkpoint SplitKit progress.
We are now at a point where we can split around simple single-entry, single-exit loops, although still with some bugs.
llvm-svn: 110257
|
#
c698417e |
| 26-Jul-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add SplitEditor to SplitKit. This class will be used to edit live intervals and rewrite instructions for live range splitting.
Still work in progress.
llvm-svn: 109469
|
#
0fef9dda |
| 20-Jul-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Change the createSpiller interface to take a MachineFunctionPass argument.
The spillers can pluck the analyses they need from the pass reference.
Switch some never-null pointers to references.
llv
Change the createSpiller interface to take a MachineFunctionPass argument.
The spillers can pluck the analyses they need from the pass reference.
Switch some never-null pointers to references.
llvm-svn: 108969
show more ...
|
#
ed4075cc |
| 20-Jul-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Implement loop splitting analysis. Determine which loop exit blocks need a 'pre-exit' block inserted. Recognize when this would be impossible.
llvm-svn: 108941
|
#
ff095507 |
| 20-Jul-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Appease the colonials.
llvm-svn: 108845
|
#
36d12c67 |
| 20-Jul-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Beginning SplitKit - utility classes for live range splitting.
This is a work in progress. So far we have some basic loop analysis to help determine where it is useful to split a live range around a
Beginning SplitKit - utility classes for live range splitting.
This is a work in progress. So far we have some basic loop analysis to help determine where it is useful to split a live range around a loop.
The actual loop splitting code from Splitter.cpp is also going to move in here.
llvm-svn: 108842
show more ...
|