llvm.org GIT mirror llvm / release_31 test / CodeGen / Generic / vector.ll
release_31

Tree @release_31 (Download .tar.gz)

vector.ll @release_31

95ab268
fce288f
95ab268
53a66d1
 
95ab268
 
 
 
53a66d1
95ab268
1e4af78
 
53a66d1
 
 
ae3a0be
53a66d1
 
95ab268
 
53a66d1
 
 
ae3a0be
53a66d1
 
95ab268
 
53a66d1
 
 
ae3a0be
53a66d1
 
95ab268
 
53a66d1
 
 
ae3a0be
53a66d1
 
95ab268
1e4af78
53a66d1
 
 
ae3a0be
53a66d1
 
4d2182a
5ecc0ac
53a66d1
 
 
 
 
 
5ecc0ac
 
1e4af78
 
 
53a66d1
 
ae3a0be
53a66d1
 
1e4af78
 
53a66d1
 
ae3a0be
53a66d1
 
1e4af78
152c72d
53a66d1
 
ae3a0be
53a66d1
 
152c72d
 
53a66d1
 
 
 
152c72d
00e2c94
53a66d1
 
 
 
7ca9777
 
53a66d1
 
 
 
5d37acc
 
53a66d1
 
 
 
bf93414
 
53a66d1
 
 
 
5d37acc
 
53a66d1
 
ae3a0be
53a66d1
 
 
 
5d37acc
 
53a66d1
 
 
 
 
 
5d37acc
00e2c94
 
53a66d1
 
 
 
 
 
ae3a0be
53a66d1
 
 
 
 
 
 
 
 
 
 
 
 
4d2182a
; Test that vectors are scalarized/lowered correctly.
; RUN: llc < %s


%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=1]
	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
}