History log of /llvm-project/llvm/lib/CodeGen/InlineSpiller.cpp (Results 276 – 295 of 295)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
Revision tags: llvmorg-2.8.0-rc2, llvmorg-2.8.0-rc1, llvmorg-2.8.0-rc0
# 27e1f265 13-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

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 <stoklund@2pi.dk>

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 ...


# 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 ...


# 3b870f04 10-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Avoid editing the current live interval during remat.

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

Avoid editing the current live interval during remat.

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

show more ...


# 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 ...


# 1dfca4e4 06-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Keep the MachiuneFunctionPass pointer around. It is useful for verification.

llvm-svn: 110464


# 7fd4905f 04-Aug-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Coalesce stack slot accesses that arise when spilling both sides of a COPY.
This helps avoid silly code:

%R0<def = LOAD <fi#5>
STORE <fi#5>, %R0<kill>

llvm-svn: 110266


# 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 ...


# 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 ...


# a58a7e7f 19-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Spillers may alter MachineLoopInfo when breaking critical edges, so make it
non-const.

llvm-svn: 108734


# bd953d18 09-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Change TII::foldMemoryOperand API to require the machine instruction to be
inserted in a MBB, and return an already inserted MI.

This target API change is necessary to allow foldMemoryOperand to cal

Change TII::foldMemoryOperand API to require the machine instruction to be
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

show more ...


# df8429ae 02-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Remove invalid assert

llvm-svn: 107505


# cf6c5c96 02-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Properly handle debug values during inline spilling.

llvm-svn: 107503


# 96037187 02-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Rematerialize as much as possible before inserting spills and reloads.

This allows us to recognize the common case where all uses could be
rematerialized, and no stack slot allocation is necessary.

Rematerialize as much as possible before inserting spills and reloads.

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

show more ...


# 8656a454 01-Jul-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Add memory operand folding support to InlineSpiller.

llvm-svn: 107355


# bde96ad2 30-Jun-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Add support for rematerialization to InlineSpiller.

llvm-svn: 107351


# c39d3497 30-Jun-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Remember to track spill slot uses in VirtRegMap when inserting loads and stores.
LocalRewriter::runOnMachineFunction uses this information to mark dead spill
slots.

This means that InlineSpiller now

Remember to track spill slot uses in VirtRegMap when inserting loads and stores.
LocalRewriter::runOnMachineFunction uses this information to mark dead spill
slots.

This means that InlineSpiller now also works for functions that spill.

llvm-svn: 107302

show more ...


# f8889119 29-Jun-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Begin implementation of an inline spiller.

InlineSpiller inserts loads and spills immediately instead of deferring to
VirtRegMap. This is possible now because SlotIndexes allows instructions to be
i

Begin implementation of an inline spiller.

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

show more ...


1...<<1112