; 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
}

