fac259814923d091942b230e7bd002a8d1130bc3 |
|
08-Mar-2012 |
Craig Topper <craig.topper@gmail.com> |
Use uint16_t to store instruction implicit uses and defs. Reduces static data. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152301 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
e4fd907e72a599eddfa7a81eac4366b5b82523e3 |
|
04-Mar-2012 |
Craig Topper <craig.topper@gmail.com> |
Use uint16_t to store register overlaps to reduce static data. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152001 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
91ba63d230bfc3e035d2851d039e08f34f0b9bbd |
|
22-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
80 col. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151167 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
a240743ad954c657015b3ee3631e30fd6a2e86b2 |
|
22-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Use SparseSet for the RAFast live virtual register map. This makes RAFast 4% faster, and it gets rid of the dodgy DenseMap iteration. This also revealed that RAFast would sometimes dereference DenseMap iterators after erasing other elements from the map. That does seem to work in the current DenseMap implementation, but SparseSet doesn't allow it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151111 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
19273aec441411b4d571fdb87c6daa0fbe7a33a0 |
|
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. 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151032 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
d9f0ff56a1878347fe5a0f162ef8c2ef2b63aeb5 |
|
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 necessary. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150830 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
8dd26253f54247e77e5accfdd70e7b4bf27b39c2 |
|
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 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150226 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
ab78e20ce085763b4fc9948eaa715fb7e49341c8 |
|
31-Jan-2012 |
Andrew Trick <atrick@apple.com> |
Obvious unnecessary loop removal. Follow through from previous checkin. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149398 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
b3d58474c83499621ae1e2d76dc87587910abe55 |
|
31-Jan-2012 |
Andrew Trick <atrick@apple.com> |
RAFast: Generalize the logic for return operands. This removes implicit assumption about the form of MI coming into regalloc. In particular, it should be independent of ProcessImplicitDefs which will eventually become a standard part of coming out of SSA--unless we simply can eliminate IMPLICIT_DEF completely. Current unit tests expose this once I remove incidental pass ordering restrictions. This is not a final fix. Just a temporary workaround until I figure out the right way. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149360 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
d9e5c764bfea339fc5082bf17e558db959fd6d28 |
|
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 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147577 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
5a96b3dad2f634c9081c8b2b6c2575441dc5a2bd |
|
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 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146026 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
254a13282c97469973b4fa8cc0e110ed6160642c |
|
22-Nov-2011 |
Rafael Espindola <rafael.espindola@gmail.com> |
If a register is both an early clobber and part of a tied use, handle the use before the clobber so that we copy the value if needed. Fixes pr11415. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145056 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
d2df64f56970aa07d2d8733543e4baf6c7009e91 |
|
15-Nov-2011 |
Devang Patel <dpatel@apple.com> |
Insert modified DBG_VALUE into LiveDbgValueMap. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144696 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
9d812a2805161665d56a78734da98b58f39ce0fc |
|
02-Jul-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Better diagnostics when inline asm fails to allocate. asm.c:2:7: error: ran out of registers during register allocation asm(""::"r"(0), "r"(1), "r"(2), "r"(3), "r"(4), "r"(5), "r"(6), "r"(7), "r"(8), "r"(9)); ^ git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134310 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
e837dead3c8dc3445ef6a0e2322179c57e264a13 |
|
28-Jun-2011 |
Evan Cheng <evan.cheng@apple.com> |
- Rename TargetInstrDesc, TargetOperandInfo to MCInstrDesc and MCOperandInfo and sink them into MC layer. - Added MCInstrInfo, which captures the tablegen generated static data. Chang TargetInstrInfo so it's based off MCInstrInfo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134021 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
27ce3b96e51887995f94d8c78a6c7e79bf7cdcdd |
|
28-Jun-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Print registers by name instead of by number. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134013 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
6f373a87cba3b0c88bc76bf1d03ee5f81143764f |
|
22-Jun-2011 |
Devang Patel <dpatel@apple.com> |
After register is spilled there should not be any DBG_VALUE referring the same register. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133569 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
72d9b0e4fce90a635af5c80cb6992ac639279d59 |
|
22-Jun-2011 |
Devang Patel <dpatel@apple.com> |
There could be more than one DBG_VALUE instructions for variables where all of them have offset based on one register. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133560 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
5e5ed4457749995b46d46e9769e657fcc0818e2c |
|
13-Jun-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Be less aggressive about hinting in RAFast. In particular, don't spill dirty registers only to satisfy a hint. It is not worth it. The attached test case provides an example where the fast allocator would spill a register when other registers are available. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132900 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
448ab3ab395ffc9e7fc04d2d6afb41fcac74070d |
|
03-Jun-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Avoid calling TRI->getAllocatableSet in RAFast. When compiling a program with lots of small functions like 483.xalancbmk, this makes RAFast 11% faster. Add some comments to clarify the difference between unallocatable and reserved registers. It's quite subtle. The fast register allocator depends on EFLAGS' not being allocatable on x86. That way it can completely avoid tracking liveness, and it won't mind when there are multiple uses of a single def. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132514 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
5d20c3152bd7fe91eda1b58a5eb6da7067874c61 |
|
02-Jun-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Use RegisterClassInfo::getOrder in RAFast. This saves two virtual function calls and an Allocatable BitVector test, making RAFast run 2% faster. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132471 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
d8a16241229a6d3f761e2e9fd19cbe08e614f113 |
|
22-Apr-2011 |
Evan Cheng <evan.cheng@apple.com> |
Typo git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129970 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
d574bb5a6ee6cbe4d2387e4fa7f7f5ab099ea05f |
|
18-Apr-2011 |
Eric Christopher <echristo@apple.com> |
Fix a bug where we were counting the alias sets as completely used registers for fast allocation a different way. This has us updating used registers only when we're using that exact register. Fixes rdar://9207598 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129711 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
d31df87f41891c9ea459282c666c6e1cab9bd4c7 |
|
13-Apr-2011 |
Eric Christopher <echristo@apple.com> |
Temporarily revert r129408 to see if it brings the bots back. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129417 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
8e98de9979fa08dac650bc6ae884e809da2cfdaa |
|
13-Apr-2011 |
Eric Christopher <echristo@apple.com> |
Fix a bug where we were counting the alias sets as completely used registers for fast allocation. Fixes rdar://9207598 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129408 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
0b756349a718e046abba84c316877a682eb0ff2f |
|
13-Apr-2011 |
Eric Christopher <echristo@apple.com> |
Add more comments... err debug statements to the fast allocator. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129400 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
bbfc3b30986ff89487350cade99ea7c90e2c8165 |
|
12-Apr-2011 |
Eric Christopher <echristo@apple.com> |
Fix typo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129334 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
c57ef561423f1ac7f2db5b1840d5681f18a4c0c8 |
|
04-Feb-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Mark that the return is using EAX so that we don't use it for some other purpose. Fixes PR9080! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124903 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
c9df025e33ac435adb3b3318d237c36ca7cec659 |
|
10-Jan-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Simplify a bunch of isVirtualRegister() and isPhysicalRegister() logic. These functions not longer assert when passed 0, but simply return false instead. No functional change intended. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123155 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
42e9c963921776cb498c33b6c6c03f29971316f3 |
|
09-Jan-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove MachineRegisterInfo::getLastVirtReg(), it was giving wrong results when no virtual registers have been allocated. It was only used to resize IndexedMaps, so provide an IndexedMap::resize() method such that Map.grow(MRI.getLastVirtReg()); can be replaced with the simpler Map.resize(MRI.getNumVirtRegs()); This works correctly when no virtuals are allocated, and it bypasses the to/from index conversions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123130 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
4314268128be6d54c9a7f0709680e5a5b40f3ab3 |
|
09-Jan-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Replace TargetRegisterInfo::printReg with a PrintReg class that also works without a TRI instance. Print virtual registers numbered from 0 instead of the arbitrary FirstVirtualRegister. The first virtual register is printed as %vreg0. TRI::NoRegister is printed as %noreg. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123107 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
f299da8ec3fee88a1b275560a7f94be4cf10d089 |
|
08-Dec-2010 |
Eric Christopher <echristo@apple.com> |
Fix comment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121285 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
081c34b725980f995be9080eaec24cd3dfaaf065 |
|
19-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize the pass's dependencies. Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h before parsing commandline arguments. I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass registration/creation, please send the testcase to me directly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116820 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
4bafda9618f9dfa9edc8da08bb3001ef2d1a9b68 |
|
10-Sep-2010 |
Devang Patel <dpatel@apple.com> |
Add DEBUG message. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113614 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
ee72651df4b783c973bb682bef7eab2ff9a703e2 |
|
03-Sep-2010 |
Jim Grosbach <grosbach@apple.com> |
previous patch was a little too tricky for its own good. Don't try to overload UserInInstr. Explicitly check Allocatable. The early exit in the condition will mean the performance impact of the extra test should be minimal. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113016 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
1f758831cbbdbfcb0cf164959b08b8219deac018 |
|
01-Sep-2010 |
Jim Grosbach <grosbach@apple.com> |
The register allocator shouldn't consider allocating reserved registers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112728 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
07cb689d6260b78861d829bb05b188e1558c528e |
|
01-Sep-2010 |
Jim Grosbach <grosbach@apple.com> |
tidy up a few 80-column and trailing whitespace bits. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112726 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
9d4b51b696e27b9c061955d4c76f9dbff529b143 |
|
31-Aug-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Ignore unallocatable registers in RegAllocFast. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112632 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
24a1182184336c088f70e86191ebda47df629beb |
|
21-Aug-2010 |
Eli Friedman <eli.friedman@gmail.com> |
Delete dead comment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111744 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
90c579de5a383cee278acc3f7e7b9d0a656e6a35 |
|
06-Aug-2010 |
Owen Anderson <resistor@mac.com> |
Reapply r110396, with fixes to appease the Linux buildbot gods. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110460 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
31defcf2349916ac759be33baaa4060703fd78df |
|
06-Aug-2010 |
Devang Patel <dpatel@apple.com> |
While emitting DBG_VALUE for registers spilled at the end of a block do not use location of MBB->end(). If a block does not have terminator then incoming iterator points to end(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110411 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
1f74590e9d1b9cf0f1f81a156efea73f76546e05 |
|
06-Aug-2010 |
Owen Anderson <resistor@mac.com> |
Revert r110396 to fix buildbots. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110410 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
9ccaf53ada99c63737547c0235baeb8454b04e80 |
|
06-Aug-2010 |
Owen Anderson <resistor@mac.com> |
Don't use PassInfo* as a type identifier for passes. Instead, use the address of the static ID member as the sole unique type identifier. Clean up APIs related to this change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110396 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
459a36bd34809ffc5d74de79b3e46f6e02e5184f |
|
04-Aug-2010 |
Devang Patel <dpatel@apple.com> |
While spilling live registers at the end of block check whether they are used by DBG_VALUE machine instructions or not. If a spilled register is used by DBG_VALUE machine instruction then insert a new DBG_VALUE machine instruction to encode variable's new location on stack. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110235 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
4bd94f7bbe2ed6e0d83d03b06c0d20bb346abeca |
|
29-Jul-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Fix a bug in the -regalloc=fast handling of exotic two-address instruction with multiple defs, like t2LDRSB_POST. The first def could accidentally steal the physreg that the second, tied def was required to be allocated to. Now, the tied use-def is treated more like an early clobber, and the physreg is reserved before allocating the other defs. This would never be a problem when the tied def was the only def which is the usual case. This fixes MallocBench/gs for thumb2 -O0. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109715 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
58b8176ed39038240984c0966fef847fe37c86c1 |
|
20-Jul-2010 |
Devang Patel <dpatel@apple.com> |
Fix memory leak reported by valgrind. Do not visit operands of old instruction. Visit all operands of new instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108767 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
04c528a0c86ddf3d6a70681f72e1b2ec07b0b53a |
|
16-Jul-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove many calls to TII::isMoveInstr. Targets should be producing COPY anyway. TII::isMoveInstr is going tobe completely removed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108507 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
7a029b6d7e58cb0f1010f14d99d7661e387cfb54 |
|
09-Jul-2010 |
Devang Patel <dpatel@apple.com> |
Update DBG_VALUE to refer appropriate stack slot in case of a spill. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108023 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
273f7e42994a5bce0614d04d96dbfdf05fd652e5 |
|
03-Jul-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Detect and handle COPY in many places. This code is transitional, it will soon be possible to eliminate isExtractSubreg, isInsertSubreg, and isMoveInstr in most places. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107547 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
d1303d2a66241c70e0e35dac371636c883235df8 |
|
29-Jun-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Fix the handling of partial redefines in the fast register allocator. A partial redefine needs to be treated like a tied operand, and the register must be reloaded while processing use operands. This fixes a bug where partially redefined registers were processed as normal defs with a reload added. The reload could clobber another use operand if it was a kill that allowed register reuse. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107193 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
d843b3925fdc275b262ddc2ff8fabc8c98f9a5a0 |
|
28-Jun-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add more special treatment for inline asm in RegAllocFast. When an instruction has tied operands and physreg defines, we must take extra care that the tied operands conflict with neither physreg defs nor uses. The special treatment is given to inline asm and instructions with tied operands / early clobbers and physreg defines. This fixes PR7509. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107043 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
75ac4d9c2dfb22f84da25dec03df7a07f3dad1fa |
|
15-Jun-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Avoid processing early clobbers twice in RegAllocFast. Early clobbers defining a virtual register were first alocated to a physreg and then processed as a physreg EC, spilling the virtreg. This fixes PR7382. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105998 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
6de07178e1e6445080bf4f7704e274c5f219ff70 |
|
04-Jun-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Keep track of the call instructions whose clobber lists were skipped during fast register allocation. Process all of the clobber lists at the end of the function, marking the registers as used in MachineRegisterInfo. This is necessary in case the calls clobber callee-saved registers (sic). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105473 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
d32e735ae6e3fbebcae9a23d7cda091770bb3a14 |
|
19-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add support for partial redefs to the fast register allocator. A partial redef now triggers a reload if required. Also don't add <imp-def,dead> operands for physical superregisters. Kill flags are still treated as full register kills, and <imp-use,kill> operands are added for physical superregisters as before. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104167 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
0eeb05c969c6c314ca7991a10627451762787e2d |
|
18-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Properly handle multiple definitions of a virtual register in the same instruction. This can happen on ARM: >> %reg1035:5<def>, %reg1035:6<def> = VLD1q16 %reg1028, 0, pred:14, pred:%reg0 Regs: Q0=%reg1032* R0=%reg1028* R1=%reg1029* R2 R3=%reg1031* Killing last use: %reg1028 Allocating %reg1035 from QPR Assigning %reg1035 to Q1 << %D2<def>, %D3<def> = VLD1q16 %R0<kill>, 0, pred:14, pred:%reg0, %Q1<imp-def> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104056 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
b8acb7be804c8c537f2475f3a24303a0b37ab107 |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Pull the UsedInInstr.test() calls into calcSpillCost() and remember aliases. This fixes the miscompilations of MultiSource/Applications/JM/l{en,de}cod. Clang now successfully self hosts in a debug build with the fast register allocator. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103975 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
2997985b4cafc2a1e562819a2f3e0c6abe5fb223 |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove debug option. Add comment on spill order determinism. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103961 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
aa4b0159dacf12e48a60d66229dfd2b19406da87 |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Avoid allocating the same physreg to multiple virtregs in one instruction. While that approach works wonders for register pressure, it tends to break everything. This should unbreak the arm-linux builder and fix a number of miscompilations. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103946 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
f3ea06b108d45c53dade87d6f1f48ac0a0e20562 |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Minor optimizations. DenseMap::begin() is surprisingly slow on an empty map. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103940 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
548643c573d53950e28e9e810cd0454ba9a21af0 |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Extract spill cost calculation to a new method, and use definePhysReg() to clear out aliases when allocating. Clean up allocVirtReg(). Use calcSpillCost() to allow more aggressive hinting. Now the hint is always taken unless blocked by a reserved register. This leads to more coalescing, lower register pressure, and less spilling. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103939 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
0c9e4f5f3ff139733d74462a0ad5b94014e764a8 |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Only use clairvoyance when defining a register, and then only if it has one use. This makes allocation independent on the ordering of use-def chains. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103935 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
646dd7c899ea213301e193a25536a4bceebf7937 |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Eliminate a hash table probe when killing virtual registers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103934 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
ac3e529831877cea609ed668f95b1dc06e34698c |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Execute virtreg kills immediately instead of after processing all uses. This is safe to do because the physreg has been marked UsedInInstr and the kill flag will be set on the last operand using the virtreg if there are more then one. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103933 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
41e1401de5cb8752fb9d06e65e62bfe97cc1304e |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Sprinkle superregister <imp-def> and <imp-kill> operands when dealing with subregister indices. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103931 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
4b6bbe885d851b1cfba2be9b5efc6365a2b7828a |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Now that we don't keep live registers across calls, there is not reason to go through the very long list of call-clobbered registers. We just assume all registers are clobbered. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103930 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
844db9cc6f1a9458b60b8debeef3132f555dcd8f |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Boldly attempt consistent capitalization. Functional changes unintended. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103929 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
e6aba837974f7d2539efad9a09fe06b4d1566e5d |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Spill and kill all virtual registers across a call. Debug code doesn't use callee saved registers anyway, and the code is simpler this way. Now spillVirtReg always kills, and the isKill parameter is not needed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103927 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
01dcbf850732790fe7d5b5ed23426d535b07f316 |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Reduce hashtable probes by using DenseMap::insert() for lookup. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103926 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
6fb69d85e9576445e98c4114ee7064deb4476712 |
|
17-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Make MBB a class member instead of passing it around everywhere. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103925 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
2c13ab2bb840295ffba5f28bb1df7aa0b8d9736e |
|
15-May-2010 |
Chandler Carruth <chandlerc@gmail.com> |
Fix an GCC warning that seems to have actually caught a bug (!!!) in a condition's grouping. Every other use of Allocatable.test(Hint) groups it the same way as it is indented, so move the parentheses to agree with that grouping. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103869 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
1e03ff42433afe3a9ffad2765b537f10db3aa921 |
|
15-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Calculate liveness on the fly for local registers. When working top-down in a basic block, substituting physregs for virtregs, the use-def chains are kept up to date. That means we can recognize a virtreg kill by the use-def chain becoming empty. This makes the fast allocator independent of incoming kill flags. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103866 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
6a6328ba3d007b2e5a71131793179ef96d4bee7d |
|
15-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Don't bother spilling before a return git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103831 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
efa155fd6e3820495205a09f8b9f20390d126153 |
|
15-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Track allocatable instead of reserved regs, and never take an unallocatable hint. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103828 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
e97dda4fc58ee401ebb4aa9153d10f8ce8ba9a70 |
|
14-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Avoid scanning the long tail of physreg operands on calls git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103823 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
8a65c510a4fa1245d101da6318618d025702028c |
|
14-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Count coalesced copies git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103821 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
a0e618de5d9b40e5b5189c299086487e5ad767f2 |
|
14-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Allow virtreg redefines when verifying for RegAllocFast git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103820 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
1b2c761a9cc9a57b417c676f4bd97d11b6ba1869 |
|
14-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
When verifying two-address instructions, check the following: - Kill is implicit when use and def registers are identical. - Only virtual registers can differ. Add a -verify-fast-regalloc to run the verifier before the fast allocator. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103797 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
4ed10826833701b14064f55b6514289e0a7ff5ef |
|
14-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Simplify the handling of physreg defs and uses in RegAllocFast. This adds extra security against using clobbered physregs, and it adds kill markers to physreg uses. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103784 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
7ff82e1501c416552125f77a62edebe576e469b0 |
|
14-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Enable opportunistic coalescing git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103764 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
57b6076d343e03237ea8b56ab291f488cc97300f |
|
14-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Trust kill flags from isel and later passes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103748 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
7d4f25904de543b039a28eddbea3034a5d80e7f8 |
|
14-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Fix an embarrassing runtime regression for RegAllocFast. This loop is quadratic in the capacity for a DenseMap: while(!map.empty()) map.erase(map.begin()); Instead we now do a normal begin() - end() iteration followed by map.clear(). That also has the nice sideeffect of shrinking the map capacity on demand. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103747 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
c9c4dacd03a4b80d61ed6b9c6ffeb1b1f76b8d1c |
|
13-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Clean up RegAllocFast debug output git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103739 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
4bf4bafcced902ee6d58a90486768f08a3795d02 |
|
13-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Take allocation hints from copy instructions to/from physregs. This causes way more identity copies to be generated, ripe for coalescing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103686 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
63e34f690c511a146b936435f84ee76fda154f7c |
|
13-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
More asserts around physreg uses git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103685 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
804291e31658d46fb1db5ecaf42b31950c02a6f2 |
|
12-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Make sure to add kill flags to the last use of a virtreg when it is redefined. The X86 floating point stack pass and others depend on good kill flags. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103635 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
1a1ad578a3f925dfda58874156fd154fa1d941ea |
|
12-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Avoid scoping issues, fix buildbots git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103530 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
0efd768aeac9576e9a8ebb8a693f4a00bc6ecbbc |
|
12-May-2010 |
Daniel Dunbar <daniel@zuster.org> |
Make Clang happy. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103528 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
210e2afcc74e8ce5102d13939b23040fafa71c09 |
|
12-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Store the Dirty bit in the LiveReg structure instead of a bit vector. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103522 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
76b4d5a0210f161c08543f00f355955c94d3f2ec |
|
12-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Keep track of the last place a live virtreg was used. This allows us to add accurate kill markers, something the scavenger likes. Add some more tests from ARM that needed this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103521 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
82b07dc4995d48065bd95affff4d8513a5cad4f2 |
|
11-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Simplify the tracking of used physregs to a bulk bitor followed by a transitive closure after allocating all blocks. Add a few more test cases for -regalloc=fast. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103500 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
bbf33b38aaaa6cdbdd2c6a595aa081734308ce83 |
|
11-May-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Mostly rewrite RegAllocFast. Sorry for the big change. The path leading up to this patch had some TableGen changes that I didn't want to commit before I knew they were useful. They weren't, and this version does not need them. The fast register allocator now does no liveness calculations. Instead it relies on kill flags provided by isel. (Currently those kill flags are also ignored due to isel bugs). The allocation algorithm is supposed to work with any subset of valid kill flags. More kill flags simply means fewer spills inserted. Registers are allocated from a working set that contains no aliases. That means most allocations can be done directly without expensive alias checks. When the working set runs out of registers we do the full alias check to find new free registers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103488 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
31b9c44cc13bb686010cf6bfbeef8745c39939b9 |
|
11-May-2010 |
Evan Cheng <evan.cheng@apple.com> |
It's not safe eliminate copies where src and dst have different sub-register indices. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103450 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
746ad69e088176819981b4b2c5ac8dcd49f5e60e |
|
06-May-2010 |
Evan Cheng <evan.cheng@apple.com> |
Add argument TargetRegisterInfo to loadRegFromStackSlot and storeRegToStackSlot. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103193 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
a063e19593800142afaef5389f35605da901b805 |
|
22-Apr-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Run LiveVariables instead of computing liveness locally in -regalloc=fast. This actually makes everything slower, but the plan is to have isel add <kill> flags the way it is already adding <dead> flags. Then LiveVariables can be removed again. When ignoring the time spent in LiveVariables, -regalloc=fast is now twice as fast as -regalloc=local. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102034 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|
00207237ddfffe93b275914d086a0c7da1bbf63b |
|
21-Apr-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add fast register allocator, enabled with -regalloc=fast. So far this is just a clone of -regalloc=local that has been lobotomized to run 25% faster. It drops the least-recently-used calculations, and is just plain stupid when it runs out of registers. The plan is to make this go even faster for -O0 by taking advantage of the short live intervals in unoptimized code. It should not be necessary to calculate liveness when most virtual registers are killed 2-3 instructions after they are born. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102006 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/RegAllocFast.cpp
|