summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/LiveInterval.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix a memory leak.Evan Cheng2007-09-061-0/+2
| | | | llvm-svn: 41739
* Use pool allocator for all the VNInfo's to improve memory access locality. ↵Evan Cheng2007-09-051-36/+18
| | | | | | This reduces coalescing time on siod Mac OS X PPC by 35%. Also remove the back ptr from VNInfo to LiveInterval and other tweaks. llvm-svn: 41729
* More tweaks to improve compile time.Evan Cheng2007-09-011-22/+35
| | | | llvm-svn: 41669
* Remove an unnecessary element, saving 4 bytes per LiveInterval.Evan Cheng2007-08-311-3/+0
| | | | llvm-svn: 41641
* Change LiveRange so it keeps a pointer to the VNInfo rather than an index.Evan Cheng2007-08-291-52/+78
| | | | | | | Changes related modules so VNInfo's are not copied. This decrease copy coalescing time by 45% and overall compilation time by 10% on siod. llvm-svn: 41579
* Recover most of the compile time regression due to recent live interval changes.Evan Cheng2007-08-281-27/+19
| | | | | | | | 1. Eliminate the costly live interval "swapping". 2. Change ValueNumberInfo container from SmallVector to std::vector. The former performs slowly when the vector size is very large. llvm-svn: 41536
* Kill info update bugs.Evan Cheng2007-08-141-1/+2
| | | | llvm-svn: 41064
* Kill info update bugs.Evan Cheng2007-08-131-5/+2
| | | | llvm-svn: 41043
* Code to maintain kill information during register coalescing.Evan Cheng2007-08-111-11/+32
| | | | llvm-svn: 41016
* Clean up and bug fix.Evan Cheng2007-08-081-1/+1
| | | | llvm-svn: 40921
* - Each val# can have multiple kills.Evan Cheng2007-08-081-6/+3
| | | | | | | - Fix some minor bugs related to special markers on val# def. ~0U means undefined, ~1U means dead val#. llvm-svn: 40916
* Remove a dead assertion.Evan Cheng2007-08-081-1/+0
| | | | llvm-svn: 40914
* - LiveInterval value#'s now have 3 components: def instruction #,Evan Cheng2007-08-071-7/+12
| | | | | | | | | | kill instruction #, and source register number (iff the value# is defined by a copy). - Now def instruction # is set for every value#, not just for copy defined ones. - Update some outdated code related inactive live ranges. - Kill info not yet set. That's next patch. llvm-svn: 40913
* Add a register allocation preference field; add a method to compute size of ↵Evan Cheng2007-04-171-0/+9
| | | | | | a live interval. llvm-svn: 36216
* Added an automatic cast to "std::ostream*" etc. from OStream. We then canBill Wendling2006-12-171-1/+1
| | | | | | | rework the hacks that had us passing OStream in. We pass in std::ostream* instead, check for null, and then dispatch to the correct print() method. llvm-svn: 32636
* The best unbreakage yet, addressing Bill's concerns.Jeff Cohen2006-12-161-3/+2
| | | | llvm-svn: 32622
* An even better unbreakage...Jeff Cohen2006-12-151-0/+7
| | | | llvm-svn: 32617
* Changed llvm_ostream et all to OStream. llvm_cerr, llvm_cout, llvm_null, areBill Wendling2006-12-071-4/+3
| | | | | | now cerr, cout, and NullStream resp. llvm-svn: 32298
* Converted to using llvm streams instead of <iostream>sBill Wendling2006-11-291-1/+1
| | | | llvm-svn: 31992
* Put the #include for a module first.Bill Wendling2006-11-281-1/+1
| | | | llvm-svn: 31958
* Changed to using llvm streams.Bill Wendling2006-11-281-5/+5
| | | | llvm-svn: 31954
* For PR786:Reid Spencer2006-11-021-1/+0
| | | | | | | | | | Turn on -Wunused and -Wno-unused-parameter. Clean up most of the resulting fall out by removing unused variables. Remaining warnings have to do with unused functions (I didn't want to delete code without review) and unused variables in generated code. Maintainers should clean up the remaining issues when they see them. All changes pass DejaGnu tests and Olden. llvm-svn: 31380
* When joining two intervals where the RHS is really simple, use a light-weightChris Lattner2006-09-021-0/+17
| | | | | | method for joining the live ranges instead of the fully-general one. llvm-svn: 30049
* avoid calling the virtual isMoveInstr method endlessly by caching its results.Chris Lattner2006-08-311-12/+12
| | | | llvm-svn: 29994
* Teach the coallescer to coallesce live intervals joined by an arbitraryChris Lattner2006-08-291-130/+59
| | | | | | | | number of copies, potentially defining live ranges that appear to have differing value numbers that become identical when coallsced. Among other things, this fixes CodeGen/X86/shift-coalesce.ll and PR687. llvm-svn: 29968
* Simplifications to liveinterval analysis, no functionality change.Chris Lattner2006-08-261-11/+15
| | | | llvm-svn: 29896
* Completely change the way that joining with physregs is implemented. ThisChris Lattner2006-08-251-7/+40
| | | | | | | | paves the way for future changes, increases coallescing opportunities (in theory, not witnessed in practice), and eliminates the really expensive LiveIntervals::overlapsAliases method. llvm-svn: 29890
* When replacing value numbers, make sure to compactify the value # space.Chris Lattner2006-08-241-0/+12
| | | | llvm-svn: 29865
* Take advantage of the recent improvements to the liveintervals set (trackingChris Lattner2006-08-241-8/+83
| | | | | | | | | | | | | | | | | | | instructions which define each value#) to simplify and improve the coallescer. In particular, this patch: 1. Implements iterative coallescing. 2. Reverts an unsafe hack from handlePhysRegDef, superceeding it with a better solution. 3. Implements PR865, "coallescing" away the second copy in code like: A = B ... B = A This also includes changes to symbolically print registers in intervals when possible. llvm-svn: 29862
* Improve the LiveInterval class to keep track of which machine instructionChris Lattner2006-08-221-1/+15
| | | | | | | defines each value# tracked by the interval. This will be used to improve coallescing. llvm-svn: 29830
* Fix LiveInterval::getOverlapingRanges to take things in the right orderChris Lattner2005-10-211-3/+3
| | | | | | | | | | (an unused method). Fix the merger so that it can merge ranges like this [10:12)[16:40) with [12:38) into [10:40) instead of bogus ranges. This sort of input will be possible for the merger coming shortly llvm-svn: 23865
* Fix a conditional so we don't access past the end of the range. Thanks toChris Lattner2005-10-201-6/+4
| | | | | | Andrew for bringing this to my attn. llvm-svn: 23850
* Fix order of eval problem from when I refactored this into a function.Chris Lattner2005-10-201-3/+2
| | | | llvm-svn: 23844
* add a new method, play around with some code.Chris Lattner2005-10-201-10/+56
| | | | | | | | Fix a *bug* in the extendIntervalEndTo method. In particular, if adding [2:10) to an interval containing [0:2),[10:30), we produced [0:10),[10,30). Which is not the most smart thing to do. Now produce [0:30). llvm-svn: 23841
* Refactor some code, pulling it out into a function. No functionality change.Chris Lattner2005-10-201-15/+26
| | | | llvm-svn: 23839
* Expose the LiveInterval interfaces as public headers.Chris Lattner2005-09-211-1/+1
| | | | llvm-svn: 23400
* Print the symbolic register name in a register allocator debug dump.Chris Lattner2005-05-141-11/+17
| | | | llvm-svn: 22002
* Remove trailing whitespaceMisha Brukman2005-04-211-2/+2
| | | | llvm-svn: 21420
* Prevent accessing past the end of the intervals vector, this fixesChris Lattner2004-12-041-1/+3
| | | | | | Prolang-C/bison in the JIT llvm-svn: 18477
* There is no need to check to see if j overflowed in this loop as we're onlyChris Lattner2004-11-181-1/+3
| | | | | | incrementing i. llvm-svn: 17944
* Moderate head scratching reveals that this conditional is not needed. IfChris Lattner2004-11-181-4/+0
| | | | | | i->start == j->start, then certainly i->end > j->start. llvm-svn: 17943
* Take another .7 seconds off of linear scan time.Chris Lattner2004-11-181-3/+5
| | | | llvm-svn: 17936
* Add ability to give hints to the overlaps routines.Chris Lattner2004-11-181-5/+13
| | | | llvm-svn: 17934
* Give a better message for a common assertion failure.Brian Gaeke2004-11-161-1/+2
| | | | llvm-svn: 17887
* Fix includes. Patch contributed by Paolo Invernizzi!Alkis Evlogimenos2004-09-281-0/+1
| | | | llvm-svn: 16533
* Changes For Bug 352Reid Spencer2004-09-011-1/+1
| | | | | | | | Move include/Config and include/Support into include/llvm/Config, include/llvm/ADT and include/llvm/Support. From here on out, all LLVM public header files must be under include/llvm/. llvm-svn: 16137
* Fix the sense of joinableChris Lattner2004-07-251-4/+4
| | | | llvm-svn: 15196
* This patch makes use of the infrastructure implemented before to safely andChris Lattner2004-07-251-1/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | aggressively coallesce live ranges even if they overlap. Consider this LLVM code for example: int %test(int %X) { %Y = mul int %X, 1 ;; Codegens to Y = X %Z = add int %X, %Y ret int %Z } The mul is just there to get a copy into the code stream. This produces this machine code: (0x869e5a8, LLVM BB @0x869b9a0): %reg1024 = mov <fi#-2>, 1, %NOREG, 0 ;; "X" %reg1025 = mov %reg1024 ;; "Y" (subsumed by X) %reg1026 = add %reg1024, %reg1025 %EAX = mov %reg1026 ret Note that the life times of reg1024 and reg1025 overlap, even though they contain the same value. This results in this machine code: test: mov %EAX, DWORD PTR [%ESP + 4] mov %ECX, %EAX add %EAX, %ECX ret Another, worse case involves loops and PHI nodes. Consider this trivial loop: testcase: int %test2(int %X) { entry: br label %Loop Loop: %Y = phi int [%X, %entry], [%Z, %Loop] %Z = add int %Y, 1 %cond = seteq int %Z, 100 br bool %cond, label %Out, label %Loop Out: ret int %Z } Because of interactions between the PHI elimination pass and the register allocator, this got compiled to this code: test2: mov %ECX, DWORD PTR [%ESP + 4] .LBBtest2_1: *** mov %EAX, %ECX inc %EAX cmp %EAX, 100 *** mov %ECX, %EAX jne .LBBtest2_1 ret Or on powerpc, this code: _test2: mflr r0 stw r0, 8(r1) stwu r1, -60(r1) .LBB_test2_1: addi r2, r3, 1 cmpwi cr0, r2, 100 *** or r3, r2, r2 bne cr0, .LBB_test2_1 *** or r3, r2, r2 lwz r0, 68(r1) mtlr r0 addi r1, r1, 60 blr 0 With this improvement in place, we now generate this code for these two testcases, which is what we want: test: mov %EAX, DWORD PTR [%ESP + 4] add %EAX, %EAX ret test2: mov %EAX, DWORD PTR [%ESP + 4] .LBBtest2_1: inc %EAX cmp %EAX, 100 jne .LBBtest2_1 # Loop ret Or on PPC: _test2: mflr r0 stw r0, 8(r1) stwu r1, -60(r1) .LBB_test2_1: addi r3, r3, 1 cmpwi cr0, r3, 100 bne cr0, .LBB_test2_1 lwz r0, 68(r1) mtlr r0 addi r1, r1, 60 blr 0 Static numbers for spill code loads/stores/reg-reg copies (smaller is better): em3d: before: 47/25/26 after: 44/22/24 164.gzip: before: 433/245/310 after: 403/231/278 175.vpr: before: 3721/2189/1581 after: 4144/2081/1423 176.gcc: before: 26195/8866/9235 after: 25942/8082/8275 186.crafty: before: 4295/2587/3079 after: 4119/2519/2916 252.eon: before: 12754/7585/5803 after: 12508/7425/5643 256.bzip2: before: 463/226/315 after: 482:241/309 Runtime perf number samples on X86: gzip: before: 41.09 after: 39.86 bzip2: runtime: before: 56.71s after: 57.07s gcc: before: 6.16 after: 6.12 eon: before: 2.03s after: 2.00s llvm-svn: 15194
* Make a method const, no functionality changesChris Lattner2004-07-251-5/+5
| | | | llvm-svn: 15193
* Fix a bug in the range removerChris Lattner2004-07-251-1/+1
| | | | llvm-svn: 15188
OpenPOWER on IntegriCloud