#
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 ...
|
#
3a48c064 |
| 30-May-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove some redundant tests.
An empty list is not represented as a null pointer. Let TRI do its own shortcuts.
llvm-svn: 157702
|
Revision tags: llvmorg-3.1.0, llvmorg-3.1.0-rc3 |
|
#
3c52f028 |
| 07-May-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add an MF argument to TRI::getPointerRegClass() and TII::getRegClass().
The getPointerRegClass() hook can return register classes that depend on the calling convention of the current function (ptr_r
Add an MF argument to TRI::getPointerRegClass() and TII::getRegClass().
The getPointerRegClass() hook can return register classes that depend on the calling convention of the current function (ptr_rc_tailcall).
So far, we have been able to infer the calling convention from the subtarget alone, but as we add support for multiple calling conventions per target, that no longer works.
Patch by Yiannis Tsiouris!
llvm-svn: 156328
show more ...
|
#
e89496fe |
| 04-May-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove extra comma in debug output.
llvm-svn: 156219
|
Revision tags: llvmorg-3.1.0-rc2 |
|
#
7111a630 |
| 20-Apr-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Print <def,read-undef> to avoid confusion.
The <undef> flag on a def operand only applies to partial register redefinitions. Only print the flag when relevant, and print it as <def,read-undef> to ma
Print <def,read-undef> to avoid confusion.
The <undef> flag on a def operand only applies to partial register redefinitions. Only print the flag when relevant, and print it as <def,read-undef> to make it clearer what it means.
llvm-svn: 155239
show more ...
|
Revision tags: llvmorg-3.1.0-rc1 |
|
#
80c540e6 |
| 31-Mar-2012 |
Rafael Espindola <rafael.espindola@gmail.com> |
Teach CodeGen's version of computeMaskedBits to understand the range metadata. This is the CodeGen equivalent of r153747. I tested that there is not noticeable performance difference with any combina
Teach CodeGen's version of computeMaskedBits to understand the range metadata. This is the CodeGen equivalent of r153747. I tested that there is not noticeable performance difference with any combination of -O0/-O2 /-g when compiling gcc as a single compilation unit.
llvm-svn: 153817
show more ...
|
#
97f889f4 |
| 17-Mar-2012 |
Benjamin Kramer <benny.kra@googlemail.com> |
MachineInstr: Inline the fast path (non-bundle instruction) of hasProperty.
This is particularly helpful as both arguments tend to be constants.
llvm-svn: 152991
|
#
d03878bd |
| 16-Mar-2012 |
Benjamin Kramer <benny.kra@googlemail.com> |
Limit the number of memory operands in MachineInstr to 2^16 and store the number in padding.
Saves one machine word on MachineInstr (88->80 bytes on x86_64, 48->44 on i386).
llvm-svn: 152930
|
#
5a4bcc74 |
| 08-Mar-2012 |
Craig Topper <craig.topper@gmail.com> |
Use uint16_t to store instruction implicit uses and defs. Reduces static data.
llvm-svn: 152301
|
#
636ee38a |
| 07-Mar-2012 |
Chandler Carruth <chandlerc@gmail.com> |
Try to clarify this comment some.
llvm-svn: 152221
|
#
962152ca |
| 07-Mar-2012 |
Chandler Carruth <chandlerc@gmail.com> |
Remove another outbreak of customized (and completely broken) hashing. This one is particularly annoying because the hashing algorithm is highly specialized, with a strange "equivalence" definition t
Remove another outbreak of customized (and completely broken) hashing. This one is particularly annoying because the hashing algorithm is highly specialized, with a strange "equivalence" definition that subsets the fields involved.
Still, this looks at the exact same set of data as the old code, but without bitwise or-ing over parts of it and other mixing badness. No functionality changed here. I've left a substantial fixme about the fact that there is a cleaner and more principled way to do this, but it requires making the equality definition actual stable for particular types...
llvm-svn: 152218
show more ...
|
#
1d326588 |
| 04-Mar-2012 |
Craig Topper <craig.topper@gmail.com> |
Use uint16_t to store register overlaps to reduce static data.
llvm-svn: 152001
|
#
d256c216 |
| 01-Mar-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Move getBundleStart() into MachineInstrBundle.h.
This allows the function to be inlined, and makes it suitable for use in getInstructionIndex().
Also provide a const version. C++ is great for touch
Move getBundleStart() into MachineInstrBundle.h.
This allows the function to be inlined, and makes it suitable for use in getInstructionIndex().
Also provide a const version. C++ is great for touch typing practice.
llvm-svn: 151782
show more ...
|
#
3eedcce9 |
| 17-Feb-2012 |
Lang Hames <lhames@gmail.com> |
Reverse iterator - should be incrementing rather than decrementing.
llvm-svn: 150778
|
#
923d199a |
| 15-Feb-2012 |
Lang Hames <lhames@gmail.com> |
Make LiveIntervals::handleMove() bundle aware.
llvm-svn: 150630
|
#
e7d3f441 |
| 14-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Handle regmasks in findRegisterDefOperandIdx().
Only accept register masks when looking for an 'overlapping' def. When Overlap is not set, the function searches for a proper definition of Reg.
This
Handle regmasks in findRegisterDefOperandIdx().
Only accept register masks when looking for an 'overlapping' def. When Overlap is not set, the function searches for a proper definition of Reg.
This means MI->modifiesRegister() considers register masks, but MI->definesRegister() doesn't.
llvm-svn: 150529
show more ...
|
#
bf152d57 |
| 10-Feb-2012 |
Benjamin Kramer <benny.kra@googlemail.com> |
Put instruction names into an indexed string table on the side, removing a pointer from MCInstrDesc.
Make them accessible through MCInstrInfo. They are only used for debugging purposes so this doesn
Put instruction names into an indexed string table on the side, removing a pointer from MCInstrDesc.
Make them accessible through MCInstrInfo. They are only used for debugging purposes so this doesn't have an impact on performance. X86MCTargetDesc.o goes from 630K to 461K on x86_64.
llvm-svn: 150245
show more ...
|
#
3bc0e0c6 |
| 08-Feb-2012 |
Andrew Trick <atrick@apple.com> |
Added MachineInstr::isBundled() to check if an instruction is part of a bundle.
llvm-svn: 150044
|
#
56fe2ed5 |
| 03-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Handle register mask operands in setPhysRegsDeadExcept().
Calls that use register mask operands don't have implicit defs for returned values. The register mask operand handles the call clobber, but
Handle register mask operands in setPhysRegsDeadExcept().
Calls that use register mask operands don't have implicit defs for returned values. The register mask operand handles the call clobber, but it always behaves like a set of dead defs.
Add live implicit defs for any implicitly defined physregs that are actually used.
llvm-svn: 149715
show more ...
|
#
4290be43 |
| 03-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
ArrayRef'ize MI::setPhysRegsDeadExcept().
llvm-svn: 149709
|
#
f650732c |
| 03-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Handle all live physreg defs in the same place.
SelectionDAG has 4 different ways of passing physreg defs to users. Collect all of the uses at the same time, and pass all of them to MI->setPhysRegsD
Handle all live physreg defs in the same place.
SelectionDAG has 4 different ways of passing physreg defs to users. Collect all of the uses at the same time, and pass all of them to MI->setPhysRegsDeadExcept() to mark the remaining defs dead.
The setPhysRegsDeadExcept() function will soon add the required implicit-defs to instructions with register mask operands.
llvm-svn: 149708
show more ...
|
#
5e1ac45b |
| 02-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Require non-NULL register masks.
It doesn't seem worthwhile to give meaning to a NULL register mask pointer. It complicates all the code using register mask operands.
llvm-svn: 149646
|
#
8c139a51 |
| 26-Jan-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Clear kill flags before propagating a copy.
The live range of the source register may be extended when a redundant copy is eliminated. Make sure any kill flags between the two copies are cleared.
T
Clear kill flags before propagating a copy.
The live range of the source register may be extended when a redundant copy is eliminated. Make sure any kill flags between the two copies are cleared.
This fixes PR11765.
llvm-svn: 149069
show more ...
|
#
374ed322 |
| 16-Jan-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add a new kind of MachineOperand: MO_RegisterMask.
Register masks will be used as a compact representation of large clobber lists. Currently, an x86 call instruction has some 40 operands representi
Add a new kind of MachineOperand: MO_RegisterMask.
Register masks will be used as a compact representation of large clobber lists. Currently, an x86 call instruction has some 40 operands representing call-clobbered registers. That's more than 1kB of useless operands per call site.
A register mask operand references a bit mask of call-preserved registers, everything else is clobbered. The bit mask will typically come from TargetRegisterInfo::getCallPreservedMask().
By abandoning ImplicitDefs for call-clobbered registers, it also becomes possible to share call instruction descriptions between calling conventions, and we can get rid of the WINCALL* instructions.
This patch introduces the new operand kind. Future patches will add RegMask support to target-independent passes before finally the fixed clobber lists can be removed from call instruction descriptions.
llvm-svn: 148250
show more ...
|
#
f3e8502c |
| 10-Jan-2012 |
Chandler Carruth <chandlerc@gmail.com> |
Add 'llvm_unreachable' to passify GCC's understanding of the constraints of several newly un-defaulted switches. This also helps optimizers (including LLVM's) recognize that every case is covered, an
Add 'llvm_unreachable' to passify GCC's understanding of the constraints of several newly un-defaulted switches. This also helps optimizers (including LLVM's) recognize that every case is covered, and we should assume as much.
llvm-svn: 147861
show more ...
|