History log of /llvm-project/llvm/lib/CodeGen/MachineRegisterInfo.cpp (Results 126 – 150 of 188)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# fe445cd6 05-Jan-2013 Jakob Stoklund Olesen <stoklund@2pi.dk>

Add MachineRegisterInfo::moveOperands().

This function works like memmove() for MachineOperands, except it also
updates any use-def chains containing the moved operands.

The use-def chains are upda

Add MachineRegisterInfo::moveOperands().

This function works like memmove() for MachineOperands, except it also
updates any use-def chains containing the moved operands.

The use-def chains are updated without affecting the order of operands
in the list. That isn't possible when using the
removeRegOperandFromUseList() and addRegOperandToUseList() functions.

Callers to follow soon.

llvm-svn: 171597

show more ...


Revision tags: llvmorg-3.2.0, llvmorg-3.2.0-rc3, llvmorg-3.2.0-rc2
# ed119d54 28-Nov-2012 Chad Rosier <mcrosier@apple.com>

Revert r168630, r168631, and r168633 as these are causing nightly test failures.

llvm-svn: 168751


# 110b73e0 26-Nov-2012 Chad Rosier <mcrosier@apple.com>

Add an assertion to ensure freezeReservedRegs() is only ever called once.

llvm-svn: 168633


Revision tags: llvmorg-3.2.0-rc1
# 7a9f0c09 17-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Switch MRI::UsedPhysRegs to a register unit bit vector.

This is a more compact, less redundant representation, and it avoids
scanning long lists of aliases for ARM D-registers, for example.

llvm-sv

Switch MRI::UsedPhysRegs to a register unit bit vector.

This is a more compact, less redundant representation, and it avoids
scanning long lists of aliases for ARM D-registers, for example.

llvm-svn: 166124

show more ...


# 57e31061 15-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Freeze the reserved registers as soon as isel is complete.

Also provide an MRI::getReservedRegs() function to access the frozen
register set, and isReserved() and isAllocatable() methods to test
ind

Freeze the reserved registers as soon as isel is complete.

Also provide an MRI::getReservedRegs() function to access the frozen
register set, and isReserved() and isAllocatable() methods to test
individual registers.

The various implementations of TRI::getReservedRegs() are quite
complicated, and many passes need to look at the reserved register set.
This patch makes it possible for these passes to use the cached copy in
MRI, avoiding a lot of malloc traffic and repeated calculations.

llvm-svn: 165982

show more ...


# d9b66506 10-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Reapply r161633-161634 "Partition use lists so defs always come before uses.""

No changes to these patches, MRI needed to be notified when changing
uses into defs and vice versa.

llvm-svn: 161644


# acd27c92 09-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Revert r161633-161634 "Partition use lists so defs always come before uses."

These commits broke a number of buildbots.

llvm-svn: 161640


# df01e007 09-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Partition use lists so defs always come before uses.

This makes it possible to speed up def_iterator by stopping at the first
use. This makes def_empty() and getUniqueVRegDef() much faster when
ther

Partition use lists so defs always come before uses.

This makes it possible to speed up def_iterator by stopping at the first
use. This makes def_empty() and getUniqueVRegDef() much faster when
there are many uses.

In a +Asserts build, LiveVariables is 100x faster in one case because
getVRegDef() has an assertion that would scan to the end of a
def_iterator chain.

Spill weight calculation is significantly faster (300x in one case)
because isTriviallyReMaterializable() calls MRI->isConstantPhysReg(%RIP)
which calls def_empty(%RIP).

llvm-svn: 161634

show more ...


# 7d7051ca 09-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Don't use pointer-pointers for the register use lists.

Use a more conventional doubly linked list where the Prev pointers form
a cycle. This means it is no longer necessary to adjust the Prev
pointe

Don't use pointer-pointers for the register use lists.

Use a more conventional doubly linked list where the Prev pointers form
a cycle. This means it is no longer necessary to adjust the Prev
pointers when reallocating the VRegInfo array.

The test changes are required because the register allocation hint is
using the use-list order to break ties.

llvm-svn: 161633

show more ...


# c4102d49 09-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Move use list management into MachineRegisterInfo.

Register MachineOperands are kept in linked lists accessible via MRI's
reg_iterator interfaces. The linked list management was handled partly
by Ma

Move use list management into MachineRegisterInfo.

Register MachineOperands are kept in linked lists accessible via MRI's
reg_iterator interfaces. The linked list management was handled partly
by MachineOperand methods, partly by MRI methods.

Move all of the list management into MRI, delete
MO::AddRegOperandToRegInfo() and MO::RemoveRegOperandFromRegInfo().

Be more explicit about handling the cases where an MRI pointer isn't
available.

llvm-svn: 161632

show more ...


# 535a23c3 30-Jul-2012 Andrew Trick <atrick@apple.com>

Inline MachineRegisterInfo::hasOneUse

llvm-svn: 161007


# 72098b2c 02-Jul-2012 Manman Ren <mren@apple.com>

Added assertion in getVRegDef of MachineRegisterInfo to make sure the virtual
register does not have multiple definitions. Modified TwoAddressInstructionPass
to use getUniqueVRegDef instead of getVRe

Added assertion in getVRegDef of MachineRegisterInfo to make sure the virtual
register does not have multiple definitions. Modified TwoAddressInstructionPass
to use getUniqueVRegDef instead of getVRegDef.

llvm-svn: 159545

show more ...


# c146589a 29-Jun-2012 Manman Ren <mren@apple.com>

Add getUniqueVRegDef to MachineRegisterInfo.
This comes in handy during peephole optimization.

llvm-svn: 159453


# 54038d79 01-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Switch all register list clients to the new MC*Iterator interface.

No functional change intended.

Sorry for the churn. The iterator classes are supposed to help avoid
giant commits like this one in

Switch all register list clients to the new MC*Iterator interface.

No functional change intended.

Sorry for the churn. The iterator classes are supposed to help avoid
giant commits like this one in the future. The TableGen-produced
register lists are getting quite large, and it may be necessary to
change the table representation.

This makes it possible to do so without changing all clients (again).

llvm-svn: 157854

show more ...


Revision tags: llvmorg-3.1.0, llvmorg-3.1.0-rc3, llvmorg-3.1.0-rc2, llvmorg-3.1.0-rc1
# 9c1ad5cb 27-Mar-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Add an MRI::tracksLiveness() flag.

Late optimization passes like branch folding and tail duplication can
transform the machine code in a way that makes it expensive to keep the
register liveness inf

Add an MRI::tracksLiveness() flag.

Late optimization passes like branch folding and tail duplication can
transform the machine code in a way that makes it expensive to keep the
register liveness information up to date. There is a fuzzy line between
register allocation and late scheduling where the liveness information
degrades.

The MRI::tracksLiveness() flag makes the line clear: While true,
liveness information is accurate, and can be used for register
scavenging. Once the flag is false, liveness information is not
accurate, and can only be used as a hint.

Late passes generally don't need the liveness information, but they will
sometimes use the register scavenger to help update it. The scavenger
enforces strict correctness, and we have to spend a lot of code to
update register liveness that may never be used.

llvm-svn: 153511

show more ...


# 6338e61a 10-Mar-2012 Benjamin Kramer <benny.kra@googlemail.com>

Microoptimize getVRegDef. def_begin isn't free, don't compute it twice.

llvm-svn: 152492


# 1d326588 04-Mar-2012 Craig Topper <craig.topper@gmail.com>

Use uint16_t to store register overlaps to reduce static data.

llvm-svn: 152001


# da84e646 21-Feb-2012 Andrew Trick <atrick@apple.com>

Clear virtual registers after they are no longer referenced.

Passes after RegAlloc should be able to rely on MRI->getNumVirtRegs() == 0.
This makes sharing code for pre/postRA passes more robust.
No

Clear virtual registers after they are no longer referenced.

Passes after RegAlloc should be able to rely on MRI->getNumVirtRegs() == 0.
This makes sharing code for pre/postRA passes more robust.
Now, to check if a pass is running before the RA pipeline begins, use MRI->isSSA().
To check if a pass is running after the RA pipeline ends, use !MRI->getNumVirtRegs().

PEI resets virtual regs when it's done scavenging.

PTX will either have to provide its own PEI pass or assign physregs.

llvm-svn: 151032

show more ...


# a0cf42f2 17-Feb-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Transfer regmasks to MRI.

MRI keeps track of which physregs have been used. Make sure it gets
updated with all the regmask-clobbered registers.

Delete the closePhysRegsUsed() function which isn't n

Transfer regmasks to MRI.

MRI keeps track of which physregs have been used. Make sure it gets
updated with all the regmask-clobbered registers.

Delete the closePhysRegsUsed() function which isn't necessary.

llvm-svn: 150830

show more ...


# 86ae07f0 16-Jan-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Extract method for detecting constant unallocatable physregs.

It is safe to move uses of such registers.

llvm-svn: 148259


# d19d3cab 05-Jan-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Freeze reserved registers before starting register allocation.

The register allocators don't currently support adding reserved
registers while they are running. Extend the MRI API to keep track of

Freeze reserved registers before starting register allocation.

The register allocators don't currently support adding reserved
registers while they are running. Extend the MRI API to keep track of
the set of reserved registers when register allocation started.

Target hooks like hasFP() and needsStackRealignment() can look at this
set to avoid reserving more registers during register allocation.

llvm-svn: 147577

show more ...


# 8f9c6c4a 19-Dec-2011 Jakob Stoklund Olesen <stoklund@2pi.dk>

Handle sub-register operands in recomputeRegClass().

Now that getMatchingSuperRegClass() returns accurate results, it can be
used to compute constraints imposed by instructions using a sub-register

Handle sub-register operands in recomputeRegClass().

Now that getMatchingSuperRegClass() returns accurate results, it can be
used to compute constraints imposed by instructions using a sub-register
of a virtual register.

This means we can recompute the register class of any virtual register
by combining the constraints from all its uses.

llvm-svn: 146874

show more ...


Revision tags: llvmorg-3.0.0, llvmorg-3.0.0-rc4, llvmorg-3.0.0-rc3, llvmorg-3.0.0-rc2, llvmorg-3.0.0-rc1
# 068dc91d 12-Oct-2011 Jakob Stoklund Olesen <stoklund@2pi.dk>

Also inflate register classes around inline asm.

Now that MI->getRegClassConstraint() can also handle inline assembly,
don't bail when recomputing the register class of a virtual register
used by in

Also inflate register classes around inline asm.

Now that MI->getRegClassConstraint() can also handle inline assembly,
don't bail when recomputing the register class of a virtual register
used by inline asm.

This fixes PR11078.

llvm-svn: 141836

show more ...


# 1352be2b 30-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk>

Move getCommonSubClass() into TRI.

It will soon need the context.

llvm-svn: 140896


# 0f36544c 22-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk>

Add a MinNumRegs argument to MRI::constrainRegClass().

The function will refuse to use a register class with fewer registers
than MinNumRegs. This can be used by clients to avoid accidentally
incre

Add a MinNumRegs argument to MRI::constrainRegClass().

The function will refuse to use a register class with fewer registers
than MinNumRegs. This can be used by clients to avoid accidentally
increase register pressure too much.

The default value of MinNumRegs=0 doesn't affect how constrainRegClass()
works.

llvm-svn: 140339

show more ...


12345678