- Sep 13, 2010
-
-
Jakob Stoklund Olesen authored
pointer and work around that. llvm-svn: 113788
-
- Aug 19, 2010
-
-
Michael J. Spencer authored
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
-
- Aug 18, 2010
-
-
Jakob Stoklund Olesen authored
map discovers the iterated dominance frontier for free. llvm-svn: 111400
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
llvm-svn: 111394
-
Jakob Stoklund Olesen authored
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
-
- Aug 14, 2010
-
-
Jakob Stoklund Olesen authored
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
-
- Aug 13, 2010
-
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
function to do it. llvm-svn: 110994
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
split intervals. THis means the analysis can be used for multiple splits as long as curli doesn't shrink. llvm-svn: 110975
-
- Aug 12, 2010
-
-
Jakob Stoklund Olesen authored
If a phi-def value were removed from the interval, the phi-kill flags are no longer valid. llvm-svn: 110949
-
Jakob Stoklund Olesen authored
llvm-svn: 110940
-
Jakob Stoklund Olesen authored
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
-
- Aug 10, 2010
-
-
Jakob Stoklund Olesen authored
llvm-svn: 110720
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
during live range splitting. llvm-svn: 110686
-
- Aug 07, 2010
-
-
Jakob Stoklund Olesen authored
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
-
- Aug 06, 2010
-
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
llvm-svn: 110453
-
- Aug 05, 2010
-
-
Jakob Stoklund Olesen authored
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
-
- Jul 27, 2010
-
-
Jakob Stoklund Olesen authored
rewrite instructions for live range splitting. Still work in progress. llvm-svn: 109469
-
- Jul 21, 2010
-
-
Jakob Stoklund Olesen authored
The spillers can pluck the analyses they need from the pass reference. Switch some never-null pointers to references. llvm-svn: 108969
-
- Jul 20, 2010
-
-
Jakob Stoklund Olesen authored
Determine which loop exit blocks need a 'pre-exit' block inserted. Recognize when this would be impossible. llvm-svn: 108941
-
Jakob Stoklund Olesen authored
llvm-svn: 108845
-
Jakob Stoklund Olesen authored
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
-