Commit message (Collapse) | Author | Age | Files | Lines | ||
---|---|---|---|---|---|---|
... | ||||||
* | When spilling an register, introduce a new temporary for each of its | Alkis Evlogimenos | 2004-05-30 | 1 | -13/+32 | |
| | | | | | | | spills. This allows for more flexibility when allocating registers for spill code. llvm-svn: 13907 | |||||
* | Remove defs vector from live intervals. | Alkis Evlogimenos | 2004-05-29 | 1 | -18/+0 | |
| | | | | llvm-svn: 13892 | |||||
* | Remove unneeded header | Alkis Evlogimenos | 2004-05-08 | 1 | -1/+0 | |
| | | | | llvm-svn: 13416 | |||||
* | numeric_limits::infinity() apparently does not work on all systems. As a | Chris Lattner | 2004-05-06 | 1 | -6/+4 | |
| | | | | | | workaround, use the C HUGE_VAL macro instead. llvm-svn: 13377 | |||||
* | Operate on the Machine CFG instead of on the LLVM CFG | Chris Lattner | 2004-05-01 | 1 | -9/+8 | |
| | | | | llvm-svn: 13302 | |||||
* | Fix bug introduced in previous commit. | Alkis Evlogimenos | 2004-04-12 | 1 | -1/+1 | |
| | | | | llvm-svn: 12872 | |||||
* | Correctly compute spill weights | Alkis Evlogimenos | 2004-04-12 | 1 | -18/+19 | |
| | | | | llvm-svn: 12869 | |||||
* | Print def lists a bit more compactly | Alkis Evlogimenos | 2004-04-12 | 1 | -1/+1 | |
| | | | | llvm-svn: 12866 | |||||
* | Add definition list to each live interval. | Alkis Evlogimenos | 2004-04-09 | 1 | -43/+54 | |
| | | | | llvm-svn: 12791 | |||||
* | Change MRegisterInfo::foldMemoryOperand to return the folded | Alkis Evlogimenos | 2004-03-14 | 1 | -7/+9 | |
| | | | | | | instruction to make the API more flexible. llvm-svn: 12386 | |||||
* | Add the long awaited memory operand folding support for linear scan | Alkis Evlogimenos | 2004-03-01 | 1 | -19/+35 | |
| | | | | llvm-svn: 12058 | |||||
* | Uncomment assertions that register# != 0 on calls to | Alkis Evlogimenos | 2004-02-26 | 1 | -2/+2 | |
| | | | | | | | MRegisterInfo::is{Physical,Virtual}Register. Apply appropriate fixes to relevant files. llvm-svn: 11882 | |||||
* | Move LiveIntervals.h up to be the first included header | Alkis Evlogimenos | 2004-02-23 | 1 | -1/+1 | |
| | | | | llvm-svn: 11721 | |||||
* | Move LiveIntervals.h to lib/CodeGen since it shouldn't be exposed to other ↵ | Alkis Evlogimenos | 2004-02-23 | 1 | -1/+1 | |
| | | | | | | parts of the compiler llvm-svn: 11719 | |||||
* | Print basic block boundaries in machine instruction debug output. | Alkis Evlogimenos | 2004-02-22 | 1 | -4/+7 | |
| | | | | llvm-svn: 11704 | |||||
* | Abstract merging of ranges away from number of slots per instruction. | Alkis Evlogimenos | 2004-02-22 | 1 | -3/+7 | |
| | | | | | | | Also make it less aggressive as the current implementation breaks in some cases. llvm-svn: 11696 | |||||
* | Make 'fold' statistic's description the same in both allocators. | Alkis Evlogimenos | 2004-02-21 | 1 | -1/+1 | |
| | | | | llvm-svn: 11687 | |||||
* | Some more statistics improvements. | Alkis Evlogimenos | 2004-02-20 | 1 | -11/+17 | |
| | | | | llvm-svn: 11676 | |||||
* | Disambiguate statistic descriptions. | Alkis Evlogimenos | 2004-02-20 | 1 | -1/+1 | |
| | | | | llvm-svn: 11675 | |||||
* | Rename statistic and add another one. | Alkis Evlogimenos | 2004-02-20 | 1 | -3/+6 | |
| | | | | llvm-svn: 11674 | |||||
* | Too many changes in one commit: | Alkis Evlogimenos | 2004-02-20 | 1 | -70/+90 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | 1. LiveIntervals now implement a 4 slot per instruction model. Load, Use, Def and a Store slot. This is required in order to correctly represent caller saved register clobbering on function calls, register reuse in the same instruction (def resues last use) and also spill code added later by the allocator. The previous representation (2 slots per instruction) was insufficient and as a result was causing subtle bugs. 2. Fixes in spill code generation. This was the major cause of failures in the test suite. 3. Linear scan now has core support for folding memory operands. This is untested and not enabled (the live interval update function does not attempt to fold loads/stores in instructions). 4. Lots of improvements in the debugging output of both live intervals and linear scan. Give it a try... it is beautiful :-) In summary the above fixes all the issues with the recent reserved register elimination changes and get the allocator very close to the next big step: folding memory operands. llvm-svn: 11654 | |||||
* | Be more agressive when joining ranges. | Alkis Evlogimenos | 2004-02-18 | 1 | -9/+9 | |
| | | | | llvm-svn: 11575 | |||||
* | Fix overly conservative spill interval computation. | Alkis Evlogimenos | 2004-02-18 | 1 | -4/+3 | |
| | | | | llvm-svn: 11574 | |||||
* | Fix spilled interval update. It was too conservative. | Alkis Evlogimenos | 2004-02-17 | 1 | -1/+4 | |
| | | | | llvm-svn: 11516 | |||||
* | Eliminate the use of spill (reserved) registers. | Alkis Evlogimenos | 2004-02-15 | 1 | -33/+103 | |
| | | | | llvm-svn: 11476 | |||||
* | Use std::numeric_limits<float>::infinity() instead of | Alkis Evlogimenos | 2004-02-14 | 1 | -1/+1 | |
| | | | | | | | std::numeric_limits<float>::max() for weighting preallocated intervals. llvm-svn: 11427 | |||||
* | Remove getAllocatedRegNum(). Use getReg() instead. | Alkis Evlogimenos | 2004-02-13 | 1 | -2/+2 | |
| | | | | llvm-svn: 11393 | |||||
* | Change MachineBasicBlock's vector of MachineInstr pointers into an | Alkis Evlogimenos | 2004-02-12 | 1 | -27/+23 | |
| | | | | | | | | | ilist of MachineInstr objects. This allows constant time removal and insertion of MachineInstr instances from anywhere in each MachineBasicBlock. It also allows for constant time splicing of MachineInstrs into or out of MachineBasicBlocks. llvm-svn: 11340 | |||||
* | Do not use MachineOperand::isVirtualRegister either! | Chris Lattner | 2004-02-10 | 1 | -1/+2 | |
| | | | | llvm-svn: 11283 | |||||
* | Change live interval representation. Machine instructions now have two | Alkis Evlogimenos | 2004-02-05 | 1 | -22/+31 | |
| | | | | | | | | | | | | | | | | | | slots each. As a concequence they get numbered as 0, 2, 4 and so on. The first slot is used for operand uses and the second for defs. Here's an example: 0: A = ... 2: B = ... 4: C = A + B ;; last use of A The live intervals should look like: A = [1, 5) B = [3, x) C = [5, y) llvm-svn: 11141 | |||||
* | We don't need to scan the blocks that we are live-in on every | Alkis Evlogimenos | 2004-02-05 | 1 | -12/+13 | |
| | | | | | | access. Rather we only have to do it on the creation of the interval. llvm-svn: 11135 | |||||
* | Should be more careful. The previously applied change made all counts | Alkis Evlogimenos | 2004-02-02 | 1 | -10/+6 | |
| | | | | | | outside of loops = 0. llvm-svn: 11085 | |||||
* | Change string for joined intervals. | Alkis Evlogimenos | 2004-02-01 | 1 | -1/+1 | |
| | | | | llvm-svn: 11057 | |||||
* | Change xor to ^. | Alkis Evlogimenos | 2004-02-01 | 1 | -1/+1 | |
| | | | | llvm-svn: 11054 | |||||
* | Missed one silly assert :-) | Alkis Evlogimenos | 2004-02-01 | 1 | -1/+1 | |
| | | | | llvm-svn: 11048 | |||||
* | Simplify joinIntervals() code. | Alkis Evlogimenos | 2004-02-01 | 1 | -62/+57 | |
| | | | | llvm-svn: 11047 | |||||
* | Use MRegisterInfo::isPhysicalRegister and | Alkis Evlogimenos | 2004-02-01 | 1 | -11/+11 | |
| | | | | | | MRegisterInfo::isVirtualRegister. llvm-svn: 11045 | |||||
* | Apply final part of Chris' patch. | Alkis Evlogimenos | 2004-01-31 | 1 | -11/+9 | |
| | | | | llvm-svn: 11040 | |||||
* | Be a little smarter on the way we handle physical register defs. | Alkis Evlogimenos | 2004-01-31 | 1 | -26/+13 | |
| | | | | llvm-svn: 11038 | |||||
* | Merge safe parts from last night's buggy commit. These do not break | Alkis Evlogimenos | 2004-01-31 | 1 | -47/+71 | |
| | | | | | | any test cases :-) llvm-svn: 11032 | |||||
* | Optimize liveAt() and overlaps(). We now use a binary search instead | Alkis Evlogimenos | 2004-01-31 | 1 | -20/+30 | |
| | | | | | | | | of a linear search to find the first range for comparisons. This cuts down the linear scan register allocator running time by a factor of 3 in 254.perlbmk and by a factor of 2.2 in 176.gcc. llvm-svn: 11030 | |||||
* | Revert last night's changes as they broke some tests. Will remerge parts of ↵ | Alkis Evlogimenos | 2004-01-31 | 1 | -105/+105 | |
| | | | | | | the patch. llvm-svn: 11029 | |||||
* | Several performance enhancements and cleanups from Chris. | Alkis Evlogimenos | 2004-01-31 | 1 | -105/+105 | |
| | | | | | | | Simplification of LiveIntervals::Interval::overlaps() and addition of examples to overlaps() and liveAt() to make them clearer. llvm-svn: 11028 | |||||
* | Fix failing test cases with joined live intervals. It turns out that | Alkis Evlogimenos | 2004-01-23 | 1 | -3/+24 | |
| | | | | | | | | | when joining we need to check if we overlap with the second interval or any of its aliases. Also make joining intervals the default. llvm-svn: 10973 | |||||
* | Add option to join live intervals. Two intervals are joined if there | Alkis Evlogimenos | 2004-01-22 | 1 | -40/+169 | |
| | | | | | | | | | | | | | | is a move between two registers, at least one of the registers is virtual and the two live intervals do not overlap. This results in about 40% reduction in intervals, 30% decrease in the register allocators running time and a 20% increase in peephole optimizations (mainly move eliminations). The option can be enabled by passing -join-liveintervals where appropriate. llvm-svn: 10965 | |||||
* | Revert previous change. The code was correct... | Alkis Evlogimenos | 2004-01-22 | 1 | -1/+1 | |
| | | | | llvm-svn: 10957 | |||||
* | Fix incorrect negatives in LiveIntervals::Interval::liveAt(). | Alkis Evlogimenos | 2004-01-22 | 1 | -1/+1 | |
| | | | | llvm-svn: 10956 | |||||
* | Add asserts to previous change. | Alkis Evlogimenos | 2004-01-16 | 1 | -2/+6 | |
| | | | | llvm-svn: 10893 | |||||
* | Use a list instead of a vector to store intervals. This will be needed | Alkis Evlogimenos | 2004-01-16 | 1 | -7/+6 | |
| | | | | | | when we join intervals and one of the two will need to be removed. llvm-svn: 10892 | |||||
* | Properly update #intervals statistic. | Alkis Evlogimenos | 2004-01-14 | 1 | -0/+2 | |
| | | | | llvm-svn: 10847 |