aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
* Cosmetic change.Evan Cheng2007-12-121-4/+3
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44961 91177308-0d34-0410-b5e6-96231b3b80d8
* Switch over to MachineLoopInfo.Evan Cheng2007-12-111-4/+5
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44838 91177308-0d34-0410-b5e6-96231b3b80d8
* CollectorMetadata and Collector are rejiggered to get along withGordon Henriksen2007-12-114-75/+95
| | | | | | | per-function collector model. Collector is now the factory for CollectorMetadata, so the latter may be subclassed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44827 91177308-0d34-0410-b5e6-96231b3b80d8
* Initial commit of the machine code LICM pass. It successfully hoists this:Bill Wendling2007-12-071-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | _foo: li r2, 0 LBB1_1: ; bb li r5, 0 stw r5, 0(r3) addi r2, r2, 1 addi r3, r3, 4 cmplw cr0, r2, r4 bne cr0, LBB1_1 ; bb LBB1_2: ; return blr to: _foo: li r2, 0 li r5, 0 LBB1_1: ; bb stw r5, 0(r3) addi r2, r2, 1 addi r3, r3, 4 cmplw cr0, r2, r4 bne cr0, LBB1_1 ; bb LBB1_2: ; return blr ZOMG!! :-) Moar to come... git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44687 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix a stupid error that Chris pointed out.Owen Anderson2007-12-071-2/+0
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44674 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix for PR1831: if all defs of an interval are re-materializable, then it's ↵Evan Cheng2007-12-061-2/+8
| | | | | | a preferred spill candiate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44644 91177308-0d34-0410-b5e6-96231b3b80d8
* - Mark last use of a split interval as kill instead of letting spiller track it.Evan Cheng2007-12-051-0/+2
| | | | | | | | | | This allows an important optimization to be re-enabled. - If all uses / defs of a split interval can be folded, give the interval a low spill weight so it would not be picked in case spilling is needed (avoid pushing other intervals in the same BB to be spilled). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44601 91177308-0d34-0410-b5e6-96231b3b80d8
* Add a argument to storeRegToStackSlot and storeRegToAddr to specify whetherEvan Cheng2007-12-051-1/+4
| | | | | | | the stored register is killed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44600 91177308-0d34-0410-b5e6-96231b3b80d8
* Remove redundant foldMemoryOperand variants and other code clean up.Evan Cheng2007-12-021-2/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44517 91177308-0d34-0410-b5e6-96231b3b80d8
* Fixes for MachineLoopInfo, mostly from Evan. With these, it should be ↵Owen Anderson2007-12-011-10/+5
| | | | | | almost useable! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44480 91177308-0d34-0410-b5e6-96231b3b80d8
* Allow some reloads to be folded in multi-use cases. Specifically testl r, r ↵Evan Cheng2007-12-011-1/+2
| | | | | | -> cmpl [mem], 0. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44479 91177308-0d34-0410-b5e6-96231b3b80d8
* Do not fold reload into an instruction with multiple uses. It issues one ↵Evan Cheng2007-11-301-2/+3
| | | | | | extra load. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44467 91177308-0d34-0410-b5e6-96231b3b80d8
* Provide a way to update DescGlobals cache directly.Devang Patel2007-11-301-1/+9
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44446 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix a major performance issue with splitting. If there is a def (not def/use)Evan Cheng2007-11-291-4/+19
| | | | | | | | | | | | | | | | in the middle of a split basic block, create a new live interval starting at the def. This avoid artifically extending the live interval over a number of cycles where it is dead. e.g. bb1: = vr1204 (use / kill) <= new interval starts and ends here. ... ... vr1204 = (new def) <= start a new interval here. = vr1204 (use) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44436 91177308-0d34-0410-b5e6-96231b3b80d8
* Replace the odd kill# hack with something less fragile.Evan Cheng2007-11-291-2/+5
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44434 91177308-0d34-0410-b5e6-96231b3b80d8
* Fixed various live interval splitting bugs / compile time issues.Evan Cheng2007-11-291-4/+9
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44428 91177308-0d34-0410-b5e6-96231b3b80d8
* Add missing newlines at EOF.Duncan Sands2007-11-281-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44399 91177308-0d34-0410-b5e6-96231b3b80d8
* Recover compile time regression.Evan Cheng2007-11-281-3/+3
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44386 91177308-0d34-0410-b5e6-96231b3b80d8
* Add MachineLoopInfo. This is not yet tested.Owen Anderson2007-11-271-0/+203
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44384 91177308-0d34-0410-b5e6-96231b3b80d8
* Add accessor for getting the underlying templated type. This is necessary ↵Owen Anderson2007-11-271-4/+6
| | | | | | for templated LoopInfo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44347 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix a typo in a comment.Dan Gohman2007-11-191-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44235 91177308-0d34-0410-b5e6-96231b3b80d8
* Live interval splitting:Evan Cheng2007-11-172-23/+43
| | | | | | | | | | | | | | | | | | | | When a live interval is being spilled, rather than creating short, non-spillable intervals for every def / use, split the interval at BB boundaries. That is, for every BB where the live interval is defined or used, create a new interval that covers all the defs and uses in the BB. This is designed to eliminate one common problem: multiple reloads of the same value in a single basic block. Note, it does *not* decrease the number of spills since no copies are inserted so the split intervals are *connected* through spill and reloads (or rematerialization). The newly created intervals can be spilled again, in that case, since it does not span multiple basic blocks, it's spilled in the usual manner. However, it can reuse the same stack slot as the previously split interval. This is currently controlled by -split-intervals-at-bb. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44198 91177308-0d34-0410-b5e6-96231b3b80d8
* Shrinkfy.Evan Cheng2007-11-171-4/+4
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44197 91177308-0d34-0410-b5e6-96231b3b80d8
* Implement necessary bits for flt_rounds gcc builtin. Anton Korobeynikov2007-11-151-0/+8
| | | | | | | Codegen bits and llvm-gcc support will follow. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44182 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix PIC jump table codegen on x86-32/linux. In fact, such thing should be ↵Anton Korobeynikov2007-11-141-1/+4
| | | | | | | | | applied to all targets uses GOT-relative offsets for PIC (Alpha?) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44108 91177308-0d34-0410-b5e6-96231b3b80d8
* Clean up sub-register implementation by moving subReg information back toEvan Cheng2007-11-143-22/+17
| | | | | | | | | | | | MachineOperand auxInfo. Previous clunky implementation uses an external map to track sub-register uses. That works because register allocator uses a new virtual register for each spilled use. With interval splitting (coming soon), we may have multiple uses of the same register some of which are of using different sub-registers from others. It's too fragile to constantly update the information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44104 91177308-0d34-0410-b5e6-96231b3b80d8
* Fixed a compilation error.Hartmut Kaiser2007-11-131-0/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44083 91177308-0d34-0410-b5e6-96231b3b80d8
* Wow. I definitely shouldn't write code when I'm tird.Owen Anderson2007-11-131-19/+24
| | | | | | | Make my previous patch actually do what it was intended to do. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44061 91177308-0d34-0410-b5e6-96231b3b80d8
* Unify CALLSEQ_{START,END}. They take 4 parameters: the chain, two stackBill Wendling2007-11-131-0/+14
| | | | | | | | | | | | adjustment fields, and an optional flag. If there is a "dynamic_stackalloc" in the code, make sure that it's bracketed by CALLSEQ_START and CALLSEQ_END. If not, then there is the potential for the stack to be changed while the stack's being used by another instruction (like a call). This can only result in tears... git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44037 91177308-0d34-0410-b5e6-96231b3b80d8
* Compile fix.Duncan Sands2007-11-121-0/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44013 91177308-0d34-0410-b5e6-96231b3b80d8
* Refactor some code.Evan Cheng2007-11-121-3/+27
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44010 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix rewriting of PHI nodes.Owen Anderson2007-11-121-6/+17
| | | | | | | Could someone more familiar with machine-level stuff review this for me? git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44005 91177308-0d34-0410-b5e6-96231b3b80d8
* Remove unnecessary #include's.Owen Anderson2007-11-121-2/+0
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44003 91177308-0d34-0410-b5e6-96231b3b80d8
* As Chris and Evan pointed out, BreakCriticalMachineEdges doesn't really needOwen Anderson2007-11-122-4/+94
| | | | | | | to be a pass of its own. Instead, move it out into a helper method. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44002 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix some load/store logic that would be wrong forDuncan Sands2007-11-091-0/+7
| | | | | | | | | apints on big-endian machines if the bitwidth is not a multiple of 8. Introduce a new helper, MVT::getStoreSizeInBits, and use it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43934 91177308-0d34-0410-b5e6-96231b3b80d8
* Much improved pic jumptable codegen:Evan Cheng2007-11-091-5/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Then: call "L1$pb" "L1$pb": popl %eax ... LBB1_1: # entry imull $4, %ecx, %ecx leal LJTI1_0-"L1$pb"(%eax), %edx addl LJTI1_0-"L1$pb"(%ecx,%eax), %edx jmpl *%edx .align 2 .set L1_0_set_3,LBB1_3-LJTI1_0 .set L1_0_set_2,LBB1_2-LJTI1_0 .set L1_0_set_5,LBB1_5-LJTI1_0 .set L1_0_set_4,LBB1_4-LJTI1_0 LJTI1_0: .long L1_0_set_3 .long L1_0_set_2 Now: call "L1$pb" "L1$pb": popl %eax ... LBB1_1: # entry addl LJTI1_0-"L1$pb"(%eax,%ecx,4), %eax jmpl *%eax .align 2 .set L1_0_set_3,LBB1_3-"L1$pb" .set L1_0_set_2,LBB1_2-"L1$pb" .set L1_0_set_5,LBB1_5-"L1$pb" .set L1_0_set_4,LBB1_4-"L1$pb" LJTI1_0: .long L1_0_set_3 .long L1_0_set_2 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43924 91177308-0d34-0410-b5e6-96231b3b80d8
* Make BreakCriticalMachineEdges available as a pass that can be depended on.Owen Anderson2007-11-081-0/+4
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43910 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix MachineDominators' getAnalysisUsage.Owen Anderson2007-11-081-4/+5
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43868 91177308-0d34-0410-b5e6-96231b3b80d8
* Oops, forgot to commit this file.Owen Anderson2007-11-081-0/+4
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43867 91177308-0d34-0410-b5e6-96231b3b80d8
* Move SimpleRegisterCoalescing.h to lib/CodeGen since there is now a commonEvan Cheng2007-11-051-180/+0
| | | | | | | register coalescer interface: RegisterCoalescing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43714 91177308-0d34-0410-b5e6-96231b3b80d8
* Eliminate the remaining uses of getTypeSize. ThisDuncan Sands2007-11-051-2/+2
| | | | | | | | | | | | | | | should only effect x86 when using long double. Now 12/16 bytes are output for long double globals (the exact amount depends on the alignment). This brings globals in line with the rest of LLVM: the space reserved for an object is now always the ABI size. One tricky point is that only 10 bytes should be output for long double if it is a field in a packed struct, which is the reason for the additional argument to EmitGlobalConstant. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43688 91177308-0d34-0410-b5e6-96231b3b80d8
* There are times when the coalescer would not coalesce away a copy but the copyEvan Cheng2007-11-031-0/+5
| | | | | | | | | | | | | | | | | can be eliminated by the allocator is the destination and source targets the same register. The most common case is when the source and destination registers are in different class. For example, on x86 mov32to32_ targets GR32_ which contains a subset of the registers in GR32. The allocator can do 2 things: 1. Set the preferred allocation for the destination of a copy to that of its source. 2. After allocation is done, change the allocation of a copy destination (if legal) so the copy can be eliminated. This eliminates 443 extra moves from 403.gcc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43662 91177308-0d34-0410-b5e6-96231b3b80d8
* - Coalesce extract_subreg when both intervals are relatively small.Evan Cheng2007-11-011-5/+5
| | | | | | | - Some code clean up. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43606 91177308-0d34-0410-b5e6-96231b3b80d8
* Add a newline at the end of the file.Duncan Sands2007-10-311-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43550 91177308-0d34-0410-b5e6-96231b3b80d8
* Add the skeleton of a better PHI elimination pass.Owen Anderson2007-10-311-0/+8
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43542 91177308-0d34-0410-b5e6-96231b3b80d8
* Some fixes to get MachineDomTree working better.Owen Anderson2007-10-311-2/+16
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43541 91177308-0d34-0410-b5e6-96231b3b80d8
* Add a first attempt at dominator information for MBB's. Use with caution: ↵Owen Anderson2007-10-291-0/+170
| | | | | | this has been tested to compile. It has not yet been confirmed to generate correct analysis. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43438 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix comment typos.Duncan Sands2007-10-251-2/+2
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43338 91177308-0d34-0410-b5e6-96231b3b80d8
* Add support for byval function whose argument is not 32 bit aligned.Rafael Espindola2007-10-192-5/+17
| | | | | | | | | | | | | To do this it is necessary to add a "always inline" argument to the memcpy node. For completeness I have also added this node to memmove and memset. I have also added getMem* functions, because the extra argument makes it cumbersome to use getNode and because I get confused by it :-) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43172 91177308-0d34-0410-b5e6-96231b3b80d8
* More ppcf128 issues (maybe the last)?Dale Johannesen2007-10-191-0/+4
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43160 91177308-0d34-0410-b5e6-96231b3b80d8