| #
614e1393 |
| 13-Sep-2010 |
Jakob Stoklund Olesen <[email protected]> |
Mechanically replace LiveInterval* with LiveIntervalMap for intervals being edited without actually using LiveIntervalMap functionality.
llvm-svn: 113816
|
| #
36dad6db |
| 13-Sep-2010 |
Jakob Stoklund Olesen <[email protected]> |
Allow LiveIntervalMap to be reused by resetting the current live interval.
llvm-svn: 113815
|
| #
535e8e5f |
| 13-Sep-2010 |
Jakob Stoklund Olesen <[email protected]> |
Let's just declare that it is impossible to construct a std::pair from a null pointer and work around that.
llvm-svn: 113788
|
|
Revision tags: llvmorg-2.8.0-rc1, llvmorg-2.8.0-rc0 |
|
| #
abca1734 |
| 19-Aug-2010 |
Michael J. Spencer <[email protected]> |
Fix the msvc 2010 build.
The Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 implements parts of C++0x based on the draft standard. An old version of the draft had a bug that m
Fix the msvc 2010 build.
The Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 implements parts of C++0x based on the draft standard. An old version of the draft had a bug that makes std::pair<T1*, T2*>(something, 0) fail to compile. This is because the template<class U, class V> pair(U&& x, V&& y) constructor is selected, even though it later fails to implicitly convert U and V to frist_type and second_type.
This has been fixed in n3090, but it seems that Microsoft is not going to update msvc.
llvm-svn: 111535
show more ...
|
| #
e98030ad |
| 18-Aug-2010 |
Jakob Stoklund Olesen <[email protected]> |
Thinking about it, we don't need MachineDominatorTree after all. The DomValue map discovers the iterated dominance frontier for free.
llvm-svn: 111400
|
| #
f4088b02 |
| 18-Aug-2010 |
Jakob Stoklund Olesen <[email protected]> |
Revert r111394. It was too aggressive.
We must complete the DFS, otherwise we might miss needed phi-defs, and prematurely color live ranges with a non-dominating value.
This is not a big deal since
Revert r111394. It was too aggressive.
We must complete the DFS, otherwise we might miss needed phi-defs, and prematurely color live ranges with a non-dominating value.
This is not a big deal since we get to color more of the CFG and the next mapValue call will be faster.
llvm-svn: 111397
show more ...
|
| #
5b4cb084 |
| 18-Aug-2010 |
Jakob Stoklund Olesen <[email protected]> |
Aggressively prune the DFS when inserting phi-defs.
llvm-svn: 111394
|
| #
ce6f055b |
| 18-Aug-2010 |
Jakob Stoklund Olesen <[email protected]> |
Add the LiveIntervalMap class. Don't hook it up yet.
LiveIntervalMap maps values from a parent LiveInterval to a child interval that is a strict subset. It will create phi-def values as needed to pr
Add the LiveIntervalMap class. Don't hook it up yet.
LiveIntervalMap maps values from a parent LiveInterval to a child interval that is a strict subset. It will create phi-def values as needed to preserve the VNInfo SSA form in the child interval.
This leads to an algorithm very similar to the one in SSAUpdaterImpl.h, but with enough differences that the code can't be reused:
- We don't need to manipulate PHI instructions. - LiveIntervals have kills. - We have MachineDominatorTree. - We can use df_iterator.
llvm-svn: 111393
show more ...
|
| #
27e1f265 |
| 13-Aug-2010 |
Jakob Stoklund Olesen <[email protected]> |
Clean up the Spiller.h interface.
The earliestStart argument is entirely specific to linear scan allocation, and can be easily calculated by RegAllocLinearScan.
Replace std::vector with SmallVector
Clean up the Spiller.h interface.
The earliestStart argument is entirely specific to linear scan allocation, and can be easily calculated by RegAllocLinearScan.
Replace std::vector with SmallVector.
llvm-svn: 111055
show more ...
|
| #
d1191ee4 |
| 13-Aug-2010 |
Jakob Stoklund Olesen <[email protected]> |
Implement splitting inside a single block.
When a live range is contained a single block, we can split it around instruction clusters. The current approach is very primitive, splitting before and af
Implement splitting inside a single block.
When a live range is contained a single block, we can split it around instruction clusters. The current approach is very primitive, splitting before and after the largest gap between uses.
llvm-svn: 111043
show more ...
|
| #
3d1027e7 |
| 13-Aug-2010 |
Jakob Stoklund Olesen <[email protected]> |
Let LiveInterval::addRange extend existing ranges, it will verify that value numbers match. The old check could accidentally leave holes in openli.
Also let useIntv add all ranges for the phi-def va
Let LiveInterval::addRange extend existing ranges, it will verify that value numbers match. The old check could accidentally leave holes in openli.
Also let useIntv add all ranges for the phi-def value inserted by enterIntvAtEnd. This works as long at the value mapping is established in enterIntvAtEnd.
llvm-svn: 110995
show more ...
|
| #
840b81a1 |
| 13-Aug-2010 |
Jakob Stoklund Olesen <[email protected]> |
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 <[email protected]> |
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 <[email protected]> |
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 <[email protected]> |
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 <[email protected]> |
Clean up debug output.
llvm-svn: 110940
|
| #
622848b2 |
| 12-Aug-2010 |
Jakob Stoklund Olesen <[email protected]> |
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 <[email protected]> |
More debug spew
llvm-svn: 110720
|
| #
53c50220 |
| 10-Aug-2010 |
Jakob Stoklund Olesen <[email protected]> |
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 <[email protected]> |
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 <[email protected]> |
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 <[email protected]> |
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 <[email protected]> |
Fix swapped COPY operands.
llvm-svn: 110453
|
| #
dc96e28d |
| 04-Aug-2010 |
Jakob Stoklund Olesen <[email protected]> |
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 <[email protected]> |
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
|