summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
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
* Change implementation of LiveIntervals::overlap(). This results in aAlkis Evlogimenos2004-01-071-10/+22
| | | | | | 30-50% decrease in running time of the linear scan register allocator. llvm-svn: 10707
* Remove simple coalescing.Alkis Evlogimenos2004-01-052-26/+0
| | | | llvm-svn: 10695
* fix warningChris Lattner2004-01-051-1/+1
| | | | llvm-svn: 10692
* Currently we cannot handle two-address instructions of the form:Alkis Evlogimenos2004-01-051-0/+9
| | | | | | | A = B op C where A == C, but this cannot really occur in practice because of SSA form. Add an assert to check that just to be safe. llvm-svn: 10682
* Update description.Alkis Evlogimenos2004-01-041-5/+10
| | | | llvm-svn: 10681
* Clean up a lot of the code I added yesterday by exposing the IntrinsicLoweringChris Lattner2003-12-281-8/+4
| | | | | | implementation from the TargetMachine directly. llvm-svn: 10636
* 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-282-2/+29
| | | | | | | | | | | 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
* Whoops, don't try to lower non intrinsic callsChris Lattner2003-12-281-0/+1
| | | | llvm-svn: 10632
* Use the intrinsic lowering functionalityChris Lattner2003-12-281-15/+44
| | | | llvm-svn: 10626
* Move into the VMCore libraryChris Lattner2003-12-281-57/+0
| | | | llvm-svn: 10623
* Implement the default implementation of the intrinsic lowering classChris Lattner2003-12-281-0/+57
| | | | llvm-svn: 10621
* finegrainify namespacificationChris Lattner2003-12-281-9/+7
| | | | | | minor cleanups llvm-svn: 10619
* Improve debugging output when choosing a register to spill.Alkis Evlogimenos2003-12-241-8/+3
| | | | llvm-svn: 10604
* Do a separate pass to compute spill weights because doing it inlineAlkis Evlogimenos2003-12-241-10/+27
| | | | | | | | with live intervals was missing registers that were used before they were defined (in the arbitrary order live intervals numbers instructions). llvm-svn: 10603
* 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
* Fix crash when compiling twolf.Alkis Evlogimenos2003-12-221-1/+2
| | | | llvm-svn: 10584
* 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-212-13/+28
| | | | | | | | 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-212-239/+370
| | | | | | for live ranges that fall into assigned registers' holes. llvm-svn: 10566
* Add a new target-independent machine code freeing passChris Lattner2003-12-201-8/+33
| | | | llvm-svn: 10560
* * Finegrainify namespacificationChris Lattner2003-12-201-72/+13
| | | | | | | | * Move sparc specific code out of generic code * Eliminate the getOffset() method which made INVALID_FRAME_OFFSET necessary, which made pulling in MAX_INT as a sentinal necessary. llvm-svn: 10553
* Remove TwoAddressInstruction from the public headers and add an IDAlkis Evlogimenos2003-12-183-6/+21
| | | | | | instead, since this pass doesn't expose any state to its users. llvm-svn: 10520
* 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-182-76/+39
| | | | | | | 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
* Modify local register allocator to use the two-address instruction pass.Alkis Evlogimenos2003-12-181-18/+5
| | | | llvm-svn: 10513
* Add TwoAddressInstructionPass to handle instructions that have two orAlkis Evlogimenos2003-12-181-0/+149
| | | | | | | | | | | | | | | | more operands and the two first operands are constrained to be the same. The pass takes an instruction of the form: a = b op c and transforms it into: a = b a = a op c and also preserves live variables. llvm-svn: 10512
* Rename LiveIntervals::expired() to LiveIntervals::expiredAt().Alkis Evlogimenos2003-12-181-1/+1
| | | | llvm-svn: 10511
* When a variable is killed and redifined in a basic block only oneAlkis Evlogimenos2003-12-181-1/+4
| | | | | | | | killing instruction is tracked. This causes the LiveIntervals to create bogus intervals. The workaound is to add a range to the interval from the redefinition to the end of the basic block. llvm-svn: 10510
* Handle multiple virtual register definitions gracefully.Alkis Evlogimenos2003-12-181-51/+67
| | | | | | | | Move some of the longer LiveIntervals::Interval method out of the header and add debug information to them. Fix bug and simplify range merging code. llvm-svn: 10509
* Change preserve all claim to just preserve live variables and phielimination.Alkis Evlogimenos2003-12-151-1/+2
| | | | llvm-svn: 10469
* Change interface of MachineOperand as follows:Alkis Evlogimenos2003-12-1412-82/+81
| | | | | | | | | | | | | | | 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
* Ignore non-allocatable physical registers in live interval analysis.Alkis Evlogimenos2003-12-131-0/+4
| | | | llvm-svn: 10449
* 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
* Handle explicit physical register defs.Alkis Evlogimenos2003-12-131-2/+5
| | | | llvm-svn: 10445
* Remove unecessary if statements when looping on ImplicitDefs.Alkis Evlogimenos2003-12-132-10/+10
| | | | llvm-svn: 10444
* This appears to fix Bug 172 and does not break any other feature tests orJohn Criswell2003-12-101-0/+6
| | | | | | regression tests. llvm-svn: 10388
* Make assertion stricter. Since the source operands are allocated atAlkis Evlogimenos2003-12-051-1/+1
| | | | | | | this point, the second operand must be a physical register (it cannot be a virtual one). llvm-svn: 10292
* Fix bug in register spilling when a preallocated live range overlaps aAlkis Evlogimenos2003-12-051-13/+3
| | | | | | potential register assignment. llvm-svn: 10291
* Move operator<<(std::ostream&, const LiveInterval&) out of the header file.Alkis Evlogimenos2003-12-051-0/+11
| | | | llvm-svn: 10290
* Sort live intervals by increasing start point.Alkis Evlogimenos2003-12-051-0/+1
| | | | llvm-svn: 10289
* 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
OpenPOWER on IntegriCloud