Tanya Lattner | 632e88a | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 1 | ; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 -o %t -f |
Dan Gohman | 8c89a50 | 2007-08-15 13:36:28 +0000 | [diff] [blame] | 2 | ; RUN: grep shufp %t | count 1 |
| 3 | ; RUN: grep movupd %t | count 1 |
| 4 | ; RUN: grep pshufhw %t | count 1 |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 5 | |
Evan Cheng | bf8b2c5 | 2008-04-05 00:30:36 +0000 | [diff] [blame] | 6 | define void @test_v4sf(<4 x float>* %P, float %X, float %Y) nounwind { |
Tanya Lattner | 632e88a | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 7 | %tmp = insertelement <4 x float> zeroinitializer, float %X, i32 0 ; <<4 x float>> [#uses=1] |
| 8 | %tmp2 = insertelement <4 x float> %tmp, float %X, i32 1 ; <<4 x float>> [#uses=1] |
| 9 | %tmp4 = insertelement <4 x float> %tmp2, float %Y, i32 2 ; <<4 x float>> [#uses=1] |
| 10 | %tmp6 = insertelement <4 x float> %tmp4, float %Y, i32 3 ; <<4 x float>> [#uses=1] |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 11 | store <4 x float> %tmp6, <4 x float>* %P |
| 12 | ret void |
| 13 | } |
| 14 | |
Evan Cheng | bf8b2c5 | 2008-04-05 00:30:36 +0000 | [diff] [blame] | 15 | define void @test_v2sd(<2 x double>* %P, double %X, double %Y) nounwind { |
Tanya Lattner | 632e88a | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 16 | %tmp = insertelement <2 x double> zeroinitializer, double %X, i32 0 ; <<2 x double>> [#uses=1] |
| 17 | %tmp2 = insertelement <2 x double> %tmp, double %Y, i32 1 ; <<2 x double>> [#uses=1] |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 18 | store <2 x double> %tmp2, <2 x double>* %P |
| 19 | ret void |
| 20 | } |
| 21 | |
Evan Cheng | bf8b2c5 | 2008-04-05 00:30:36 +0000 | [diff] [blame] | 22 | define void @test_v8i16(<2 x i64>* %res, <2 x i64>* %A) nounwind { |
Tanya Lattner | 632e88a | 2008-02-21 07:42:26 +0000 | [diff] [blame] | 23 | %tmp = load <2 x i64>* %A ; <<2 x i64>> [#uses=1] |
| 24 | %tmp.upgrd.1 = bitcast <2 x i64> %tmp to <8 x i16> ; <<8 x i16>> [#uses=8] |
| 25 | %tmp.upgrd.2 = extractelement <8 x i16> %tmp.upgrd.1, i32 0 ; <i16> [#uses=1] |
| 26 | %tmp1 = extractelement <8 x i16> %tmp.upgrd.1, i32 1 ; <i16> [#uses=1] |
| 27 | %tmp2 = extractelement <8 x i16> %tmp.upgrd.1, i32 2 ; <i16> [#uses=1] |
| 28 | %tmp3 = extractelement <8 x i16> %tmp.upgrd.1, i32 3 ; <i16> [#uses=1] |
| 29 | %tmp4 = extractelement <8 x i16> %tmp.upgrd.1, i32 6 ; <i16> [#uses=1] |
| 30 | %tmp5 = extractelement <8 x i16> %tmp.upgrd.1, i32 5 ; <i16> [#uses=1] |
| 31 | %tmp6 = extractelement <8 x i16> %tmp.upgrd.1, i32 4 ; <i16> [#uses=1] |
| 32 | %tmp7 = extractelement <8 x i16> %tmp.upgrd.1, i32 7 ; <i16> [#uses=1] |
| 33 | %tmp8 = insertelement <8 x i16> undef, i16 %tmp.upgrd.2, i32 0 ; <<8 x i16>> [#uses=1] |
| 34 | %tmp9 = insertelement <8 x i16> %tmp8, i16 %tmp1, i32 1 ; <<8 x i16>> [#uses=1] |
| 35 | %tmp10 = insertelement <8 x i16> %tmp9, i16 %tmp2, i32 2 ; <<8 x i16>> [#uses=1] |
| 36 | %tmp11 = insertelement <8 x i16> %tmp10, i16 %tmp3, i32 3 ; <<8 x i16>> [#uses=1] |
| 37 | %tmp12 = insertelement <8 x i16> %tmp11, i16 %tmp4, i32 4 ; <<8 x i16>> [#uses=1] |
| 38 | %tmp13 = insertelement <8 x i16> %tmp12, i16 %tmp5, i32 5 ; <<8 x i16>> [#uses=1] |
| 39 | %tmp14 = insertelement <8 x i16> %tmp13, i16 %tmp6, i32 6 ; <<8 x i16>> [#uses=1] |
| 40 | %tmp15 = insertelement <8 x i16> %tmp14, i16 %tmp7, i32 7 ; <<8 x i16>> [#uses=1] |
| 41 | %tmp15.upgrd.3 = bitcast <8 x i16> %tmp15 to <2 x i64> ; <<2 x i64>> [#uses=1] |
| 42 | store <2 x i64> %tmp15.upgrd.3, <2 x i64>* %res |
Dan Gohman | f17a25c | 2007-07-18 16:29:46 +0000 | [diff] [blame] | 43 | ret void |
| 44 | } |