#
4b02a29e |
| 05-Mar-2012 |
Craig Topper <craig.topper@gmail.com> |
Convert more GenRegisterInfo tables from unsigned to uint16_t to reduce static data size.
llvm-svn: 152016
|
#
d3f8fe81 |
| 10-Feb-2012 |
Andrew Trick <atrick@apple.com> |
RegAlloc superpass: includes phi elimination, coalescing, and scheduling.
Creates a configurable regalloc pipeline.
Ensure specific llc options do what they say and nothing more: -reglloc=... has n
RegAlloc superpass: includes phi elimination, coalescing, and scheduling.
Creates a configurable regalloc pipeline.
Ensure specific llc options do what they say and nothing more: -reglloc=... has no effect other than selecting the allocator pass itself. This patch introduces a new umbrella flag, "-optimize-regalloc", to enable/disable the optimizing regalloc "superpass". This allows for example testing coalscing and scheduling under -O0 or vice-versa.
When a CodeGen pass requires the MachineFunction to have a particular property, we need to explicitly define that property so it can be directly queried rather than naming a specific Pass. For example, to check for SSA, use MRI->isSSA, not addRequired<PHIElimination>.
CodeGen transformation passes are never "required" as an analysis
ProcessImplicitDefs does not require LiveVariables.
We have a plan to massively simplify some of the early passes within the regalloc superpass.
llvm-svn: 150226
show more ...
|
#
808a7a6c |
| 03-Feb-2012 |
Andrew Trick <atrick@apple.com> |
whitespace
llvm-svn: 149671
|
#
64a2beca |
| 21-Jan-2012 |
Evan Cheng <evan.cheng@apple.com> |
Fix an obvious typo.
llvm-svn: 148622
|
#
8e3bb315 |
| 21-Jan-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Handle register masks in LiveVariables.
A register mask operand kills any live physreg that isn't preserved. Unlike an implicit-def operand, the clobbered physregs are never live afterwards.
This m
Handle register masks in LiveVariables.
A register mask operand kills any live physreg that isn't preserved. Unlike an implicit-def operand, the clobbered physregs are never live afterwards.
This means LiveVariables has to track a much smaller number of live physregs, and it should spend much less time in addRegisterDead().
llvm-svn: 148609
show more ...
|
#
52ee45d6 |
| 20-Jan-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Delete an unused member variable.
llvm-svn: 148594
|
#
6bb95253 |
| 14-Jan-2012 |
Evan Cheng <evan.cheng@apple.com> |
After r147827 and r147902, it's now possible for unallocatable registers to be live across BBs before register allocation. This miscompiled 197.parser when a cmp + b are optimized to a cbnz instructi
After r147827 and r147902, it's now possible for unallocatable registers to be live across BBs before register allocation. This miscompiled 197.parser when a cmp + b are optimized to a cbnz instruction even though the CPSR def is live-in a successor. cbnz r6, LBB89_12 ... LBB89_12: ble LBB89_1
The fix consists of two parts. 1) Teach LiveVariables that some unallocatable registers might be liveouts so don't mark their last use as kill if they are. 2) ARM constantpool island pass shouldn't form cbz / cbnz if the conditional branch does not kill CPSR.
rdar://10676853
llvm-svn: 148168
show more ...
|
#
7f8e563a |
| 07-Dec-2011 |
Evan Cheng <evan.cheng@apple.com> |
Add bundle aware API for querying instruction properties and switch the code generator to it. For non-bundle instructions, these behave exactly the same as the MC layer API.
For properties like mayL
Add bundle aware API for querying instruction properties and switch the code generator to it. For non-bundle instructions, these behave exactly the same as the MC layer API.
For properties like mayLoad / mayStore, look into the bundle and if any of the bundled instructions has the property it would return true. For properties like isPredicable, only return true if *all* of the bundled instructions have the property. For properties like canFoldAsLoad, isCompare, conservatively return false for bundles.
llvm-svn: 146026
show more ...
|
#
2a81dd4a |
| 06-Dec-2011 |
Evan Cheng <evan.cheng@apple.com> |
First chunk of MachineInstr bundle support. 1. Added opcode BUNDLE 2. Taught MachineInstr class to deal with bundled MIs 3. Changed MachineBasicBlock iterator to skip over bundled MIs; added an itera
First chunk of MachineInstr bundle support. 1. Added opcode BUNDLE 2. Taught MachineInstr class to deal with bundled MIs 3. Changed MachineBasicBlock iterator to skip over bundled MIs; added an iterator to walk all the MIs 4. Taught MachineBasicBlock methods about bundled MIs
llvm-svn: 145975
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 |
|
#
a41634e3 |
| 12-Aug-2011 |
Duncan Sands <baldrick@free.fr> |
Silence a bunch (but not all) "variable written but not read" warnings when building with assertions disabled.
llvm-svn: 137460
|
Revision tags: llvmorg-2.9.0, llvmorg-2.9.0-rc3, llvmorg-2.9.0-rc2 |
|
#
b8ca01ff |
| 08-Mar-2011 |
Benjamin Kramer <benny.kra@googlemail.com> |
Reduce vector reallocations.
llvm-svn: 127254
|
Revision tags: llvmorg-2.9.0-rc1 |
|
#
28d76692 |
| 08-Jan-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Use an IndexedMap for LiveVariables::VirtRegInfo.
Provide MRI::getNumVirtRegs() and TRI::index2VirtReg() functions to allow iteration over virtual registers without depending on the representation o
Use an IndexedMap for LiveVariables::VirtRegInfo.
Provide MRI::getNumVirtRegs() and TRI::index2VirtReg() functions to allow iteration over virtual registers without depending on the representation of virtual register numbers.
llvm-svn: 123098
show more ...
|
#
8ac477ff |
| 12-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Begin adding static dependence information to passes, which will allow us to perform initialization without static constructors AND without explicit initialization by the client. For the moment, pas
Begin adding static dependence information to passes, which will allow us to perform initialization without static constructors AND without explicit initialization by the client. For the moment, passes are required to initialize both their (potential) dependencies and any passes they preserve. I hope to be able to relax the latter requirement in the future.
llvm-svn: 116334
show more ...
|
#
df7a4f25 |
| 07-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Now with fewer extraneous semicolons!
llvm-svn: 115996
|
Revision tags: llvmorg-2.8.0, llvmorg-2.8.0-rc3, llvmorg-2.8.0-rc2, llvmorg-2.8.0-rc1, llvmorg-2.8.0-rc0 |
|
#
5f72a04b |
| 16-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove unused functions.
llvm-svn: 111156
|
#
a57b97e7 |
| 21-Jul-2010 |
Owen Anderson <resistor@mac.com> |
Fix batch of converting RegisterPass<> to INTIALIZE_PASS().
llvm-svn: 109045
|
#
0fc88efd |
| 14-Jun-2010 |
Chris Lattner <sabre@nondot.org> |
fix a -Wbool-conversions warning from clang.
llvm-svn: 105942
|
#
df1a7f83 |
| 05-Jun-2010 |
Dale Johannesen <dalej@apple.com> |
Fix some liveout handling related to tail calls, see comments. I don't think this ever resulted in problems on x86, but it would on ARM.
llvm-svn: 105509
|
Revision tags: llvmorg-2.7.0 |
|
#
9d2d053e |
| 13-Apr-2010 |
Dan Gohman <gohman@apple.com> |
Eliminate MachineBasicBlock::const_livein_iterator and make MachineBasicBlock::livein_iterator a const_iterator, because clients shouldn't ever be using the iterator interface to mutate the livein se
Eliminate MachineBasicBlock::const_livein_iterator and make MachineBasicBlock::livein_iterator a const_iterator, because clients shouldn't ever be using the iterator interface to mutate the livein set.
llvm-svn: 101147
show more ...
|
#
eb50ac5c |
| 26-Mar-2010 |
Evan Cheng <evan.cheng@apple.com> |
LiveVariables should clear kill / dead markers first. This allows us to remove a hack in the scheduler.
llvm-svn: 99597
|
#
2664d295 |
| 05-Mar-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Better handling of dead super registers in LiveVariables. We used to do this:
CALL ... %RAX<imp-def> ... [not using %RAX] %EAX = ..., %RAX<imp-use, kill> RET %EAX<imp-use,kill>
Now we d
Better handling of dead super registers in LiveVariables. We used to do this:
CALL ... %RAX<imp-def> ... [not using %RAX] %EAX = ..., %RAX<imp-use, kill> RET %EAX<imp-use,kill>
Now we do this:
CALL ... %RAX<imp-def, dead> ... [not using %RAX] %EAX = ... RET %EAX<imp-use,kill>
By not artificially keeping %RAX alive, we lower register pressure a bit.
The correct number of instructions for 2008-08-05-SpillerBug.ll is obviously 55, anybody can see that. Sheesh.
llvm-svn: 97838
show more ...
|
#
38b76e27 |
| 23-Feb-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Keep track of phi join registers explicitly in LiveVariables.
Previously, LiveIntervalAnalysis would infer phi joins by looking for multiply defined registers. That doesn't work if the phi join is i
Keep track of phi join registers explicitly in LiveVariables.
Previously, LiveIntervalAnalysis would infer phi joins by looking for multiply defined registers. That doesn't work if the phi join is implicitly defined in all but one of the predecessors.
llvm-svn: 96994
show more ...
|
#
b06015aa |
| 09-Feb-2010 |
Chris Lattner <sabre@nondot.org> |
move target-independent opcodes out of TargetInstrInfo into TargetOpcodes.h. #include the new TargetOpcodes.h into MachineInstr. Add new inline accessors (like isPHI()) to MachineInstr, and start u
move target-independent opcodes out of TargetInstrInfo into TargetOpcodes.h. #include the new TargetOpcodes.h into MachineInstr. Add new inline accessors (like isPHI()) to MachineInstr, and start using them throughout the codebase.
llvm-svn: 95687
show more ...
|
#
c3adf448 |
| 09-Feb-2010 |
Dale Johannesen <dalej@apple.com> |
Skip DEBUG_VALUE in some places where it was affecting codegen.
llvm-svn: 95647
|
#
d64b952e |
| 07-Jan-2010 |
Benjamin Kramer <benny.kra@googlemail.com> |
Remove dead variable.
llvm-svn: 92919
|