oota-llvm.git
18 years agoadd selectcc
Chris Lattner [Sun, 11 Dec 2005 08:35:54 +0000 (08:35 +0000)]
add selectcc

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24662 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRemove type casts that are no longer needed
Chris Lattner [Sun, 11 Dec 2005 07:45:47 +0000 (07:45 +0000)]
Remove type casts that are no longer needed

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24661 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRealize the constant pool & global addrs must always be ptr type
Chris Lattner [Sun, 11 Dec 2005 07:45:04 +0000 (07:45 +0000)]
Realize the constant pool & global addrs must always be ptr type

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24660 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix the JIT failures from last night.
Chris Lattner [Sun, 11 Dec 2005 07:37:41 +0000 (07:37 +0000)]
Fix the JIT failures from last night.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24659 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFP select improvements (and likely breakage), oh and crazy people might want to ...
Andrew Lenharth [Sun, 11 Dec 2005 03:54:31 +0000 (03:54 +0000)]
FP select improvements (and likely breakage), oh and crazy people might want to *return* floating point values.  Don't see why myself

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24658 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd support for TargetConstantPool nodes to the dag isel emitter, and use
Nate Begeman [Sat, 10 Dec 2005 02:36:00 +0000 (02:36 +0000)]
Add support for TargetConstantPool nodes to the dag isel emitter, and use
them in the PPC backend, to simplify some logic out of Select and
SelectAddr.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24657 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoUse SDTCisPtrTy type property for store address.
Evan Cheng [Sat, 10 Dec 2005 01:59:36 +0000 (01:59 +0000)]
Use SDTCisPtrTy type property for store address.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24656 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoStop emitting a redudant type check for complex pattern node.
Evan Cheng [Sat, 10 Dec 2005 01:57:33 +0000 (01:57 +0000)]
Stop emitting a redudant type check for complex pattern node.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24655 91177308-0d34-0410-b5e6-96231b3b80d8

18 years ago* Added X86 store patterns.
Evan Cheng [Sat, 10 Dec 2005 00:48:20 +0000 (00:48 +0000)]
* Added X86 store patterns.
* Added X86 dec patterns.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24654 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdded new getNode and getTargetNode variants for X86 stores.
Evan Cheng [Sat, 10 Dec 2005 00:37:58 +0000 (00:37 +0000)]
Added new getNode and getTargetNode variants for X86 stores.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24653 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFor instructions which produce no result, e.g. store, chain's Resno == 0.
Evan Cheng [Sat, 10 Dec 2005 00:09:17 +0000 (00:09 +0000)]
For instructions which produce no result, e.g. store, chain's Resno == 0.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24652 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd support patterns to many load and store instructions which will
Nate Begeman [Fri, 9 Dec 2005 23:54:18 +0000 (23:54 +0000)]
Add support patterns to many load and store instructions which will
hopefully use patterns in the near future.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24651 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd SDTCisPtrTy and use it for loads, to indicate that the operand of a load
Chris Lattner [Fri, 9 Dec 2005 22:58:42 +0000 (22:58 +0000)]
Add SDTCisPtrTy and use it for loads, to indicate that the operand of a load
must be a pointer.  This removes a type check out of the code generated by
tblgen for load matching.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24650 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd a new SDTCisPtrTy constraint, which indicates that an operand must have
Chris Lattner [Fri, 9 Dec 2005 22:57:42 +0000 (22:57 +0000)]
Add a new SDTCisPtrTy constraint, which indicates that an operand must have
the same type as the pointer type for a target.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24649 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdded patterns for ADD8rm, etc. These fold load operands. e.g. addb 4(%esp), %al
Evan Cheng [Fri, 9 Dec 2005 22:48:48 +0000 (22:48 +0000)]
Added patterns for ADD8rm, etc. These fold load operands. e.g. addb 4(%esp), %al

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24648 91177308-0d34-0410-b5e6-96231b3b80d8

18 years ago* Do not allow nodes which produce chain results (e.g. loads) to be folded if
Evan Cheng [Fri, 9 Dec 2005 22:45:35 +0000 (22:45 +0000)]
* Do not allow nodes which produce chain results (e.g. loads) to be folded if
  it has more than one real use (non-chain uses).
* Record folded chain producing node in CodeGenMap.
* Do not fold a chain producing node if it has already been selected as an
  operand of a chain use.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24647 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAvoid emitting two tabs when switching to a named section
Chris Lattner [Fri, 9 Dec 2005 19:28:49 +0000 (19:28 +0000)]
Avoid emitting two tabs when switching to a named section

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24646 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoTeach the PPC backend about the ctor and dtor list when not using __main and
Chris Lattner [Fri, 9 Dec 2005 18:24:29 +0000 (18:24 +0000)]
Teach the PPC backend about the ctor and dtor list when not using __main and
linking the entire program into one bc file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24645 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoTeach legalize how to promote sext_inreg to fix a problem Andrew pointed
Chris Lattner [Fri, 9 Dec 2005 17:32:47 +0000 (17:32 +0000)]
Teach legalize how to promote sext_inreg to fix a problem Andrew pointed
out to me.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24644 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoPrevent folding of instructions which produce chains that have more than 1 real use
Evan Cheng [Fri, 9 Dec 2005 06:06:08 +0000 (06:06 +0000)]
Prevent folding of instructions which produce chains that have more than 1 real use

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24643 91177308-0d34-0410-b5e6-96231b3b80d8

18 years ago* Make sure complex pattern operands are selected first since their select
Evan Cheng [Fri, 9 Dec 2005 00:48:42 +0000 (00:48 +0000)]
* Make sure complex pattern operands are selected first since their select
functions can return false and causing the instruction pattern match to fail.
* Code clean up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24642 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoit helps if your conditionals are not reversed
Andrew Lenharth [Fri, 9 Dec 2005 00:45:42 +0000 (00:45 +0000)]
it helps if your conditionals are not reversed

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24641 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoimprove code insertion in two ways:
Chris Lattner [Thu, 8 Dec 2005 08:00:12 +0000 (08:00 +0000)]
improve code insertion in two ways:
1. Only forward subst offsets into loads and stores, not into arbitrary
   things, where it will likely become a load.
2. If the source is a cast from pointer, forward subst the cast as well,
   allowing us to fold the cast away (improving cases when the cast is
   from an alloca or global).

This hasn't been fully tested, but does appear to further reduce register
pressure and improve code.  Lets let the testers grind on it a bit. :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24640 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd another important case we miss
Chris Lattner [Thu, 8 Dec 2005 07:13:28 +0000 (07:13 +0000)]
Add another important case we miss

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24639 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdded support for ComplexPattern.
Evan Cheng [Thu, 8 Dec 2005 04:28:48 +0000 (04:28 +0000)]
Added support for ComplexPattern.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24638 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdded explicit type field to ComplexPattern.
Evan Cheng [Thu, 8 Dec 2005 02:15:07 +0000 (02:15 +0000)]
Added explicit type field to ComplexPattern.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24637 91177308-0d34-0410-b5e6-96231b3b80d8

18 years ago* Added an explicit type field to ComplexPattern.
Evan Cheng [Thu, 8 Dec 2005 02:14:08 +0000 (02:14 +0000)]
* Added an explicit type field to ComplexPattern.
* Renamed MatchingNodes to RootNodes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24636 91177308-0d34-0410-b5e6-96231b3b80d8

18 years ago* Added intelligence to X86 LEA addressing mode matching routine so it returns
Evan Cheng [Thu, 8 Dec 2005 02:01:35 +0000 (02:01 +0000)]
* Added intelligence to X86 LEA addressing mode matching routine so it returns
false if the match is not profitable. e.g. leal 1(%eax), %eax.
* Added patterns for X86 integer loads and LEA32.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24635 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdded support for ComplexPattern. These are patterns that require C++ pattern
Evan Cheng [Thu, 8 Dec 2005 02:00:36 +0000 (02:00 +0000)]
Added support for ComplexPattern. These are patterns that require C++ pattern
matching code that is not currently auto-generated by tblgen, e.g. X86
addressing mode. Selection routines for complex patterns can return multiple operands, e.g. X86 addressing mode returns 4.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24634 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix a crash where ConstantVec nodes were being generated with the wrong
Nate Begeman [Wed, 7 Dec 2005 19:48:11 +0000 (19:48 +0000)]
Fix a crash where ConstantVec nodes were being generated with the wrong
type when the target did not support them.  Also teach Legalize how to
expand ConstantVecs.

This allows us to generate

_test:
        lwz r2, 12(r3)
        lwz r4, 8(r3)
        lwz r5, 4(r3)
        lwz r6, 0(r3)
        addi r2, r2, 4
        addi r4, r4, 3
        addi r5, r5, 2
        addi r6, r6, 1
        stw r2, 12(r3)
        stw r4, 8(r3)
        stw r5, 4(r3)
        stw r6, 0(r3)
        blr

For:

void %test(%v4i *%P) {
        %T = load %v4i* %P
        %S = add %v4i %T, <int 1, int 2, int 3, int 4>
        store %v4i %S, %v4i * %P
        ret void
}

On PowerPC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24633 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoOnly transform (sext (truncate x)) -> (sextinreg x) if before legalize or
Chris Lattner [Wed, 7 Dec 2005 18:02:05 +0000 (18:02 +0000)]
Only transform (sext (truncate x)) -> (sextinreg x) if before legalize or
if the target supports the resultant sextinreg

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24632 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoX86 doesn't support sextinreg for 8-bit things either.
Chris Lattner [Wed, 7 Dec 2005 17:59:14 +0000 (17:59 +0000)]
X86 doesn't support sextinreg for 8-bit things either.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24631 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoTeach the dag combiner to turn a truncate/sign_extend pair into a sextinreg
Chris Lattner [Wed, 7 Dec 2005 07:11:03 +0000 (07:11 +0000)]
Teach the dag combiner to turn a truncate/sign_extend pair into a sextinreg
when the types match up.  This allows the X86 backend to compile:

sbyte %toggle_value(sbyte* %tmp.1) {
        %tmp.2 = load sbyte* %tmp.1
        ret sbyte %tmp.2
}

to this:

_toggle_value:
        mov %EAX, DWORD PTR [%ESP + 4]
        movsx %EAX, BYTE PTR [%EAX]
        ret

instead of this:

_toggle_value:
        mov %EAX, DWORD PTR [%ESP + 4]
        movsx %EAX, BYTE PTR [%EAX]
        movsx %EAX, %AL
        ret

noticed in Shootout/objinst.

-Chris

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24630 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRemove a now-dead map, patch by Saem Ghani, thanks!
Chris Lattner [Wed, 7 Dec 2005 05:41:44 +0000 (05:41 +0000)]
Remove a now-dead map, patch by Saem Ghani, thanks!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24629 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agofix divide and remainder
Andrew Lenharth [Tue, 6 Dec 2005 23:27:39 +0000 (23:27 +0000)]
fix divide and remainder

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24628 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoSilence another annoying GCC warning
Chris Lattner [Tue, 6 Dec 2005 20:56:18 +0000 (20:56 +0000)]
Silence another annoying GCC warning

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24627 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoThis solves the problem of the CBE renaming symbols that start with . but the assembl...
Andrew Lenharth [Tue, 6 Dec 2005 20:51:30 +0000 (20:51 +0000)]
This solves the problem of the CBE renaming symbols that start with . but the assembly side still trying to reference them by their old names.  Should be safe untill we hit a language front end that lets you specify such a name.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24626 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agomore decent branches for FP. I might have to make some intermediate nodes to actuall...
Andrew Lenharth [Tue, 6 Dec 2005 20:43:30 +0000 (20:43 +0000)]
more decent branches for FP.  I might have to make some intermediate nodes to actually be able to use the DAG for FPcmp

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24625 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoOK, this does wonders for broken stuff
Andrew Lenharth [Tue, 6 Dec 2005 20:40:34 +0000 (20:40 +0000)]
OK, this does wonders for broken stuff

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24624 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdded comment for removing assert
Sumant Kowshik [Tue, 6 Dec 2005 18:16:08 +0000 (18:16 +0000)]
Added comment for removing assert

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24623 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoCollapsing node if variable length struct with final field of length zero
Sumant Kowshik [Tue, 6 Dec 2005 18:04:30 +0000 (18:04 +0000)]
Collapsing node if variable length struct with final field of length zero

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24621 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoHandling of zero length last fields in struct used for growing it arbitrarily
Sumant Kowshik [Tue, 6 Dec 2005 18:01:20 +0000 (18:01 +0000)]
Handling of zero length last fields in struct used for growing it arbitrarily

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24620 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix test/Regression/Linker/2005-12-06-AppendingZeroLengthArrays.ll and
Chris Lattner [Tue, 6 Dec 2005 17:30:58 +0000 (17:30 +0000)]
Fix test/Regression/Linker/2005-12-06-AppendingZeroLengthArrays.ll and
PR662.  Thanks to Markus for providing me with a ton of files to
reproduce the problem!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24619 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agonew testcase for PR662
Chris Lattner [Tue, 6 Dec 2005 17:29:54 +0000 (17:29 +0000)]
new testcase for PR662

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24618 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoImplement external storage for post-order iteration, implementing PR267
Chris Lattner [Tue, 6 Dec 2005 07:05:27 +0000 (07:05 +0000)]
Implement external storage for post-order iteration, implementing PR267
Patch by Saem Ghani, thanks!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24617 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoTeach the SelectionDAG ISel how to turn ConstantPacked values into
Nate Begeman [Tue, 6 Dec 2005 06:18:55 +0000 (06:18 +0000)]
Teach the SelectionDAG ISel how to turn ConstantPacked values into
constant nodes with vector types.  Also teach the asm printer how to print
ConstantPacked constant pool entries.  This allows us to generate altivec
code such as the following, which adds a vector constantto a packed float.

LCPI1_0:  <4 x float> < float 0.0e+0, float 0.0e+0, float 0.0e+0, float 1.0e+0 >
        .space  4
        .space  4
        .space  4
        .long   1065353216      ; float 1
        .text
        .align  4
        .globl  _foo
_foo:
        lis r2, ha16(LCPI1_0)
        la r2, lo16(LCPI1_0)(r2)
        li r4, 0
        lvx v0, r4, r2
        lvx v1, r4, r3
        vaddfp v0, v1, v0
        stvx v0, r4, r3
        blr

For the llvm code:

void %foo(<4 x float> * %a) {
entry:
  %tmp1 = load <4 x float> * %a;
  %tmp2 = add <4 x float> %tmp1, < float 0.0, float 0.0, float 0.0, float 1.0 >
  store <4 x float> %tmp2, <4 x float> *%a
  ret void
}

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24616 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoUse new PPC-specific nodes to represent shifts which require the 6-bit
Chris Lattner [Tue, 6 Dec 2005 02:10:38 +0000 (02:10 +0000)]
Use new PPC-specific nodes to represent shifts which require the 6-bit
amount handling that PPC provides.  These are generated by the lowering code
and prevents the dag combiner from assuming (rightfully) that the shifts
don't only look at 5 bits.  This fixes a miscompilation of crafty with
the new front-end.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24615 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadded instructions with inverted immediates
Andrew Lenharth [Tue, 6 Dec 2005 00:33:53 +0000 (00:33 +0000)]
added instructions with inverted immediates

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24614 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoyea, it helps to have your path set right when testing
Andrew Lenharth [Mon, 5 Dec 2005 23:41:45 +0000 (23:41 +0000)]
yea, it helps to have your path set right when testing

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24613 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoThese never trigger, but whatever
Andrew Lenharth [Mon, 5 Dec 2005 23:19:44 +0000 (23:19 +0000)]
These never trigger, but whatever

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24612 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRemove unnecessary let hasCtrlDep=1 now it can be inferred.
Evan Cheng [Mon, 5 Dec 2005 23:09:43 +0000 (23:09 +0000)]
Remove unnecessary let hasCtrlDep=1 now it can be inferred.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24611 91177308-0d34-0410-b5e6-96231b3b80d8

18 years ago* Infer instruction property hasCtrlDep from pattern if it has one.
Evan Cheng [Mon, 5 Dec 2005 23:08:55 +0000 (23:08 +0000)]
* Infer instruction property hasCtrlDep from pattern if it has one.
* Fixed a bug related to hasCtrlDep property use.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24610 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agomove this over to the dag
Andrew Lenharth [Mon, 5 Dec 2005 20:50:53 +0000 (20:50 +0000)]
move this over to the dag

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24609 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agogetRawValue zero extens for unsigned values, use getsextvalue so that we
Chris Lattner [Mon, 5 Dec 2005 18:23:57 +0000 (18:23 +0000)]
getRawValue zero extens for unsigned values, use getsextvalue so that we
know that small negative values fit into the immediate field of addressing
modes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24608 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agofix constant pool loads
Andrew Lenharth [Mon, 5 Dec 2005 17:51:02 +0000 (17:51 +0000)]
fix constant pool loads

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24607 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix the #1 code quality problem that I have seen on X86 (and it also affects
Chris Lattner [Mon, 5 Dec 2005 07:10:48 +0000 (07:10 +0000)]
Fix the #1 code quality problem that I have seen on X86 (and it also affects
PPC and other targets).  In a particular, consider code like this:

struct Vector3 { double x, y, z; };
struct Matrix3 { Vector3 a, b, c; };
double dot(Vector3 &a, Vector3 &b) {
   return a.x * b.x  +  a.y * b.y  +  a.z * b.z;
}
Vector3 mul(Vector3 &a, Matrix3 &b) {
   Vector3 r;
   r.x = dot( a, b.a );
   r.y = dot( a, b.b );
   r.z = dot( a, b.c );
   return r;
}
void transform(Matrix3 &m, Vector3 *x, int n) {
   for (int i = 0; i < n; i++)
      x[i] = mul( x[i], m );
}

we compile transform to a loop with all of the GEP instructions for indexing
into 'm' pulled out of the loop (9 of them).  Because isel occurs a bb at a time
we are unable to fold the constant index into the loads in the loop, leading to
PPC code that looks like this:

LBB3_1: ; no_exit.preheader
        li r2, 0
        addi r6, r3, 64        ;; 9 values live across the loop body!
        addi r7, r3, 56
        addi r8, r3, 48
        addi r9, r3, 40
        addi r10, r3, 32
        addi r11, r3, 24
        addi r12, r3, 16
        addi r30, r3, 8
LBB3_2: ; no_exit
        lfd f0, 0(r30)
        lfd f1, 8(r4)
        fmul f0, f1, f0
        lfd f2, 0(r3)        ;; no constant indices folded into the loads!
        lfd f3, 0(r4)
        lfd f4, 0(r10)
        lfd f5, 0(r6)
        lfd f6, 0(r7)
        lfd f7, 0(r8)
        lfd f8, 0(r9)
        lfd f9, 0(r11)
        lfd f10, 0(r12)
        lfd f11, 16(r4)
        fmadd f0, f3, f2, f0
        fmul f2, f1, f4
        fmadd f0, f11, f10, f0
        fmadd f2, f3, f9, f2
        fmul f1, f1, f6
        stfd f0, 0(r4)
        fmadd f0, f11, f8, f2
        fmadd f1, f3, f7, f1
        stfd f0, 8(r4)
        fmadd f0, f11, f5, f1
        addi r29, r4, 24
        stfd f0, 16(r4)
        addi r2, r2, 1
        cmpw cr0, r2, r5
        or r4, r29, r29
        bne cr0, LBB3_2 ; no_exit

uh, yuck.  With this patch, we now sink the constant offsets into the loop, producing
this code:

LBB3_1: ; no_exit.preheader
        li r2, 0
LBB3_2: ; no_exit
        lfd f0, 8(r3)
        lfd f1, 8(r4)
        fmul f0, f1, f0
        lfd f2, 0(r3)
        lfd f3, 0(r4)
        lfd f4, 32(r3)       ;; much nicer.
        lfd f5, 64(r3)
        lfd f6, 56(r3)
        lfd f7, 48(r3)
        lfd f8, 40(r3)
        lfd f9, 24(r3)
        lfd f10, 16(r3)
        lfd f11, 16(r4)
        fmadd f0, f3, f2, f0
        fmul f2, f1, f4
        fmadd f0, f11, f10, f0
        fmadd f2, f3, f9, f2
        fmul f1, f1, f6
        stfd f0, 0(r4)
        fmadd f0, f11, f8, f2
        fmadd f1, f3, f7, f1
        stfd f0, 8(r4)
        fmadd f0, f11, f5, f1
        addi r6, r4, 24
        stfd f0, 16(r4)
        addi r2, r2, 1
        cmpw cr0, r2, r5
        or r4, r6, r6
        bne cr0, LBB3_2 ; no_exit

This is much nicer as it reduces register pressure in the loop a lot.  On X86,
this takes the function from having 9 spilled registers to 2.  This should help
some spec programs on X86 (gzip?)

This is currently only enabled with -enable-gep-isel-opt to allow perf testing
tonight.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24606 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd a flag to Module::getGlobalVariable to allow it to return vars with
Chris Lattner [Mon, 5 Dec 2005 05:30:21 +0000 (05:30 +0000)]
Add a flag to Module::getGlobalVariable to allow it to return vars with
internal linkage.

Patch provided by Evan Jones, thanks!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24604 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoattribute((used)) is now supported
Chris Lattner [Mon, 5 Dec 2005 05:23:06 +0000 (05:23 +0000)]
attribute((used)) is now supported

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24603 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoWrap a long line, never internalize llvm.used.
Chris Lattner [Mon, 5 Dec 2005 05:07:38 +0000 (05:07 +0000)]
Wrap a long line, never internalize llvm.used.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24602 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoNew testcase for PR660
Chris Lattner [Mon, 5 Dec 2005 04:48:12 +0000 (04:48 +0000)]
New testcase for PR660

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24601 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agotestcase for PR664
Chris Lattner [Mon, 5 Dec 2005 03:22:46 +0000 (03:22 +0000)]
testcase for PR664

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24600 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoSeveral things:
Chris Lattner [Mon, 5 Dec 2005 02:40:25 +0000 (02:40 +0000)]
Several things:
1. Remove redundant type casts now that PR673 is implemented.
2. Implement the OUT*ir instructions correctly.  The port number really
   *is* a 16-bit value, but the patterns should only match if the number
   is 0-255.  Update the patterns so they now match.
3. Fix patterns for shifts to reflect that the shift amount is always an
   i8, not an i16 as they were believed to be before.  This previous fib
   stopped working when we started knowing that CL has type i8.
4. Change use of i16i8imm in SH*ri patterns to all be imm.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24599 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoOn some targets (e.g. X86), shift amounts are not the same as the value
Chris Lattner [Mon, 5 Dec 2005 02:37:26 +0000 (02:37 +0000)]
On some targets (e.g. X86), shift amounts are not the same as the value
being shifted.  Don't assume they are.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24598 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoImplement PR673: for explicit register references, use type information
Chris Lattner [Mon, 5 Dec 2005 02:36:37 +0000 (02:36 +0000)]
Implement PR673: for explicit register references, use type information
if available

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24597 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd some methods
Chris Lattner [Mon, 5 Dec 2005 02:35:08 +0000 (02:35 +0000)]
Add some methods

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24596 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd some explicit type casts so that tblgen knows the type of the shiftamount, which...
Chris Lattner [Mon, 5 Dec 2005 02:34:29 +0000 (02:34 +0000)]
Add some explicit type casts so that tblgen knows the type of the shiftamount, which is not necessarily the same as the type being shifted.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24595 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdd some explicit type casts so that tblgen knows the type of the shift
Chris Lattner [Mon, 5 Dec 2005 02:34:05 +0000 (02:34 +0000)]
Add some explicit type casts so that tblgen knows the type of the shift
amount, which is not necessarily the same as the type being shifted.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24594 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoGenerate code to silence bogus GCC warnings.
Chris Lattner [Mon, 5 Dec 2005 00:48:51 +0000 (00:48 +0000)]
Generate code to silence bogus GCC warnings.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24593 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoThe basic fneg cases are already autogen'd
Chris Lattner [Sun, 4 Dec 2005 19:04:38 +0000 (19:04 +0000)]
The basic fneg cases are already autogen'd

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24592 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAutogen matching code for ADJCALLSTACK[UP|DOWN], thanks to Evan's tblgen
Chris Lattner [Sun, 4 Dec 2005 19:01:59 +0000 (19:01 +0000)]
Autogen matching code for ADJCALLSTACK[UP|DOWN], thanks to Evan's tblgen
improvements.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24591 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFinish moving uncond br over to .td file, remove from .cpp file.
Chris Lattner [Sun, 4 Dec 2005 18:48:01 +0000 (18:48 +0000)]
Finish moving uncond br over to .td file, remove from .cpp file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24590 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoDefine BR in the .td file now that Evan made tblgen smarter.
Chris Lattner [Sun, 4 Dec 2005 18:42:54 +0000 (18:42 +0000)]
Define BR in the .td file now that Evan made tblgen smarter.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24589 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoAdded isel patterns for RET, JMP, and WRITEPORT.
Evan Cheng [Sun, 4 Dec 2005 08:19:43 +0000 (08:19 +0000)]
Added isel patterns for RET, JMP, and WRITEPORT.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24588 91177308-0d34-0410-b5e6-96231b3b80d8

18 years ago* Commit the fix (by Chris) for a tblgen type inferencing bug.
Evan Cheng [Sun, 4 Dec 2005 08:18:16 +0000 (08:18 +0000)]
* Commit the fix (by Chris) for a tblgen type inferencing bug.
* Enhanced tblgen to handle instructions which have chain operand and writes a
chain result.
* Enhanced tblgen to handle instructions which produces no results. Part of
the change is a temporary hack which relies on instruction property (e.g.
isReturn, isBranch). The proper fix would be to change the .td syntax to
separate results dag from ops dag.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24587 91177308-0d34-0410-b5e6-96231b3b80d8

18 years ago* Added instruction property hasCtrlDep for those which r/w control-flow
Evan Cheng [Sun, 4 Dec 2005 08:13:17 +0000 (08:13 +0000)]
* Added instruction property hasCtrlDep for those which r/w control-flow
  chains.
* Added DAG node property SDNPHasChain for nodes which r/w control-flow
  chains.
* Renamed SDTVT to SDTOther.
* Added several new SDTypeProfiles for BR, BRCOND, RET, and WRITEPORT.
* Added SDNode definitions for BR, BRCOND, RET, and WRITEPORT.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24586 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix PR672 another way which should be more robust
Chris Lattner [Sun, 4 Dec 2005 06:03:50 +0000 (06:03 +0000)]
Fix PR672 another way which should be more robust

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24585 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agonew testcase, for PR672
Chris Lattner [Sun, 4 Dec 2005 06:03:25 +0000 (06:03 +0000)]
new testcase, for PR672

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24584 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agodbg.stoppoint returns a value, don't forget to init it
Chris Lattner [Sat, 3 Dec 2005 18:50:48 +0000 (18:50 +0000)]
dbg.stoppoint returns a value, don't forget to init it

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24583 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoexpand testcase, which has been in my tree for a while now
Chris Lattner [Sat, 3 Dec 2005 18:26:41 +0000 (18:26 +0000)]
expand testcase, which has been in my tree for a while now

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24582 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix SimplifyCFG/2005-12-03-IncorrectPHIFold.ll
Chris Lattner [Sat, 3 Dec 2005 18:25:58 +0000 (18:25 +0000)]
Fix SimplifyCFG/2005-12-03-IncorrectPHIFold.ll

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24581 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agonew testcase, miscompiled by simplifycfg. This has been distilled from Ptrdist/bc
Chris Lattner [Sat, 3 Dec 2005 18:25:32 +0000 (18:25 +0000)]
new testcase, miscompiled by simplifycfg.  This has been distilled from Ptrdist/bc

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24580 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix a bug in the testcase
Chris Lattner [Sat, 3 Dec 2005 17:20:57 +0000 (17:20 +0000)]
Fix a bug in the testcase

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24579 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix test/Regression/ExecutionEngine/2005-12-02-TailCallBug.ll and PR672.
Chris Lattner [Sat, 3 Dec 2005 07:15:55 +0000 (07:15 +0000)]
Fix test/Regression/ExecutionEngine/2005-12-02-TailCallBug.ll and PR672.

This also fixes 177.mesa, the only program that fails with --enable-x86-fastcc
turned on.  Given a clean nightly tester run, we should be able to turn it
on by default!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24578 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agonew testcase for PR672
Chris Lattner [Sat, 3 Dec 2005 07:14:47 +0000 (07:14 +0000)]
new testcase for PR672

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24577 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoRevert my previous patch which broke due to lazy streaming of functions
Chris Lattner [Fri, 2 Dec 2005 19:00:22 +0000 (19:00 +0000)]
Revert my previous patch which broke due to lazy streaming of functions
from .bc files.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24575 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agobah, must generate all results
Andrew Lenharth [Fri, 2 Dec 2005 06:08:08 +0000 (06:08 +0000)]
bah, must generate all results

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24574 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agocycle counter fix
Andrew Lenharth [Fri, 2 Dec 2005 04:56:24 +0000 (04:56 +0000)]
cycle counter fix

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24573 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoadd a note
Chris Lattner [Fri, 2 Dec 2005 00:11:20 +0000 (00:11 +0000)]
add a note

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24572 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoDon't remove two operand, two result nodes from the binary ops map. These
Chris Lattner [Thu, 1 Dec 2005 23:14:50 +0000 (23:14 +0000)]
Don't remove two operand, two result nodes from the binary ops map.  These
should come from the arbitrary ops map.

This fixes Regression/CodeGen/PowerPC/2005-12-01-Crash.ll

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24571 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoNew testcase that crashes llc
Chris Lattner [Thu, 1 Dec 2005 23:14:09 +0000 (23:14 +0000)]
New testcase that crashes llc

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24570 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoIf a module has a main, but it is defined externally, refuse to run it.
Chris Lattner [Thu, 1 Dec 2005 22:48:23 +0000 (22:48 +0000)]
If a module has a main, but it is defined externally, refuse to run it.

Attempting to run it will find lli's main, which isn't the desired effect.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24569 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoPromote line and column number information for our friendly 64-bit targets.
Chris Lattner [Thu, 1 Dec 2005 18:21:35 +0000 (18:21 +0000)]
Promote line and column number information for our friendly 64-bit targets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24568 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoIA64 doesn't support the LOCATION node, and for some reason the ISelPattern
Chris Lattner [Thu, 1 Dec 2005 18:19:53 +0000 (18:19 +0000)]
IA64 doesn't support the LOCATION node, and for some reason the ISelPattern
stuff isn't using ISelLowering.cpp

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24567 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoMake sure these get added into the codegenmap when appropriate
Chris Lattner [Thu, 1 Dec 2005 18:09:22 +0000 (18:09 +0000)]
Make sure these get added into the codegenmap when appropriate

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24566 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoThis is a bugfix for SelectNodeTo. In certain situations, we could be
Chris Lattner [Thu, 1 Dec 2005 18:00:57 +0000 (18:00 +0000)]
This is a bugfix for SelectNodeTo.  In certain situations, we could be
selecting a node and use a mix of getTargetNode() and SelectNodeTo.  Because
SelectNodeTo didn't check the CSE maps for a preexisting node and didn't insert
its result into the CSE maps, we would sometimes miss a CSE opportunity.

This is extremely rare, but worth fixing for completeness.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24565 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agomajor think-o
Andrew Lenharth [Thu, 1 Dec 2005 17:48:51 +0000 (17:48 +0000)]
major think-o

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24564 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoSupport multiple ValueTypes per RegisterClass, needed for upcoming vector
Nate Begeman [Thu, 1 Dec 2005 04:51:06 +0000 (04:51 +0000)]
Support multiple ValueTypes per RegisterClass, needed for upcoming vector
work.  This change has no effect on generated code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24563 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoCosmetic change, better reflects actual values
Nate Begeman [Thu, 1 Dec 2005 04:48:26 +0000 (04:48 +0000)]
Cosmetic change, better reflects actual values

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24562 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFix a regression caused by a patch earlier today
Chris Lattner [Thu, 1 Dec 2005 03:50:19 +0000 (03:50 +0000)]
Fix a regression caused by a patch earlier today

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24561 91177308-0d34-0410-b5e6-96231b3b80d8

18 years agoFlags where I think I need them, quick, before the nightly tester starts
Andrew Lenharth [Thu, 1 Dec 2005 01:53:10 +0000 (01:53 +0000)]
Flags where I think I need them, quick, before the nightly tester starts

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24560 91177308-0d34-0410-b5e6-96231b3b80d8