- 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
-
Jim Grosbach authored
llvm-svn: 111019
-
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: 110944
-
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 11, 2010
-
-
Jakob Stoklund Olesen authored
llvm-svn: 110826
-
- Aug 10, 2010
-
-
Bill Wendling authored
a register before checking if it was defined. llvm-svn: 110733
-
Jakob Stoklund Olesen authored
operands. We don't currently have a hook to provide "the largest super class of A where all registers' getSubReg(subidx) is valid and in B". llvm-svn: 110730
-
Dan Gohman authored
llvm-svn: 110726
-
Jakob Stoklund Olesen authored
The live interval may be used for a spill slot as well, and that spill slot could be shared by split registers. We cannot shrink it, even if we know the current register won't need the spill slot in that range. llvm-svn: 110721
-
Jakob Stoklund Olesen authored
llvm-svn: 110720
-
Bill Wendling authored
ARM testers. llvm-svn: 110718
-
Devang Patel authored
llvm-svn: 110712
-
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
-
Devang Patel authored
llvm-svn: 110656
-
Bill Wendling authored
llvm-svn: 110654
-
Devang Patel authored
llvm-svn: 110653
-
Devang Patel authored
llvm-svn: 110652
-
Evan Cheng authored
llvm-svn: 110649
-
Devang Patel authored
Refactor and simplify code to avoid redundant checks. llvm-svn: 110642
-
Jakob Stoklund Olesen authored
register at a time. This turns out to be slightly faster than iterating over instructions, but more importantly, it allows us to compute spill weights for new registers created after the spill weight pass has run. Also compute the allocation hint at the same time as the spill weight. This allows us to use the spill weight as a cost metric for copies, and choose the most profitable hint if there is more than one possibility. The new hints provide a very small (< 0.1%) but universal code size improvement. llvm-svn: 110631
-
Bill Wendling authored
pass. This pass should expand with all of the small, fine-grained optimization passes to reduce compile time and increase happiment. llvm-svn: 110627
-
Devang Patel authored
llvm-svn: 110623
-
Devang Patel authored
llvm-svn: 110621
-
- Aug 09, 2010
-
-
Devang Patel authored
llvm-svn: 110607
-
Devang Patel authored
llvm-svn: 110600
-
Devang Patel authored
llvm-svn: 110590
-
Jakob Stoklund Olesen authored
If we are emitting COPY instructions for the REG_SEQUENCE, make sure the kill flag goes on the last COPY. Otherwise we may be using a killed register. <rdar://problem/8287792> llvm-svn: 110589
-
Devang Patel authored
llvm-svn: 110586
-
- Aug 08, 2010
-
-
Bill Wendling authored
relatively expensive comparison analyzer on each instruction. Also rename the comparison analyzer method to something more in line with what it actually does. This pass is will eventually be folded into the Machine CSE pass. llvm-svn: 110539
-
- Aug 07, 2010
-
-
Dan Gohman authored
out of PassManager.cpp and into Core.cpp with the rest of the C binding code. llvm-svn: 110494
-
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
-
-
Jim Grosbach authored
llvm-svn: 110466
-
Jakob Stoklund Olesen authored
llvm-svn: 110464
-