| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
whether LiveIntervals::getInstructionFromIndex(def) returns NULL.
llvm-svn: 114791
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 110464
|
|
|
|
|
|
|
|
|
| |
This helps avoid silly code:
%R0<def = LOAD <fi#5>
STORE <fi#5>, %R0<kill>
llvm-svn: 110266
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
rewrite instructions for live range splitting.
Still work in progress.
llvm-svn: 109469
|
|
|
|
|
|
|
|
| |
The spillers can pluck the analyses they need from the pass reference.
Switch some never-null pointers to references.
llvm-svn: 108969
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
non-const.
llvm-svn: 108734
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
inserted in a MBB, and return an already inserted MI.
This target API change is necessary to allow foldMemoryOperand to call
storeToStackSlot and loadFromStackSlot when folding a COPY to a stack slot
reference in a target independent way.
The foldMemoryOperandImpl hook is going to change in the same way, but I'll wait
until COPY folding is actually implemented. Most targets only fold copies and
won't need to specialize this hook at all.
llvm-svn: 107991
|
|
|
|
| |
llvm-svn: 107505
|
|
|
|
| |
llvm-svn: 107503
|
|
|
|
|
|
|
|
|
|
| |
This allows us to recognize the common case where all uses could be
rematerialized, and no stack slot allocation is necessary.
If some values could be fully rematerialized, remove them from the live range
before allocating a stack slot for the rest.
llvm-svn: 107492
|
|
|
|
| |
llvm-svn: 107355
|
|
|
|
| |
llvm-svn: 107351
|
|
|
|
|
|
|
|
|
| |
LocalRewriter::runOnMachineFunction uses this information to mark dead spill
slots.
This means that InlineSpiller now also works for functions that spill.
llvm-svn: 107302
|
|
InlineSpiller inserts loads and spills immediately instead of deferring to
VirtRegMap. This is possible now because SlotIndexes allows instructions to be
inserted and renumbered.
This is work in progress, and is mostly a copy of TrivialSpiller so far. It
works very well for functions that don't require spilling.
llvm-svn: 107227
|