Commit message (Collapse) | Author | Age | Files | Lines | ||
---|---|---|---|---|---|---|
... | ||||||
* | Add a separate list of fixed intervals. This improves the running time | Alkis Evlogimenos | 2004-01-07 | 1 | -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 Evlogimenos | 2004-01-07 | 1 | -29/+3 | |
| | | | | llvm-svn: 10711 | |||||
* | Remove declared but undefined method. | Alkis Evlogimenos | 2004-01-07 | 1 | -5/+0 | |
| | | | | llvm-svn: 10710 | |||||
* | Change implementation of LiveIntervals::overlap(). This results in a | Alkis Evlogimenos | 2004-01-07 | 1 | -10/+22 | |
| | | | | | | 30-50% decrease in running time of the linear scan register allocator. llvm-svn: 10707 | |||||
* | Remove simple coalescing. | Alkis Evlogimenos | 2004-01-05 | 2 | -26/+0 | |
| | | | | llvm-svn: 10695 | |||||
* | fix warning | Chris Lattner | 2004-01-05 | 1 | -1/+1 | |
| | | | | llvm-svn: 10692 | |||||
* | Currently we cannot handle two-address instructions of the form: | Alkis Evlogimenos | 2004-01-05 | 1 | -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 Evlogimenos | 2004-01-04 | 1 | -5/+10 | |
| | | | | llvm-svn: 10681 | |||||
* | Clean up a lot of the code I added yesterday by exposing the IntrinsicLowering | Chris Lattner | 2003-12-28 | 1 | -8/+4 | |
| | | | | | | implementation from the TargetMachine directly. llvm-svn: 10636 | |||||
* | Reserve ECX and EDI instead of EBX and EDI. Since EBX is a callee | Alkis Evlogimenos | 2003-12-28 | 1 | -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 interval | Alkis Evlogimenos | 2003-12-28 | 2 | -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 calls | Chris Lattner | 2003-12-28 | 1 | -0/+1 | |
| | | | | llvm-svn: 10632 | |||||
* | Use the intrinsic lowering functionality | Chris Lattner | 2003-12-28 | 1 | -15/+44 | |
| | | | | llvm-svn: 10626 | |||||
* | Move into the VMCore library | Chris Lattner | 2003-12-28 | 1 | -57/+0 | |
| | | | | llvm-svn: 10623 | |||||
* | Implement the default implementation of the intrinsic lowering class | Chris Lattner | 2003-12-28 | 1 | -0/+57 | |
| | | | | llvm-svn: 10621 | |||||
* | finegrainify namespacification | Chris Lattner | 2003-12-28 | 1 | -9/+7 | |
| | | | | | | minor cleanups llvm-svn: 10619 | |||||
* | Improve debugging output when choosing a register to spill. | Alkis Evlogimenos | 2003-12-24 | 1 | -8/+3 | |
| | | | | llvm-svn: 10604 | |||||
* | Do a separate pass to compute spill weights because doing it inline | Alkis Evlogimenos | 2003-12-24 | 1 | -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 better | Alkis Evlogimenos | 2003-12-23 | 1 | -130/+77 | |
| | | | | | | allocation in the presence of preallocated intervals. llvm-svn: 10595 | |||||
* | Fix crash when compiling twolf. | Alkis Evlogimenos | 2003-12-22 | 1 | -1/+2 | |
| | | | | llvm-svn: 10584 | |||||
* | Remove verifyIntervals() since it doesn't actually work right now. | Alkis Evlogimenos | 2003-12-21 | 1 | -52/+0 | |
| | | | | llvm-svn: 10570 | |||||
* | Change weight into a float so that we can take into account the | Alkis Evlogimenos | 2003-12-21 | 2 | -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 registers | Alkis Evlogimenos | 2003-12-21 | 2 | -239/+370 | |
| | | | | | | for live ranges that fall into assigned registers' holes. llvm-svn: 10566 | |||||
* | Add a new target-independent machine code freeing pass | Chris Lattner | 2003-12-20 | 1 | -8/+33 | |
| | | | | llvm-svn: 10560 | |||||
* | * Finegrainify namespacification | Chris Lattner | 2003-12-20 | 1 | -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 ID | Alkis Evlogimenos | 2003-12-18 | 3 | -6/+21 | |
| | | | | | | instead, since this pass doesn't expose any state to its users. llvm-svn: 10520 | |||||
* | Prune some #includes | Chris Lattner | 2003-12-18 | 1 | -3/+2 | |
| | | | | | | Add a statistic for # reloads llvm-svn: 10518 | |||||
* | Modify linear scan register allocator to use the two-address | Alkis Evlogimenos | 2003-12-18 | 2 | -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 which | Alkis Evlogimenos | 2003-12-18 | 1 | -2/+2 | |
| | | | | | | are not reserved registers. llvm-svn: 10514 | |||||
* | Modify local register allocator to use the two-address instruction pass. | Alkis Evlogimenos | 2003-12-18 | 1 | -18/+5 | |
| | | | | llvm-svn: 10513 | |||||
* | Add TwoAddressInstructionPass to handle instructions that have two or | Alkis Evlogimenos | 2003-12-18 | 1 | -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 Evlogimenos | 2003-12-18 | 1 | -1/+1 | |
| | | | | llvm-svn: 10511 | |||||
* | When a variable is killed and redifined in a basic block only one | Alkis Evlogimenos | 2003-12-18 | 1 | -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 Evlogimenos | 2003-12-18 | 1 | -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 Evlogimenos | 2003-12-15 | 1 | -1/+2 | |
| | | | | llvm-svn: 10469 | |||||
* | Change interface of MachineOperand as follows: | Alkis Evlogimenos | 2003-12-14 | 12 | -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 this | Alkis Evlogimenos | 2003-12-13 | 1 | -0/+16 | |
| | | | | | | register too. llvm-svn: 10450 | |||||
* | Ignore non-allocatable physical registers in live interval analysis. | Alkis Evlogimenos | 2003-12-13 | 1 | -0/+4 | |
| | | | | llvm-svn: 10449 | |||||
* | Expire any active intervals left when register allocation is done. | Alkis Evlogimenos | 2003-12-13 | 1 | -0/+12 | |
| | | | | llvm-svn: 10448 | |||||
* | Add instruction numbers to debugging output. | Alkis Evlogimenos | 2003-12-13 | 1 | -1/+3 | |
| | | | | llvm-svn: 10447 | |||||
* | Handle explicit physical register defs. | Alkis Evlogimenos | 2003-12-13 | 1 | -2/+5 | |
| | | | | llvm-svn: 10445 | |||||
* | Remove unecessary if statements when looping on ImplicitDefs. | Alkis Evlogimenos | 2003-12-13 | 2 | -10/+10 | |
| | | | | llvm-svn: 10444 | |||||
* | This appears to fix Bug 172 and does not break any other feature tests or | John Criswell | 2003-12-10 | 1 | -0/+6 | |
| | | | | | | regression tests. llvm-svn: 10388 | |||||
* | Make assertion stricter. Since the source operands are allocated at | Alkis Evlogimenos | 2003-12-05 | 1 | -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 a | Alkis Evlogimenos | 2003-12-05 | 1 | -13/+3 | |
| | | | | | | potential register assignment. llvm-svn: 10291 | |||||
* | Move operator<<(std::ostream&, const LiveInterval&) out of the header file. | Alkis Evlogimenos | 2003-12-05 | 1 | -0/+11 | |
| | | | | llvm-svn: 10290 | |||||
* | Sort live intervals by increasing start point. | Alkis Evlogimenos | 2003-12-05 | 1 | -0/+1 | |
| | | | | llvm-svn: 10289 | |||||
* | Improve debugging output and clean up some code. | Alkis Evlogimenos | 2003-12-04 | 1 | -17/+14 | |
| | | | | llvm-svn: 10288 | |||||
* | Print instructions before register allocation is performed. Also fix | Alkis Evlogimenos | 2003-11-30 | 1 | -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 Evlogimenos | 2003-11-30 | 1 | -2/+0 | |
| | | | | llvm-svn: 10268 |