summaryrefslogtreecommitdiffstats
path: root/llvm
Commit message (Collapse)AuthorAgeFilesLines
* add a optimization noteChris Lattner2005-08-091-0/+18
| | | | llvm-svn: 22732
* add cc nodes to the AllNodes list so they show up in Graphviz outputChris Lattner2005-08-091-1/+3
| | | | llvm-svn: 22731
* Add testcases for new rlwinm cases handled, patch by Jim Laskey!Chris Lattner2005-08-091-1/+44
| | | | llvm-svn: 22730
* Update the targets to the new SETCC/CondCodeSDNode interfaces.Chris Lattner2005-08-095-426/+407
| | | | llvm-svn: 22729
* Eliminate the SetCCSDNode in favor of a CondCodeSDNode class. This pulls theChris Lattner2005-08-095-192/+211
| | | | | | | | CC out of the SetCC operation, making SETCC a standard ternary operation and CC's a standard DAG leaf. This will make it possible for other node to use CC's as operands in the future... llvm-svn: 22728
* Minor cleanup patch, no functionality changes. Written by Jim Laskey.Chris Lattner2005-08-091-19/+19
| | | | llvm-svn: 22727
* Fix CodeGen/Generic/div-neg-power-2.ll, a regression from last night.Chris Lattner2005-08-091-0/+2
| | | | llvm-svn: 22726
* new reg test for a failure last night on ppc/darwinChris Lattner2005-08-091-0/+6
| | | | llvm-svn: 22725
* SCEVAddExpr::get() of an empty list is invalid.Chris Lattner2005-08-091-1/+4
| | | | llvm-svn: 22724
* This is now implementedChris Lattner2005-08-091-2/+0
| | | | llvm-svn: 22723
* Implement: LoopStrengthReduce/share_ivs.llChris Lattner2005-08-091-53/+153
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Two changes: * Only insert one PHI node for each stride. Other values are live in values. This cannot introduce higher register pressure than the previous approach, and can take advantage of reg+reg addressing modes. * Factor common base values out of uses before moving values from the base to the immediate fields. This improves codegen by starting the stride-specific PHI node out at a common place for each IV use. As an example, we used to generate this for a loop in swim: .LBB_main_no_exit_2E_6_2E_i_no_exit_2E_7_2E_i_2: ; no_exit.7.i lfd f0, 0(r8) stfd f0, 0(r3) lfd f0, 0(r6) stfd f0, 0(r7) lfd f0, 0(r2) stfd f0, 0(r5) addi r9, r9, 1 addi r2, r2, 8 addi r5, r5, 8 addi r6, r6, 8 addi r7, r7, 8 addi r8, r8, 8 addi r3, r3, 8 cmpw cr0, r9, r4 bgt .LBB_main_no_exit_2E_6_2E_i_no_exit_2E_7_2E_i_1 now we emit: .LBB_main_no_exit_2E_6_2E_i_no_exit_2E_7_2E_i_2: ; no_exit.7.i lfdx f0, r8, r2 stfdx f0, r9, r2 lfdx f0, r5, r2 stfdx f0, r7, r2 lfdx f0, r3, r2 stfdx f0, r6, r2 addi r10, r10, 1 addi r2, r2, 8 cmpw cr0, r10, r4 bgt .LBB_main_no_exit_2E_6_2E_i_no_exit_2E_7_2E_i_1 As another more dramatic example, we used to emit this: .LBB_main_L_90_no_exit_2E_0_2E_i16_no_exit_2E_1_2E_i19_2: ; no_exit.1.i19 lfd f0, 8(r21) lfd f4, 8(r3) lfd f5, 8(r27) lfd f6, 8(r22) lfd f7, 8(r5) lfd f8, 8(r6) lfd f9, 8(r30) lfd f10, 8(r11) lfd f11, 8(r12) fsub f10, f10, f11 fadd f5, f4, f5 fmul f5, f5, f1 fadd f6, f6, f7 fadd f6, f6, f8 fadd f6, f6, f9 fmadd f0, f5, f6, f0 fnmsub f0, f10, f2, f0 stfd f0, 8(r4) lfd f0, 8(r25) lfd f5, 8(r26) lfd f6, 8(r23) lfd f9, 8(r28) lfd f10, 8(r10) lfd f12, 8(r9) lfd f13, 8(r29) fsub f11, f13, f11 fadd f4, f4, f5 fmul f4, f4, f1 fadd f5, f6, f9 fadd f5, f5, f10 fadd f5, f5, f12 fnmsub f0, f4, f5, f0 fnmsub f0, f11, f3, f0 stfd f0, 8(r24) lfd f0, 8(r8) fsub f4, f7, f8 fsub f5, f12, f10 fnmsub f0, f5, f2, f0 fnmsub f0, f4, f3, f0 stfd f0, 8(r2) addi r20, r20, 1 addi r2, r2, 8 addi r8, r8, 8 addi r10, r10, 8 addi r12, r12, 8 addi r6, r6, 8 addi r29, r29, 8 addi r28, r28, 8 addi r26, r26, 8 addi r25, r25, 8 addi r24, r24, 8 addi r5, r5, 8 addi r23, r23, 8 addi r22, r22, 8 addi r3, r3, 8 addi r9, r9, 8 addi r11, r11, 8 addi r30, r30, 8 addi r27, r27, 8 addi r21, r21, 8 addi r4, r4, 8 cmpw cr0, r20, r7 bgt .LBB_main_L_90_no_exit_2E_0_2E_i16_no_exit_2E_1_2E_i19_1 we now emit: .LBB_main_L_90_no_exit_2E_0_2E_i16_no_exit_2E_1_2E_i19_2: ; no_exit.1.i19 lfdx f0, r21, r20 lfdx f4, r3, r20 lfdx f5, r27, r20 lfdx f6, r22, r20 lfdx f7, r5, r20 lfdx f8, r6, r20 lfdx f9, r30, r20 lfdx f10, r11, r20 lfdx f11, r12, r20 fsub f10, f10, f11 fadd f5, f4, f5 fmul f5, f5, f1 fadd f6, f6, f7 fadd f6, f6, f8 fadd f6, f6, f9 fmadd f0, f5, f6, f0 fnmsub f0, f10, f2, f0 stfdx f0, r4, r20 lfdx f0, r25, r20 lfdx f5, r26, r20 lfdx f6, r23, r20 lfdx f9, r28, r20 lfdx f10, r10, r20 lfdx f12, r9, r20 lfdx f13, r29, r20 fsub f11, f13, f11 fadd f4, f4, f5 fmul f4, f4, f1 fadd f5, f6, f9 fadd f5, f5, f10 fadd f5, f5, f12 fnmsub f0, f4, f5, f0 fnmsub f0, f11, f3, f0 stfdx f0, r24, r20 lfdx f0, r8, r20 fsub f4, f7, f8 fsub f5, f12, f10 fnmsub f0, f5, f2, f0 fnmsub f0, f4, f3, f0 stfdx f0, r2, r20 addi r19, r19, 1 addi r20, r20, 8 cmpw cr0, r19, r7 bgt .LBB_main_L_90_no_exit_2E_0_2E_i16_no_exit_2E_1_2E_i19_1 llvm-svn: 22722
* Suck the base value out of the UsersToProcess vector into the BasedUserChris Lattner2005-08-081-38/+38
| | | | | | class to simplify the code. Fuse two loops. llvm-svn: 22721
* Split MoveLoopVariantsToImediateField out from MoveImmediateValues. TheChris Lattner2005-08-081-23/+65
| | | | | | | first is a correctness thing, and the later is an optzn thing. This also is needed to support a future change. llvm-svn: 22720
* Factor out some common code, and be smarter about when to emit load hi/loNate Begeman2005-08-081-31/+27
| | | | | | code sequences. llvm-svn: 22719
* A testcase I don't want to break in the futureChris Lattner2005-08-081-0/+26
| | | | llvm-svn: 22718
* Allow tools with "consume after" options (like lli) to take more positionalChris Lattner2005-08-081-4/+1
| | | | | | | opts than they take directly. Thanks to John C for pointing this problem out to me! llvm-svn: 22717
* Remove getImmediateForOpcode, which is now dead.Chris Lattner2005-08-081-59/+0
| | | | | | Patch by Jim Laskey. llvm-svn: 22716
* Add new immediate handling support for mul/div.Chris Lattner2005-08-081-21/+30
| | | | | | Patch by Jim Laskey! llvm-svn: 22715
* Add support for OR/XOR/SUB immediates that are handled with the new immediateChris Lattner2005-08-081-37/+55
| | | | | | way. This allows ORI/ORIS pairs, for example. llvm-svn: 22714
* Modify the ISD::AND opcode case to use new immediate constant predicates.Chris Lattner2005-08-081-45/+36
| | | | | | | | | | Includes wider support for rotate and mask cases. Patch by Jim Laskey. I've requested that Jim add new regression tests the newly handled cases. llvm-svn: 22712
* Modify the ISD::ADD opcode case to use new immediate constant predicates.Chris Lattner2005-08-081-11/+15
| | | | | | | | Includes support for 32-bit constants using addi/addis. Patch by Jim Laskey. llvm-svn: 22711
* Modify existing support functions to use new immediate constant predicates.Chris Lattner2005-08-081-10/+9
| | | | | | Patch by Jim Laskey llvm-svn: 22710
* Add support predicates for future immediate constant changes.Chris Lattner2005-08-081-0/+71
| | | | | | Patch by Jim Laskey llvm-svn: 22709
* Move IsRunOfOnes to a more logical place and rename to a proper predicate formChris Lattner2005-08-081-24/+24
| | | | | | | | (lowercase isXXX). Patch by Jim Laskey. llvm-svn: 22708
* Fix JIT encoding of ppc mfocrf instruction; the operands were reversedNate Begeman2005-08-082-6/+20
| | | | llvm-svn: 22707
* Use the new 'moveBefore' method to simplify some code. Really, which isChris Lattner2005-08-083-6/+4
| | | | | | easier to understand? :) llvm-svn: 22706
* Reject command lines that have too many positional arguments passed (e.g.,Chris Lattner2005-08-081-1/+15
| | | | | | | | 'opt x y'). This fixes PR493. Patch contributed by Owen Anderson! llvm-svn: 22705
* Not all constants are legal immediates in load/store instructions.Chris Lattner2005-08-081-1/+7
| | | | llvm-svn: 22704
* new testcase, not implemented yetChris Lattner2005-08-081-0/+26
| | | | llvm-svn: 22703
* Implement LoopStrengthReduce/share_code_in_preheader.ll by having oneChris Lattner2005-08-081-1/+4
| | | | | | rewriter for all code inserted into the preheader, which is never flushed. llvm-svn: 22702
* It is better to not depend on CSE to share multiplies due to IV insertion.Chris Lattner2005-08-081-0/+28
| | | | | | | This testcase checks that only one mul is present in the output code, as it should be. llvm-svn: 22701
* These are both implemented by a recent LSR patchChris Lattner2005-08-082-2/+0
| | | | llvm-svn: 22700
* Implement a simple optimization for the termination condition of the loop.Chris Lattner2005-08-081-6/+107
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The termination condition actually wants to use the post-incremented value of the loop, not a new indvar with an unusual base. On PPC, for example, this allows us to compile LoopStrengthReduce/exit_compare_live_range.ll to: _foo: li r2, 0 .LBB_foo_1: ; no_exit li r5, 0 stw r5, 0(r3) addi r2, r2, 1 cmpw cr0, r2, r4 bne .LBB_foo_1 ; no_exit blr instead of: _foo: li r2, 1 ;; IV starts at 1, not 0 .LBB_foo_1: ; no_exit li r5, 0 stw r5, 0(r3) addi r5, r2, 1 cmpw cr0, r2, r4 or r2, r5, r5 ;; Reg-reg copy, extra live range bne .LBB_foo_1 ; no_exit blr This implements LoopStrengthReduce/exit_compare_live_range.ll llvm-svn: 22699
* add new helper functionChris Lattner2005-08-081-0/+9
| | | | llvm-svn: 22698
* add a new helper methodChris Lattner2005-08-081-0/+5
| | | | llvm-svn: 22697
* Handle 64-bit constant exprs on 64-bit targets.Chris Lattner2005-08-081-1/+3
| | | | llvm-svn: 22696
* All stats are "Number of ..."Chris Lattner2005-08-071-1/+1
| | | | llvm-svn: 22694
* Add some simple folds that occur in bitfield cases. Fix a minor bug inChris Lattner2005-08-071-0/+32
| | | | | | isHighOnes, where it would consider 0 to have high ones. llvm-svn: 22693
* Fix typoCVS: ↵Chris Lattner2005-08-071-1/+1
| | | | | | ---------------------------------------------------------------------- llvm-svn: 22692
* add a small simplification that can be exposed after promotion/expansionChris Lattner2005-08-071-2/+7
| | | | llvm-svn: 22691
* * Use the new PHINode::hasConstantValue method to simplify some codeChris Lattner2005-08-071-26/+66
| | | | | | | | | | | * Teach this code to move allocas out of the loop when tail call eliminating a call marked 'tail'. This implements TailCallElim/move_alloca_for_tail_call.ll * Do not perform this transformation if a call is marked 'tail' and if there are allocas that we cannot move out of the loop in #2. Doing so would increase the stack usage of the function. This implements fixes PR615 and TailCallElim/dont-tce-tail-marked-call.ll. llvm-svn: 22690
* New testcases for PR615Chris Lattner2005-08-072-0/+22
| | | | llvm-svn: 22689
* Consolidate the GPOpt stuff to all use the Subtarget, instead of stillChris Lattner2005-08-056-42/+48
| | | | | | | | depending on the command line option. Now the command line option just sets the subtarget as appropriate. G5 opts will now default to on on G5-enabled nightly testers among other machines. llvm-svn: 22688
* adjust to change in getSubtarget() apiChris Lattner2005-08-051-1/+1
| | | | llvm-svn: 22687
* Since getSubtarget() always provides a const Subtarget, dont' require the userChris Lattner2005-08-051-3/+3
| | | | | | | to pass it in. Also, since it always returns a non-null pointer, make it return a reference instead for easier use. llvm-svn: 22686
* Enable gp optimizations by default when available, even when a target tripleChris Lattner2005-08-051-0/+3
| | | | | | | is available, since the target triple doesn't specify whether to use gpopts or not. llvm-svn: 22685
* teach TestRunner about prcontextChris Lattner2005-08-051-1/+1
| | | | llvm-svn: 22683
* two simple testcases loopreduce should handle but does not yet currentlyChris Lattner2005-08-052-0/+50
| | | | llvm-svn: 22682
* add a noteChris Lattner2005-08-051-0/+3
| | | | llvm-svn: 22681
* Change FindEarliestCallSeqEnd (used by libcall insertion) to use a set toChris Lattner2005-08-051-5/+9
| | | | | | | | | avoid revisiting nodes more than once. This eliminates a source of potentially exponential behavior. For a small function in 191.fma3d (hexah_stress_divergence_), this speeds up isel from taking > 20mins to taking 0.07s. llvm-svn: 22680
OpenPOWER on IntegriCloud