oota-llvm.git
18 years agoadd a note
Chris Lattner [Tue, 18 Apr 2006 18:30:19 +0000 (18:30 +0000)]
add a note

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

18 years agoFix a crash on:
Chris Lattner [Tue, 18 Apr 2006 18:28:22 +0000 (18:28 +0000)]
Fix a crash on:
void foo2(vector float *A, vector float *B) {
  vector float C = (vector float)vec_cmpeq(*A, *B);
  if (!vec_any_eq(*A, *B))
    *B = (vector float){0,0,0,0};
  *A = C;
}

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

18 years agoFixed an encoding bug: movd from XMM to R32.
Evan Cheng [Tue, 18 Apr 2006 18:19:00 +0000 (18:19 +0000)]
Fixed an encoding bug: movd from XMM to R32.

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

18 years agopretty print node name
Chris Lattner [Tue, 18 Apr 2006 18:05:58 +0000 (18:05 +0000)]
pretty print node name

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

18 years agoImplement an important entry from README_ALTIVEC:
Chris Lattner [Tue, 18 Apr 2006 17:59:36 +0000 (17:59 +0000)]
Implement an important entry from README_ALTIVEC:

If an altivec predicate compare is used immediately by a branch, don't
use a (serializing) MFCR instruction to read the CR6 register, which requires
a compare to get it back to CR's.  Instead, just branch on CR6 directly. :)

For example, for:
void foo2(vector float *A, vector float *B) {
  if (!vec_any_eq(*A, *B))
    *B = (vector float){0,0,0,0};
}

We now generate:

_foo2:
        mfspr r2, 256
        oris r5, r2, 12288
        mtspr 256, r5
        lvx v2, 0, r4
        lvx v3, 0, r3
        vcmpeqfp. v2, v3, v2
        bne cr6, LBB1_2 ; UnifiedReturnBlock
LBB1_1: ; cond_true
        vxor v2, v2, v2
        stvx v2, 0, r4
        mtspr 256, r2
        blr
LBB1_2: ; UnifiedReturnBlock
        mtspr 256, r2
        blr

instead of:

_foo2:
        mfspr r2, 256
        oris r5, r2, 12288
        mtspr 256, r5
        lvx v2, 0, r4
        lvx v3, 0, r3
        vcmpeqfp. v2, v3, v2
        mfcr r3, 2
        rlwinm r3, r3, 27, 31, 31
        cmpwi cr0, r3, 0
        beq cr0, LBB1_2 ; UnifiedReturnBlock
LBB1_1: ; cond_true
        vxor v2, v2, v2
        stvx v2, 0, r4
        mtspr 256, r2
        blr
LBB1_2: ; UnifiedReturnBlock
        mtspr 256, r2
        blr

This implements CodeGen/PowerPC/vec_br_cmp.ll.

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

18 years agonew testcase
Chris Lattner [Tue, 18 Apr 2006 17:56:30 +0000 (17:56 +0000)]
new testcase

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

18 years agomove some stuff around, clean things up
Chris Lattner [Tue, 18 Apr 2006 17:52:36 +0000 (17:52 +0000)]
move some stuff around, clean things up

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

18 years agoTeach the codegen about instructions used for SSE spill code, allowing it
Chris Lattner [Tue, 18 Apr 2006 16:44:51 +0000 (16:44 +0000)]
Teach the codegen about instructions used for SSE spill code, allowing it
to optimize cases where it has to spill a lot

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

18 years agoFix a copy & paste error from long ago.
Nate Begeman [Tue, 18 Apr 2006 16:03:18 +0000 (16:03 +0000)]
Fix a copy & paste error from long ago.

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

18 years agoAdd some more notes, many still missing
Chris Lattner [Tue, 18 Apr 2006 06:32:08 +0000 (06:32 +0000)]
Add some more notes, many still missing

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

18 years agoHave the AutoRegen.sh script prompt the user for the LLVM src and obj
Reid Spencer [Tue, 18 Apr 2006 06:27:47 +0000 (06:27 +0000)]
Have the AutoRegen.sh script prompt the user for the LLVM src and obj
directories if it can't find them. Then, replace those values into the
configure.ac script and pass them to the LLVM_CONFIG_PROJECT so that the
values become the default for llvm_src and llvm_obj variables. In this way
the user is required to input this exactly once, and the scripts take it
from there.

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

18 years agoMake it possible to default the llvm_src and llvm_obj variables based on
Reid Spencer [Tue, 18 Apr 2006 06:25:37 +0000 (06:25 +0000)]
Make it possible to default the llvm_src and llvm_obj variables based on
the arguments to the macro. This better supports the AutoRegen.sh script
in projects/sample/autoconf.

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

18 years agoadd a bunch of stuff, pieces still missing
Chris Lattner [Tue, 18 Apr 2006 06:18:36 +0000 (06:18 +0000)]
add a bunch of stuff, pieces still missing

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

18 years agoAdd a warning.
Chris Lattner [Tue, 18 Apr 2006 05:31:20 +0000 (05:31 +0000)]
Add a warning.

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

18 years agoAdd a warning
Chris Lattner [Tue, 18 Apr 2006 05:26:10 +0000 (05:26 +0000)]
Add a warning

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

18 years agoUse vmladduhm to do v8i16 multiplies which is faster and simpler than doing
Chris Lattner [Tue, 18 Apr 2006 04:28:57 +0000 (04:28 +0000)]
Use vmladduhm to do v8i16 multiplies which is faster and simpler than doing
even/odd halves.  Thanks to Nate telling me what's what.

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

18 years agoImplement v16i8 multiply with this code:
Chris Lattner [Tue, 18 Apr 2006 03:57:35 +0000 (03:57 +0000)]
Implement v16i8 multiply with this code:

        vmuloub v5, v3, v2
        vmuleub v2, v3, v2
        vperm v2, v2, v5, v4

This implements CodeGen/PowerPC/vec_mul.ll.  With this, v16i8 multiplies are
6.79x faster than before.

Overall, UnitTests/Vector/multiplies.c is now 2.45x faster with LLVM than with
GCC.

Remove the 'integer multiplies' todo from the README file.

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

18 years agoAdd tests for v8i16 and v16i8
Chris Lattner [Tue, 18 Apr 2006 03:54:50 +0000 (03:54 +0000)]
Add tests for v8i16 and v16i8

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

18 years agoCorrect comments
Evan Cheng [Tue, 18 Apr 2006 03:45:01 +0000 (03:45 +0000)]
Correct comments

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

18 years agoLower v8i16 multiply into this code:
Chris Lattner [Tue, 18 Apr 2006 03:43:48 +0000 (03:43 +0000)]
Lower v8i16 multiply into this code:

        li r5, lo16(LCPI1_0)
        lis r6, ha16(LCPI1_0)
        lvx v4, r6, r5
        vmulouh v5, v3, v2
        vmuleuh v2, v3, v2
        vperm v2, v2, v5, v4

where v4 is:
LCPI1_0:                                        ;  <16 x ubyte>
        .byte   2
        .byte   3
        .byte   18
        .byte   19
        .byte   6
        .byte   7
        .byte   22
        .byte   23
        .byte   10
        .byte   11
        .byte   26
        .byte   27
        .byte   14
        .byte   15
        .byte   30
        .byte   31

This is 5.07x faster on the G5 (measured) than lowering to scalar code +
loads/stores.

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

18 years agoCustom lower v4i32 multiplies into a cute sequence, instead of having legalize
Chris Lattner [Tue, 18 Apr 2006 03:24:30 +0000 (03:24 +0000)]
Custom lower v4i32 multiplies into a cute sequence, instead of having legalize
scalarize the sequence into 4 mullw's and a bunch of load/store traffic.

This speeds up v4i32 multiplies 4.1x (measured) on a G5.  This implements
PowerPC/vec_mul.ll

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

18 years agonew testcase
Chris Lattner [Tue, 18 Apr 2006 03:22:16 +0000 (03:22 +0000)]
new testcase

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

18 years agoAnother entry
Evan Cheng [Tue, 18 Apr 2006 01:22:57 +0000 (01:22 +0000)]
Another entry

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

18 years agoFix a build failure on Vladimir's tester.
Chris Lattner [Tue, 18 Apr 2006 00:21:25 +0000 (00:21 +0000)]
Fix a build failure on Vladimir's tester.

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

18 years agoAnother entry.
Evan Cheng [Tue, 18 Apr 2006 00:21:01 +0000 (00:21 +0000)]
Another entry.

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

18 years agoUse movss to insert_vector_elt(v, s, 0).
Evan Cheng [Mon, 17 Apr 2006 22:45:49 +0000 (22:45 +0000)]
Use movss to insert_vector_elt(v, s, 0).

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

18 years agoTurn x86 unaligned load/store intrinsics into aligned load/store instructions
Chris Lattner [Mon, 17 Apr 2006 22:26:56 +0000 (22:26 +0000)]
Turn x86 unaligned load/store intrinsics into aligned load/store instructions
if the pointer is known aligned.

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

18 years agoFix handling of calls in functions that use vectors. This fixes a crash on
Chris Lattner [Mon, 17 Apr 2006 22:10:08 +0000 (22:10 +0000)]
Fix handling of calls in functions that use vectors.  This fixes a crash on
the code in GCC PR26546.

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

18 years agoUse two pinsrw to insert an element into v4i32 / v4f32 vector.
Evan Cheng [Mon, 17 Apr 2006 22:04:06 +0000 (22:04 +0000)]
Use two pinsrw to insert an element into v4i32 / v4f32 vector.

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

18 years agoremove done item
Chris Lattner [Mon, 17 Apr 2006 21:52:03 +0000 (21:52 +0000)]
remove done item

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

18 years agoDon't diddle VRSAVE if no registers need to be added/removed from it. This
Chris Lattner [Mon, 17 Apr 2006 21:48:13 +0000 (21:48 +0000)]
Don't diddle VRSAVE if no registers need to be added/removed from it.  This
allows us to codegen functions as:

_test_rol:
        vspltisw v2, -12
        vrlw v2, v2, v2
        blr

instead of:

_test_rol:
        mfvrsave r2, 256
        mr r3, r2
        mtvrsave r3
        vspltisw v2, -12
        vrlw v2, v2, v2
        mtvrsave r2
        blr

Testcase here: CodeGen/PowerPC/vec_vrsave.ll

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

18 years agoNew testcase, shouldn't touch vrsave
Chris Lattner [Mon, 17 Apr 2006 21:48:03 +0000 (21:48 +0000)]
New testcase, shouldn't touch vrsave

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

18 years agoAdd a MachineInstr::eraseFromParent convenience method.
Chris Lattner [Mon, 17 Apr 2006 21:35:41 +0000 (21:35 +0000)]
Add a MachineInstr::eraseFromParent convenience method.

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

18 years agoAdd some convenience methods.
Chris Lattner [Mon, 17 Apr 2006 21:35:08 +0000 (21:35 +0000)]
Add some convenience methods.

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

18 years agoEncoding bug
Evan Cheng [Mon, 17 Apr 2006 21:33:57 +0000 (21:33 +0000)]
Encoding bug

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

18 years agoVectors that are known live-in and live-out are clearly already marked in
Chris Lattner [Mon, 17 Apr 2006 21:22:06 +0000 (21:22 +0000)]
Vectors that are known live-in and live-out are clearly already marked in
the vrsave register for the caller.  This allows us to codegen a function as:

_test_rol:
        mfspr r2, 256
        mr r3, r2
        mtspr 256, r3
        vspltisw v2, -12
        vrlw v2, v2, v2
        mtspr 256, r2
        blr

instead of:

_test_rol:
        mfspr r2, 256
        oris r3, r2, 40960
        mtspr 256, r3
        vspltisw v0, -12
        vrlw v2, v0, v0
        mtspr 256, r2
        blr

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

18 years agoPrefer to allocate V2-V5 before V0,V1. This lets us generate code like this:
Chris Lattner [Mon, 17 Apr 2006 21:19:12 +0000 (21:19 +0000)]
Prefer to allocate V2-V5 before V0,V1.  This lets us generate code like this:

        vspltisw v2, -12
        vrlw v2, v2, v2

instead of:

        vspltisw v0, -12
        vrlw v2, v0, v0

when a function is returning a value.

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

18 years agoMove some knowledge about registers out of the code emitter into the register info.
Chris Lattner [Mon, 17 Apr 2006 21:07:20 +0000 (21:07 +0000)]
Move some knowledge about registers out of the code emitter into the register info.

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

18 years agoUse a small table instead of macros to do this conversion.
Chris Lattner [Mon, 17 Apr 2006 20:59:25 +0000 (20:59 +0000)]
Use a small table instead of macros to do this conversion.

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

18 years agoImplement v8i16, v16i8 splat using unpckl + pshufd.
Evan Cheng [Mon, 17 Apr 2006 20:43:08 +0000 (20:43 +0000)]
Implement v8i16, v16i8 splat using unpckl + pshufd.

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

18 years agoimplement returns of a vector, testcase here: CodeGen/X86/vec_return.ll
Chris Lattner [Mon, 17 Apr 2006 20:32:50 +0000 (20:32 +0000)]
implement returns of a vector, testcase here: CodeGen/X86/vec_return.ll

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

18 years agoNew testcase
Chris Lattner [Mon, 17 Apr 2006 20:32:27 +0000 (20:32 +0000)]
New testcase

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

18 years agoCodegen insertelement with constant insertion points as scalar_to_vector
Chris Lattner [Mon, 17 Apr 2006 19:21:01 +0000 (19:21 +0000)]
Codegen insertelement with constant insertion points as scalar_to_vector
and a shuffle.  For this:

void %test2(<4 x float>* %F, float %f) {
        %tmp = load <4 x float>* %F             ; <<4 x float>> [#uses=2]
        %tmp3 = add <4 x float> %tmp, %tmp              ; <<4 x float>> [#uses=1]
        %tmp2 = insertelement <4 x float> %tmp3, float %f, uint 2               ; <<4 x float>> [#uses=2]
        %tmp6 = add <4 x float> %tmp2, %tmp2            ; <<4 x float>> [#uses=1]
        store <4 x float> %tmp6, <4 x float>* %F
        ret void
}

we now get this on X86 (which will get better):

_test2:
        movl 4(%esp), %eax
        movaps (%eax), %xmm0
        addps %xmm0, %xmm0
        movaps %xmm0, %xmm1
        shufps $3, %xmm1, %xmm1
        movaps %xmm0, %xmm2
        shufps $1, %xmm2, %xmm2
        unpcklps %xmm1, %xmm2
        movss 8(%esp), %xmm1
        unpcklps %xmm1, %xmm0
        unpcklps %xmm2, %xmm0
        addps %xmm0, %xmm0
        movaps %xmm0, (%eax)
        ret

instead of:

_test2:
        subl $28, %esp
        movl 32(%esp), %eax
        movaps (%eax), %xmm0
        addps %xmm0, %xmm0
        movaps %xmm0, (%esp)
        movss 36(%esp), %xmm0
        movss %xmm0, 8(%esp)
        movaps (%esp), %xmm0
        addps %xmm0, %xmm0
        movaps %xmm0, (%eax)
        addl $28, %esp
        ret

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

18 years agoMake sure to check splats of every constant we can, handle splat(31) by
Chris Lattner [Mon, 17 Apr 2006 18:09:22 +0000 (18:09 +0000)]
Make sure to check splats of every constant we can, handle splat(31) by
being a bit more clever, add support for odd splats from -31 to -17.

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

18 years agoIncorrect foldMemoryOperand entries
Evan Cheng [Mon, 17 Apr 2006 18:06:12 +0000 (18:06 +0000)]
Incorrect foldMemoryOperand entries

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

18 years agoErrors in patterns preventing load folding
Evan Cheng [Mon, 17 Apr 2006 18:05:01 +0000 (18:05 +0000)]
Errors in patterns preventing load folding

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

18 years agoAdd checks for __OpenBSD__.
Jeff Cohen [Mon, 17 Apr 2006 17:55:41 +0000 (17:55 +0000)]
Add checks for __OpenBSD__.

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

18 years agoTeach the ppc backend to use rol and vsldoi to generate splatted constants.
Chris Lattner [Mon, 17 Apr 2006 17:55:10 +0000 (17:55 +0000)]
Teach the ppc backend to use rol and vsldoi to generate splatted constants.
This implements vec_constants.ll:test_vsldoi and test_rol

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

18 years agoSome more cases that can be generated with two instructions
Chris Lattner [Mon, 17 Apr 2006 17:54:18 +0000 (17:54 +0000)]
Some more cases that can be generated with two instructions

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

18 years agoadd a note
Chris Lattner [Mon, 17 Apr 2006 17:29:41 +0000 (17:29 +0000)]
add a note

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

18 years agoFP SETOLT, SETOLT, SETUGE, SETUGT conditions were implemented incorrectly
Evan Cheng [Mon, 17 Apr 2006 07:24:10 +0000 (07:24 +0000)]
FP SETOLT, SETOLT, SETUGE, SETUGT conditions were implemented incorrectly

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

18 years agoMake some code more general, adding support for constant formation of several
Chris Lattner [Mon, 17 Apr 2006 06:58:41 +0000 (06:58 +0000)]
Make some code more general, adding support for constant formation of several
new patterns.

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

18 years agoNew testcases
Chris Lattner [Mon, 17 Apr 2006 06:58:16 +0000 (06:58 +0000)]
New testcases

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

18 years agoLearn how to make odd splatted constants in range [17,29]. This implements
Chris Lattner [Mon, 17 Apr 2006 06:07:44 +0000 (06:07 +0000)]
Learn how to make odd splatted constants in range [17,29].  This implements
PowerPC/vec_constants.ll:test_29.

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

18 years agonew testcase
Chris Lattner [Mon, 17 Apr 2006 06:06:50 +0000 (06:06 +0000)]
new testcase

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

18 years agoPull some code out into a helper function.
Chris Lattner [Mon, 17 Apr 2006 06:00:21 +0000 (06:00 +0000)]
Pull some code out into a helper function.
Effeciently codegen even splats in the range [-32,30].

This allows us to codegen <30,30,30,30> as:

        vspltisw v0, 15
        vadduwm v2, v0, v0

instead of as a cp load.

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

18 years agoNew testcase
Chris Lattner [Mon, 17 Apr 2006 05:58:22 +0000 (05:58 +0000)]
New testcase

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

18 years agoImplement a TODO: for any shuffle that can be viewed as a v4[if]32 shuffle,
Chris Lattner [Mon, 17 Apr 2006 05:28:54 +0000 (05:28 +0000)]
Implement a TODO: for any shuffle that can be viewed as a v4[if]32 shuffle,
if it can be implemented in 3 or fewer discrete altivec instructions, codegen
it as such.  This implements Regression/CodeGen/PowerPC/vec_perf_shuffle.ll

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

18 years agonew testcase, these shuffles can be implemented with discrete instructions,
Chris Lattner [Mon, 17 Apr 2006 05:27:31 +0000 (05:27 +0000)]
new testcase, these shuffles can be implemented with discrete instructions,
and shouldn't be lowered to vperm.

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

18 years agoRegenerate with adjusted costs
Chris Lattner [Mon, 17 Apr 2006 05:26:20 +0000 (05:26 +0000)]
Regenerate with adjusted costs

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

18 years agoEncode a cost of zero as a cost of 1.
Chris Lattner [Mon, 17 Apr 2006 05:25:16 +0000 (05:25 +0000)]
Encode a cost of zero as a cost of 1.

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

18 years agoRegenerate with correct offset
Chris Lattner [Mon, 17 Apr 2006 05:08:46 +0000 (05:08 +0000)]
Regenerate with correct offset

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

18 years agoReally, I can count!
Chris Lattner [Mon, 17 Apr 2006 05:05:52 +0000 (05:05 +0000)]
Really, I can count!

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

18 years agoIncrease the opcodes by one each to disambiguate COPY from VMRGHW.
Chris Lattner [Mon, 17 Apr 2006 00:47:48 +0000 (00:47 +0000)]
Increase the opcodes by one each to disambiguate COPY from VMRGHW.

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

18 years agoassign stable opcodes to the various altivec ops.
Chris Lattner [Mon, 17 Apr 2006 00:47:18 +0000 (00:47 +0000)]
assign stable opcodes to the various altivec ops.

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

18 years agoPPCPerfectShuffle.h is autogenerated, don't include it in the LOC counts.
Chris Lattner [Mon, 17 Apr 2006 00:46:09 +0000 (00:46 +0000)]
PPCPerfectShuffle.h is autogenerated, don't include it in the LOC counts.

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

18 years agoCheck in a table, generated by llvm-PerfectShuffle, of optimal shuffles
Chris Lattner [Mon, 17 Apr 2006 00:37:02 +0000 (00:37 +0000)]
Check in a table, generated by llvm-PerfectShuffle, of optimal shuffles
of various 4-element vectors.

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

18 years agoRename BuildShuffleTable -> PerfectShuffle
Chris Lattner [Mon, 17 Apr 2006 00:35:34 +0000 (00:35 +0000)]
Rename BuildShuffleTable -> PerfectShuffle

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

18 years agorename the table
Chris Lattner [Mon, 17 Apr 2006 00:33:35 +0000 (00:33 +0000)]
rename the table

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

18 years agoInitial checking of a perfect shuffle generation program for 4-element
Chris Lattner [Mon, 17 Apr 2006 00:30:41 +0000 (00:30 +0000)]
Initial checking of a perfect shuffle generation program for 4-element
Altivec vectors.

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

18 years agoBetter way to splat v2f64
Evan Cheng [Sun, 16 Apr 2006 18:16:43 +0000 (18:16 +0000)]
Better way to splat v2f64

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

18 years agomovduprm, movshduprm bugs
Evan Cheng [Sun, 16 Apr 2006 18:11:28 +0000 (18:11 +0000)]
movduprm, movshduprm bugs

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

18 years agoEncoding bugs
Evan Cheng [Sun, 16 Apr 2006 07:02:22 +0000 (07:02 +0000)]
Encoding bugs

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

18 years agoCan't fold loads into alias vector SSE ops used for scalar operation. The load
Evan Cheng [Sun, 16 Apr 2006 06:58:19 +0000 (06:58 +0000)]
Can't fold loads into alias vector SSE ops used for scalar operation. The load
address has to be 16-byte aligned but the values aren't spilled to 128-bit
locations.

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

18 years agoImplement a TODO: have the legalizer canonicalize a bunch of operations to
Chris Lattner [Sun, 16 Apr 2006 01:37:57 +0000 (01:37 +0000)]
Implement a TODO: have the legalizer canonicalize a bunch of operations to
one type (v4i32) so that we don't have to write patterns for each type, and
so that more CSE opportunities are exposed.

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

18 years agoAdd support for promoting stores from one legal type to another, allowing us
Chris Lattner [Sun, 16 Apr 2006 01:36:45 +0000 (01:36 +0000)]
Add support for promoting stores from one legal type to another, allowing us
to write one pattern for vector stores instead of 4.

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

18 years agoMake the BUILD_VECTOR lowering code much more aggressive w.r.t constant vectors.
Chris Lattner [Sun, 16 Apr 2006 01:01:29 +0000 (01:01 +0000)]
Make the BUILD_VECTOR lowering code much more aggressive w.r.t constant vectors.
Remove some done items from the todo list.

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

18 years agoFix a bug in the 'shuffle(undef,x,mask) -> shuffle(x, undef,mask')' xform
Chris Lattner [Sun, 16 Apr 2006 00:51:47 +0000 (00:51 +0000)]
Fix a bug in the 'shuffle(undef,x,mask) -> shuffle(x, undef,mask')' xform
Make the insert/extract elt -> shuffle code more aggressive.

This fixes CodeGen/PowerPC/vec_shuffle.ll

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

18 years agoCanonicalize shuffle(undef,x,mask) -> shuffle(x, undef,mask').
Chris Lattner [Sun, 16 Apr 2006 00:03:56 +0000 (00:03 +0000)]
Canonicalize shuffle(undef,x,mask) -> shuffle(x, undef,mask').

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

18 years agoFix a crash when faced with a shuffle vector that has an undef in its mask.
Chris Lattner [Sat, 15 Apr 2006 23:48:05 +0000 (23:48 +0000)]
Fix a crash when faced with a shuffle vector that has an undef in its mask.

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

18 years agoAdd patterns for matching vnots with bit converted inputs. Most of these will
Chris Lattner [Sat, 15 Apr 2006 23:45:24 +0000 (23:45 +0000)]
Add patterns for matching vnots with bit converted inputs.  Most of these will
go away when I start using evan's binop type canonicalizer

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

18 years agoAdd a new vnot_conv predicate for matching vnot's where the allones vector is
Chris Lattner [Sat, 15 Apr 2006 23:39:14 +0000 (23:39 +0000)]
Add a new vnot_conv predicate for matching vnot's where the allones vector is
bitconverted from some other type.

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

18 years agoMake these predicates return true for bit_convert(buildvector)'s as well as
Chris Lattner [Sat, 15 Apr 2006 23:38:00 +0000 (23:38 +0000)]
Make these predicates return true for bit_convert(buildvector)'s as well as
buildvectors.

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

18 years agoMore encoding bugs
Evan Cheng [Sat, 15 Apr 2006 06:10:09 +0000 (06:10 +0000)]
More encoding bugs

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

18 years agopslldrm, psrawrm, etc. encoding bug
Evan Cheng [Sat, 15 Apr 2006 05:59:08 +0000 (05:59 +0000)]
pslldrm, psrawrm, etc. encoding bug

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

18 years agohsubp{s|d} encoding bug
Evan Cheng [Sat, 15 Apr 2006 05:52:42 +0000 (05:52 +0000)]
hsubp{s|d} encoding bug

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

18 years agoSilly bug
Evan Cheng [Sat, 15 Apr 2006 05:37:34 +0000 (05:37 +0000)]
Silly bug

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

18 years agoDo not use movs{h|l}dup for a shuffle with a single non-undef node.
Evan Cheng [Sat, 15 Apr 2006 03:13:24 +0000 (03:13 +0000)]
Do not use movs{h|l}dup for a shuffle with a single non-undef node.

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

18 years agosignificant cleanups to code that uses insert/extractelt heavily. This builds
Chris Lattner [Sat, 15 Apr 2006 01:39:45 +0000 (01:39 +0000)]
significant cleanups to code that uses insert/extractelt heavily.  This builds
maximal shuffles out of them where possible.

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

18 years agoAdded SSE (and other) entries to foldMemoryOperand().
Evan Cheng [Fri, 14 Apr 2006 23:33:27 +0000 (23:33 +0000)]
Added SSE (and other) entries to foldMemoryOperand().

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

18 years agoSome clean up
Evan Cheng [Fri, 14 Apr 2006 23:32:40 +0000 (23:32 +0000)]
Some clean up

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

18 years agoAllow undef in a shuffle mask
Chris Lattner [Fri, 14 Apr 2006 23:19:08 +0000 (23:19 +0000)]
Allow undef in a shuffle mask

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

18 years agoMove these ctors out of line
Chris Lattner [Fri, 14 Apr 2006 22:20:32 +0000 (22:20 +0000)]
Move these ctors out of line

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

18 years agoThese instructions always return a packed vector. Improve the class definitions...
Chris Lattner [Fri, 14 Apr 2006 22:20:07 +0000 (22:20 +0000)]
These instructions always return a packed vector.  Improve the class definitions to expose this fact.

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

18 years agoLast few SSE3 intrinsics.
Evan Cheng [Fri, 14 Apr 2006 21:59:03 +0000 (21:59 +0000)]
Last few SSE3 intrinsics.

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

18 years agoTeach scalarrepl to promote unions of vectors and floats, producing
Chris Lattner [Fri, 14 Apr 2006 21:42:41 +0000 (21:42 +0000)]
Teach scalarrepl to promote unions of vectors and floats, producing
insert/extractelement operations.  This implements
Transforms/ScalarRepl/vector_promote.ll

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

18 years agoNew testcase, checking to see we can turn this code:
Chris Lattner [Fri, 14 Apr 2006 21:41:54 +0000 (21:41 +0000)]
New testcase, checking to see we can turn this code:

void test(vector float *F, float f) {
  vector float G = *F + *F;
  *((float*)&G) = f;
  *F = G + G;
}

void test2(vector float *F, float f) {
  vector float G = *F + *F;
  ((float*)&G)[2] = f;
  *F = G + G;
}

void test3(vector float *F, float *f) {
  vector float G = *F + *F;
  *f = ((float*)&G)[2];
}

void test4(vector float *F, float *f) {
  vector float G = *F + *F;
  *f = *((float*)&G);
}

into insert/extract element operations with no memory traffic.

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

18 years agoAdding back vector instructions to keep in mainline.
Tanya Lattner [Fri, 14 Apr 2006 19:24:33 +0000 (19:24 +0000)]
Adding back vector instructions to keep in mainline.

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

18 years agoRemoving unimplemented vector instructions from language referrence.
Tanya Lattner [Fri, 14 Apr 2006 19:07:42 +0000 (19:07 +0000)]
Removing unimplemented vector instructions from language referrence.

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

18 years agoCorrect the Superclasses list for GlobalVariable and Function to indicate
Reid Spencer [Fri, 14 Apr 2006 14:11:48 +0000 (14:11 +0000)]
Correct the Superclasses list for GlobalVariable and Function to indicate
that they are "Constant" as they derive from GlobalValue. Also, fix some of
the wording where it mentions this.
Patch inspired by Nai Xia.

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