History log of /llvm-project/llvm/lib/CodeGen/SplitKit.cpp (Results 226 – 250 of 293)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# cbbd8192 03-Nov-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Tag debug output as regalloc

llvm-svn: 118193


# 1e32688e 01-Nov-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

When inserting copies during splitting, always use the parent register as the
source, and let rewrite() clean it up.

This way, kill flags on the inserted copies are fixed as well during rewrite().

When inserting copies during splitting, always use the parent register as the
source, and let rewrite() clean it up.

This way, kill flags on the inserted copies are fixed as well during rewrite().

We can't just assume that all the copies we insert are going to be kills since
critical edges into loop headers sometimes require both source and dest to be
live out of a block.

llvm-svn: 117980

show more ...


# a5d4b4ff 01-Nov-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Update kill flags while rewriting instructions after splitting.

llvm-svn: 117959


# 0cfc497f 30-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Make sure copies are inserted after any exception handling labels at the top of
a basic block.

llvm-svn: 117764


# 140542fc 29-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Don't transfer unused values to the new intervals formed by splitting.

llvm-svn: 117673


# 25ed920b 29-Oct-2010 Benjamin Kramer <benny.kra@googlemail.com>

Silence Release build warnings.

llvm-svn: 117671


# 2cdca458 29-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Never propagate the idom value out of a block that defines its own value.

llvm-svn: 117669


# c9f90c2a 28-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Replace SplitKit SSA update with an iterative algorithm very similar to the one
in SSAUpdaterImpl.h

Verifying live intervals revealed that the old method was completely wrong, and
we need an iterati

Replace SplitKit SSA update with an iterative algorithm very similar to the one
in SSAUpdaterImpl.h

Verifying live intervals revealed that the old method was completely wrong, and
we need an iterative approach to calculating PHI placemant. Fortunately, we have
MachineDominators available, so we don't have to compute that over and over
like SSAUpdaterImpl.h must.

Live-out values are cached between calls to mapValue() and computed in a greedy
way, so most calls will be working with very small block sets.

Thanks to Bob for explaining how this should work.

llvm-svn: 117599

show more ...


# e172a8b7 28-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Make MachineDominators available for SplitEditor. We are going to need it for
proper SSA updating.

This doesn't cause MachineDominators to be recomputed since we are already
requiring MachineLoopInf

Make MachineDominators available for SplitEditor. We are going to need it for
proper SSA updating.

This doesn't cause MachineDominators to be recomputed since we are already
requiring MachineLoopInfo which uses dominators as well.

llvm-svn: 117598

show more ...


# 79e1407c 27-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Handle critical loop predecessors by making both inside and outside registers
live out.

This doesn't prevent us from inserting a loop preheader later on, if that is
better.

llvm-svn: 117424


# 795ed981 27-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Compute critical loop predecessors in the same way as critical loop exits.

Critical edges going into a loop are not as bad as critical exits. We can handle
them by splitting the critical edge, or by

Compute critical loop predecessors in the same way as critical loop exits.

Critical edges going into a loop are not as bad as critical exits. We can handle
them by splitting the critical edge, or by having both inside and outside
registers live out of the predecessor.

llvm-svn: 117423

show more ...


# e4f3317c 26-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

After splitting, compute connected components of all new registers, not just for
the remainder register.

Example:

bb0:
x = 1
bb1:
use(x)
...
x = 2
jump bb1

When x is isolated in bb1, the

After splitting, compute connected components of all new registers, not just for
the remainder register.

Example:

bb0:
x = 1
bb1:
use(x)
...
x = 2
jump bb1

When x is isolated in bb1, the inner part breaks into two components, x1 and x2:

bb0:
x0 = 1
bb1:
x1 = x0
use(x1)
...
x2 = 2
x0 = x2
jump bb1

llvm-svn: 117408

show more ...


# 022e7795 26-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Call RenumberValues for all new registers created during splitting. This is
necessary to get correct hasPHIKill flags.

llvm-svn: 117406


# 4453324e 26-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Preserve PHIDef bits in cloned values during splitting.

llvm-svn: 117405


# 4cf8fe31 22-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Be more strict about detecting multi-use blocks for isolation.

When a block has exactly two uses and the register is both live-in and live-out,
don't isolate the block. We would be inserting two cop

Be more strict about detecting multi-use blocks for isolation.

When a block has exactly two uses and the register is both live-in and live-out,
don't isolate the block. We would be inserting two copies, so we haven't really
made any progress.

If the live-in and live-out values separate into disconnected components after
splitting, we would be making progress. We can't detect that for now.

llvm-svn: 117169

show more ...


# 2d600755 22-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Be more strict when detecting critical edges before loop splitting.

An exit block with a critical edge must only have predecessors in the loop, or
just before the loop. This guarantees that the inse

Be more strict when detecting critical edges before loop splitting.

An exit block with a critical edge must only have predecessors in the loop, or
just before the loop. This guarantees that the inserted copies in the loop
predecessors dominate the exit block.

llvm-svn: 117144

show more ...


# 9a743016 22-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Add print methods

llvm-svn: 117143


# f4bbe50f 21-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Don't include the destination interval in the union when computing
Parent - union(Y, ...). Doh.

llvm-svn: 117042


# 3f1f7b67 15-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Eliminate curli from SplitEditor. Use the LiveRangeEdit reference instead.

llvm-svn: 116547


# 0f3e98ce 15-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Move stack slot assignments into LiveRangeEdit.

All registers created during splitting or spilling are assigned to the same
stack slot as the parent register.

When splitting or rematting, we may no

Move stack slot assignments into LiveRangeEdit.

All registers created during splitting or spilling are assigned to the same
stack slot as the parent register.

When splitting or rematting, we may not spill at all. In that case the stack
slot is still assigned, but it will be dead.

llvm-svn: 116546

show more ...


# 72911e49 14-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Create a new LiveRangeEdit class to keep track of the new registers created when
splitting or spillling, and to help with rematerialization.

Use LiveRangeEdit in InlineSpiller and SplitKit. This wil

Create a new LiveRangeEdit class to keep track of the new registers created when
splitting or spillling, and to help with rematerialization.

Use LiveRangeEdit in InlineSpiller and SplitKit. This will eventually make it
possible to share remat code between InlineSpiller and SplitKit.

llvm-svn: 116543

show more ...


# f1131801 14-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Only split around a loop if the live range has uses outside the loop periphery.

Before we would also split around a loop if any peripheral block had multiple
uses. This could cause repeated splittin

Only split around a loop if the live range has uses outside the loop periphery.

Before we would also split around a loop if any peripheral block had multiple
uses. This could cause repeated splitting when splitting a different live range
would insert uses into the periphery.

Now -spiller=inline passes the nightly test suite again.

llvm-svn: 116494

show more ...


# 959fcc6c 08-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Rename SplitEditor::rewrite to finish() and break it out into a couple of new
functions: computeRemainder and rewrite.

When the remainder breaks up into multiple components, remember to rewrite thos

Rename SplitEditor::rewrite to finish() and break it out into a couple of new
functions: computeRemainder and rewrite.

When the remainder breaks up into multiple components, remember to rewrite those
uses as well.

llvm-svn: 116121

show more ...


# 0f1677e1 07-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

After splitting, the remaining LiveInterval may be fragmented into multiple
connected components. These components should be allocated different virtual
registers because there is no reason for them

After splitting, the remaining LiveInterval may be fragmented into multiple
connected components. These components should be allocated different virtual
registers because there is no reason for them to be allocated together.

Add the ConnectedVNInfoEqClasses class to calculate the connected components,
and move values to new LiveIntervals.

Use it from SplitKit::rewrite by creating new virtual registers for the
components.

llvm-svn: 116006

show more ...


# 9bfd9679 07-Oct-2010 Jakob Stoklund Olesen <stoklund@2pi.dk>

Print more loop info.

llvm-svn: 115951


12345678910>>...12