blob: efd03203100227b1bfcde7aba1aa0e7ea66a7c8e [file] [log] [blame]
Kalle Raiskilac9fda992010-08-02 10:25:47 +00001;RUN: llc --march=cellspu %s -o - | FileCheck %s
2%vec = type <2 x float>
3
4define %vec @test_ret(%vec %param)
5{
6;CHECK: bi $lr
7 ret %vec %param
8}
9
10define %vec @test_add(%vec %param)
11{
Kalle Raiskila86a79122010-08-18 10:04:39 +000012;CHECK: fa {{\$.}}, $3, $3
Kalle Raiskilac9fda992010-08-02 10:25:47 +000013 %1 = fadd %vec %param, %param
14;CHECK: bi $lr
15 ret %vec %1
16}
17
18define %vec @test_sub(%vec %param)
19{
Kalle Raiskila86a79122010-08-18 10:04:39 +000020;CHECK: fs {{\$.}}, $3, $3
Kalle Raiskilac9fda992010-08-02 10:25:47 +000021 %1 = fsub %vec %param, %param
22
23;CHECK: bi $lr
24 ret %vec %1
25}
26
27define %vec @test_mul(%vec %param)
28{
Kalle Raiskila86a79122010-08-18 10:04:39 +000029;CHECK: fm {{\$.}}, $3, $3
Kalle Raiskilac9fda992010-08-02 10:25:47 +000030 %1 = fmul %vec %param, %param
31
32;CHECK: bi $lr
33 ret %vec %1
34}
35
Kalle Raiskilae1c91592010-08-02 11:22:10 +000036define %vec @test_splat(float %param ) {
37;CHECK: lqa
38;CHECK: shufb
39 %sv = insertelement <1 x float> undef, float %param, i32 0
40 %rv = shufflevector <1 x float> %sv, <1 x float> undef, <2 x i32> zeroinitializer
41;CHECK: bi $lr
42 ret %vec %rv
43}
44
Kalle Raiskilabc2697c2010-08-04 13:59:48 +000045define void @test_store(%vec %val, %vec* %ptr){
46
47;CHECK: stqd
48 store %vec undef, %vec* null
49
Kalle Raiskila86a79122010-08-18 10:04:39 +000050;CHECK: stqd $3, 0(${{.}})
Kalle Raiskilabc2697c2010-08-04 13:59:48 +000051;CHECK: bi $lr
52 store %vec %val, %vec* %ptr
53 ret void
54}
55
56define %vec @test_insert(){
57;CHECK: cwd
58;CHECK: shufb $3
59 %rv = insertelement %vec undef, float 0.0e+00, i32 undef
60;CHECK: bi $lr
61 ret %vec %rv
62}
Kalle Raiskilae1c91592010-08-02 11:22:10 +000063
Kalle Raiskila99534bb2010-08-09 16:33:00 +000064define void @test_unaligned_store() {
Kalle Raiskila505faa62010-10-26 10:45:47 +000065;CHECK: cdd
Kalle Raiskila99534bb2010-08-09 16:33:00 +000066;CHECK: shufb
67;CHECK: stqd
68 %data = alloca [4 x float], align 16 ; <[4 x float]*> [#uses=1]
69 %ptr = getelementptr [4 x float]* %data, i32 0, i32 2 ; <float*> [#uses=1]
70 %vptr = bitcast float* %ptr to <2 x float>* ; <[1 x <2 x float>]*> [#uses=1]
71 store <2 x float> undef, <2 x float>* %vptr
72 ret void
73}
74