summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/RegAllocLinearScan.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Add a separate list of fixed intervals. This improves the running timeAlkis Evlogimenos2004-01-071-64/+111
| | | | | | | | | | | | | | | | | | of the register allocator as follows: before after mesa 2.3790 1.5994 vpr 2.6008 1.2078 gcc 1.9840 0.5273 mcf 0.2569 0.0470 eon 1.8468 1.4359 twolf 0.9475 0.2004 burg 1.6807 1.3300 lambda 1.2191 0.3764 Speedups range anyware from 30% to over 400% :-) llvm-svn: 10712
* Minor cleanups.Alkis Evlogimenos2004-01-071-29/+3
| | | | llvm-svn: 10711
* Remove declared but undefined method.Alkis Evlogimenos2004-01-071-5/+0
| | | | llvm-svn: 10710
* Remove simple coalescing.Alkis Evlogimenos2004-01-051-11/+0
| | | | llvm-svn: 10695
* Reserve ECX and EDI instead of EBX and EDI. Since EBX is a calleeAlkis Evlogimenos2003-12-281-8/+8
| | | | | | | | saved register it has a longer free range than ECX (which is defined every time there is a fnuction call) which makes ECX a better register to reserve. llvm-svn: 10635
* Add coalescing to register allocator. A hint is added to each intervalAlkis Evlogimenos2003-12-281-1/+12
| | | | | | | | | | | which denotes the register we would like to be assigned to (virtual or physical). In register allocation, if this hint exists and we can map it to a physical register (it is either a physical register or it is a virtual register that already got assigned to a physical one) we use that register if it is available instead of a random one in the free pool. llvm-svn: 10634
* Improve debugging output when choosing a register to spill.Alkis Evlogimenos2003-12-241-8/+3
| | | | llvm-svn: 10604
* Change the way free regusters are computed and perform betterAlkis Evlogimenos2003-12-231-130/+77
| | | | | | allocation in the presence of preallocated intervals. llvm-svn: 10595
* Remove verifyIntervals() since it doesn't actually work right now.Alkis Evlogimenos2003-12-211-52/+0
| | | | llvm-svn: 10570
* Change weight into a float so that we can take into account theAlkis Evlogimenos2003-12-211-10/+17
| | | | | | | | nesting level when computing it. Right now the allocator uses: w = sum_over_defs_uses( 10 ^ nesting level ); llvm-svn: 10569
* Add support for inactive intervals. This effectively reuses registersAlkis Evlogimenos2003-12-211-237/+323
| | | | | | for live ranges that fall into assigned registers' holes. llvm-svn: 10566
* Prune some #includesChris Lattner2003-12-181-3/+2
| | | | | | Add a statistic for # reloads llvm-svn: 10518
* Modify linear scan register allocator to use the two-addressAlkis Evlogimenos2003-12-181-76/+37
| | | | | | | instruction pass. This also fixes all remaining bugs for this new allocator to pass all tests under test/Programs. llvm-svn: 10515
* Fix bug in reserved registers. DH actually aliases DX and EDX whichAlkis Evlogimenos2003-12-181-2/+2
| | | | | | are not reserved registers. llvm-svn: 10514
* Rename LiveIntervals::expired() to LiveIntervals::expiredAt().Alkis Evlogimenos2003-12-181-1/+1
| | | | llvm-svn: 10511
* Change interface of MachineOperand as follows:Alkis Evlogimenos2003-12-141-7/+6
| | | | | | | | | | | | | | | a) remove opIsUse(), opIsDefOnly(), opIsDefAndUse() b) add isUse(), isDef() c) rename opHiBits32() to isHiBits32(), opLoBits32() to isLoBits32(), opHiBits64() to isHiBits64(), opLoBits64() to isLoBits64(). This results to much more readable code, for example compare "op.opIsDef() || op.opIsDefAndUse()" to "op.isDef()" a pattern used very often in the code. llvm-svn: 10461
* When reserving a preallocated register spill the aliases of thisAlkis Evlogimenos2003-12-131-0/+16
| | | | | | register too. llvm-svn: 10450
* Expire any active intervals left when register allocation is done.Alkis Evlogimenos2003-12-131-0/+12
| | | | llvm-svn: 10448
* Add instruction numbers to debugging output.Alkis Evlogimenos2003-12-131-1/+3
| | | | llvm-svn: 10447
* Fix bug in register spilling when a preallocated live range overlaps aAlkis Evlogimenos2003-12-051-13/+3
| | | | | | potential register assignment. llvm-svn: 10291
* Improve debugging output and clean up some code.Alkis Evlogimenos2003-12-041-17/+14
| | | | llvm-svn: 10288
* Print instructions before register allocation is performed. Also fixAlkis Evlogimenos2003-11-301-6/+26
| | | | | | | | bug where spill instructions were added to the next basic block instead of the end of the current one if the instruction that required the spill was the last in the block. llvm-svn: 10272
* Remove "numReloaded" statistic.Alkis Evlogimenos2003-11-301-2/+0
| | | | llvm-svn: 10268
* Merging the linear scan register allocator in trunk. It currently passes ↵Alkis Evlogimenos2003-11-201-0/+777
most tests under test/Programs/SingleSource/Benchmarks/Shootout so development will continue on trunk. The allocator is not enabled by default. You will need to pass -regallo=linearscan to lli or llc to use it. llvm-svn: 10103
OpenPOWER on IntegriCloud