; Test that vectors are scalarized/lowered correctly.
; RUN: llc < %s -march=x86 -mcpu=i386 > %t
; RUN: llc < %s -march=x86 -mcpu=yonah >> %t

%d8 = type <8 x double>
%f1 = type <1 x float>
%f2 = type <2 x float>
%f4 = type <4 x float>
%f8 = type <8 x float>
%i4 = type <4 x i32>


;;; TEST HANDLING OF VARIOUS VECTOR SIZES

define void @test_f1(%f1* %P, %f1* %Q, %f1* %S) {
        %p = load %f1* %P               ; <%f1> [#uses=1]
        %q = load %f1* %Q               ; <%f1> [#uses=1]
        %R = fadd %f1 %p, %q             ; <%f1> [#uses=1]
        store %f1 %R, %f1* %S
        ret void
}

define void @test_f2(%f2* %P, %f2* %Q, %f2* %S) {
        %p = load %f2* %P               ; <%f2> [#uses=1]
        %q = load %f2* %Q               ; <%f2> [#uses=1]
        %R = fadd %f2 %p, %q             ; <%f2> [#uses=1]
        store %f2 %R, %f2* %S
        ret void
}

define void @test_f4(%f4* %P, %f4* %Q, %f4* %S) {
        %p = load %f4* %P               ; <%f4> [#uses=1]
        %q = load %f4* %Q               ; <%f4> [#uses=1]
        %R = fadd %f4 %p, %q             ; <%f4> [#uses=1]
        store %f4 %R, %f4* %S
        ret void
}

define void @test_f8(%f8* %P, %f8* %Q, %f8* %S) {
        %p = load %f8* %P               ; <%f8> [#uses=1]
        %q = load %f8* %Q               ; <%f8> [#uses=1]
        %R = fadd %f8 %p, %q             ; <%f8> [#uses=1]
        store %f8 %R, %f8* %S
        ret void
}

define void @test_fmul(%f8* %P, %f8* %Q, %f8* %S) {
        %p = load %f8* %P               ; <%f8> [#uses=1]
        %q = load %f8* %Q               ; <%f8> [#uses=1]
        %R = fmul %f8 %p, %q             ; <%f8> [#uses=1]
        store %f8 %R, %f8* %S
        ret void
}

define void @test_div(%f8* %P, %f8* %Q, %f8* %S) {
        %p = load %f8* %P               ; <%f8> [#uses=1]
        %q = load %f8* %Q               ; <%f8> [#uses=1]
        %R = fdiv %f8 %p, %q            ; <%f8> [#uses=1]
        store %f8 %R, %f8* %S
        ret void
}

;;; TEST VECTOR CONSTRUCTS

define void @test_cst(%f4* %P, %f4* %S) {
        %p = load %f4* %P               ; <%f4> [#uses=1]
        %R = fadd %f4 %p, < float 0x3FB99999A0000000, float 1.000000e+00, float 2.000000e+00, float 4.500000e+00 >             ; <%f4> [#uses=1]
        store %f4 %R, %f4* %S
        ret void
}

define void @test_zero(%f4* %P, %f4* %S) {
        %p = load %f4* %P               ; <%f4> [#uses=1]
        %R = fadd %f4 %p, zeroinitializer                ; <%f4> [#uses=1]
        store %f4 %R, %f4* %S
        ret void
}

define void @test_undef(%f4* %P, %f4* %S) {
        %p = load %f4* %P               ; <%f4> [#uses=1]
        %R = fadd %f4 %p, undef          ; <%f4> [#uses=1]
        store %f4 %R, %f4* %S
        ret void
}

define void @test_constant_insert(%f4* %S) {
        %R = insertelement %f4 zeroinitializer, float 1.000000e+01, i32 0               ; <%f4> [#uses
        store %f4 %R, %f4* %S
        ret void
}

define void @test_variable_buildvector(float %F, %f4* %S) {
        %R = insertelement %f4 zeroinitializer, float %F, i32 0         ; <%f4> [#uses=1]
        store %f4 %R, %f4* %S
        ret void
}

define void @test_scalar_to_vector(float %F, %f4* %S) {
        %R = insertelement %f4 undef, float %F, i32 0           ; <%f4> [#uses=1]
        store %f4 %R, %f4* %S
        ret void
}

define float @test_extract_elt(%f8* %P) {
        %p = load %f8* %P               ; <%f8> [#uses=1]
        %R = extractelement %f8 %p, i32 3               ; <float> [#uses=1]
        ret float %R
}

define double @test_extract_elt2(%d8* %P) {
        %p = load %d8* %P               ; <%d8> [#uses=1]
        %R = extractelement %d8 %p, i32 3               ; <double> [#uses=1]
        ret double %R
}

define void @test_cast_1(%f4* %b, %i4* %a) {
        %tmp = load %f4* %b             ; <%f4> [#uses=1]
        %tmp2 = fadd %f4 %tmp, < float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00 >              ; <%f4> [#uses=1]
        %tmp3 = bitcast %f4 %tmp2 to %i4                ; <%i4> [#uses=1]
        %tmp4 = add %i4 %tmp3, < i32 1, i32 2, i32 3, i32 4 >           ; <%i4> [#uses=1]
        store %i4 %tmp4, %i4* %a
        ret void
}

define void @test_cast_2(%f8* %a, <8 x i32>* %b) {
        %T = load %f8* %a               ; <%f8> [#uses=1]
        %T2 = bitcast %f8 %T to <8 x i32>               ; <<8 x i32>> [#uses=1]
        store <8 x i32> %T2, <8 x i32>* %b
        ret void
}


;;; TEST IMPORTANT IDIOMS

define void @splat(%f4* %P, %f4* %Q, float %X) {
        %tmp = insertelement %f4 undef, float %X, i32 0         ; <%f4> [#uses=1]
        %tmp2 = insertelement %f4 %tmp, float %X, i32 1         ; <%f4> [#uses=1]
        %tmp4 = insertelement %f4 %tmp2, float %X, i32 2                ; <%f4> [#uses=1]
        %tmp6 = insertelement %f4 %tmp4, float %X, i32 3                ; <%f4> [#uses=1]
        %q = load %f4* %Q               ; <%f4> [#uses=1]
        %R = fadd %f4 %q, %tmp6          ; <%f4> [#uses=1]
        store %f4 %R, %f4* %P
        ret void
}

define void @splat_i4(%i4* %P, %i4* %Q, i32 %X) {
        %tmp = insertelement %i4 undef, i32 %X, i32 0           ; <%i4> [#uses=1]
        %tmp2 = insertelement %i4 %tmp, i32 %X, i32 1           ; <%i4> [#uses=1]
        %tmp4 = insertelement %i4 %tmp2, i32 %X, i32 2          ; <%i4> [#uses=1]
        %tmp6 = insertelement %i4 %tmp4, i32 %X, i32 3          ; <%i4> [#uses=1]
        %q = load %i4* %Q               ; <%i4> [#uses=1]
        %R = add %i4 %q, %tmp6          ; <%i4> [#uses=1]
        store %i4 %R, %i4* %P
        ret void
}

