llvm/lib/CodeGen
Chris Lattner 7fb64347d7 Substantially revamp the local spiller, causing it to actually improve the
generated code over the simple spiller.  The new local spiller generates
substantially better code than the simple one in some cases, by reusing
values that are loaded out of stack slots and kept available in registers.

This primarily helps programs that are spilling a lot, and there is still
stuff that can be done to improve it.  This patch makes the local spiller
the default, as it's only a tiny bit slower than the simple spiller (it
increases the runtime of llc by < 1%).

Here are some numbers with speedups.

Program    #reuse  old(s)    new(s)  Speedup

Povray:     3452,  16.87 ->  15.93   (5.5%)
177.mesa:   2176,   2.77 ->   2.76   (0%)
179.art:      35,  28.43 ->  28.01   (1.5%)
183.equake:   55,  61.44 ->  61.41   (0%)
188.ammp:    869, 174    -> 149      (15%)

164.gzip:     43,  40.73 ->  40.71   (0%)
175.vpr:     351,  18.54 ->  17.34   (6.5%)
176.gcc:    2471,   5.01 ->   4.92   (1.8%)
181.mcf       42,  79.30 ->  75.20   (5.2%)
186.crafty:  484,  29.73 ->  30.04   (-1%)
197.parser:  251,  10.47 ->  10.67   (-1%)
252.eon:    1501,   1.98 ->   1.75   (12%)
253.perlbm: 1183,  14.83 ->  14.42   (2.8%)
254.gap:     825,   7.46 ->   7.29   (2.3%)
255.vortex:  285,  10.51 ->  10.27   (2.3%)
256.bzip2:    63,  55.70 ->  55.20   (0.9%)
300.twolf:   830,  21.63 ->  22.00   (-1%)

PtrDist/ks    14,  32.75 -> 17.53    (46.5%)
Olden/tsp     46,   8.71 ->  8.24    (5.4%)
Free/distray  70,   1.09 ->  0.99    (9.2%)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16629 91177308-0d34-0410-b5e6-96231b3b80d8
2004-10-01 19:04:51 +00:00
..
InstrSched Add includes and use std:: for standard library calls to make code 2004-09-28 14:42:44 +00:00
ModuloScheduling Add includes and use std:: for standard library calls to make code 2004-09-28 14:42:44 +00:00
SelectionDAG Add #include <iostream> since Value.h does not #include it any more. 2004-07-04 12:19:56 +00:00
AsmPrinter.cpp Do not use .xword and friends to emit zeros on V9. Apparently there are issues 2004-08-24 00:26:11 +00:00
BranchFolding.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
IntrinsicLowering.cpp Fix #includes of i*.h => Instructions.h as per PR403. 2004-07-29 17:30:56 +00:00
LiveInterval.cpp Fix includes. Patch contributed by Paolo Invernizzi! 2004-09-28 02:38:58 +00:00
LiveInterval.h Make a method const, no functionality changes 2004-07-25 06:23:01 +00:00
LiveIntervalAnalysis.cpp Pretty print a bit nicer :) 2004-10-01 19:01:39 +00:00
LiveIntervalAnalysis.h * Wrap some comments to 80 cols 2004-09-30 15:59:17 +00:00
LiveVariables.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
MachineBasicBlock.cpp Indent to 2 spaces. 2004-09-05 18:39:20 +00:00
MachineCodeEmitter.cpp Add #include <iostream> since Value.h does not #include it any more. 2004-07-04 12:19:56 +00:00
MachineFunction.cpp Indent to 2 spaces and cleanup excess whitespace. 2004-09-05 18:41:35 +00:00
MachineInstr.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
Makefile Adding ModuloScheduling so that it compiles for everyone. 2004-08-01 19:00:17 +00:00
Passes.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
PHIElimination.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
PhysRegTracker.h Improved PhysRegTracker interface. RegAlloc lazily allocates the register tracker using a std::auto_ptr 2004-02-23 06:10:13 +00:00
PrologEpilogInserter.cpp Put this change back in after testing from Reid proved its innocence. getSpillSize now returns value in bits 2004-08-29 22:00:24 +00:00
RegAllocIterativeScan.cpp Change the way we choose a free register: instead of picking the first 2004-09-02 21:24:33 +00:00
RegAllocLinearScan.cpp Free the VirtRegMap at the end of MachineFunction processing instead of at 2004-09-30 02:02:33 +00:00
RegAllocLocal.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
RegAllocSimple.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
TwoAddressInstructionPass.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
UnreachableBlockElim.cpp Changes For Bug 352 2004-09-01 22:55:40 +00:00
VirtRegMap.cpp Substantially revamp the local spiller, causing it to actually improve the 2004-10-01 19:04:51 +00:00
VirtRegMap.h Document this class a bit :-) 2004-10-01 00:35:07 +00:00