1 ; RUN: llc < %s -march=x86 -mattr=+sse2,+ssse3 | FileCheck %s
2 ; There are no MMX operations in @t1
4 define void @t1(i32 %a, x86_mmx* %P) nounwind {
7 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
8 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx
9 ; CHECK-NEXT: shll $12, %ecx
10 ; CHECK-NEXT: movd %ecx, %xmm0
11 ; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,1,1]
12 ; CHECK-NEXT: movlpd %xmm0, (%eax)
14 %tmp12 = shl i32 %a, 12
15 %tmp21 = insertelement <2 x i32> undef, i32 %tmp12, i32 1
16 %tmp22 = insertelement <2 x i32> %tmp21, i32 0, i32 0
17 %tmp23 = bitcast <2 x i32> %tmp22 to x86_mmx
18 store x86_mmx %tmp23, x86_mmx* %P
22 define <4 x float> @t2(<4 x float>* %P) nounwind {
25 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
26 ; CHECK-NEXT: movdqa (%eax), %xmm0
27 ; CHECK-NEXT: pslldq $12, %xmm0
29 %tmp1 = load <4 x float>* %P
30 %tmp2 = shufflevector <4 x float> %tmp1, <4 x float> zeroinitializer, <4 x i32> < i32 4, i32 4, i32 4, i32 0 >
34 define <4 x float> @t3(<4 x float>* %P) nounwind {
37 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
38 ; CHECK-NEXT: movdqa (%eax), %xmm0
39 ; CHECK-NEXT: psrldq $8, %xmm0
41 %tmp1 = load <4 x float>* %P
42 %tmp2 = shufflevector <4 x float> %tmp1, <4 x float> zeroinitializer, <4 x i32> < i32 2, i32 3, i32 4, i32 4 >
46 define <4 x float> @t4(<4 x float>* %P) nounwind {
49 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
50 ; CHECK-NEXT: movdqa (%eax), %xmm0
51 ; CHECK-NEXT: psrldq $12, %xmm0
53 %tmp1 = load <4 x float>* %P
54 %tmp2 = shufflevector <4 x float> zeroinitializer, <4 x float> %tmp1, <4 x i32> < i32 7, i32 0, i32 0, i32 0 >
58 define <16 x i8> @t5(<16 x i8> %x) nounwind {
61 ; CHECK-NEXT: psrldq $1, %xmm0
63 %s = shufflevector <16 x i8> %x, <16 x i8> zeroinitializer, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 17>
67 define <16 x i8> @t6(<16 x i8> %x) nounwind {
70 ; CHECK-NEXT: palignr {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0]
72 %s = shufflevector <16 x i8> %x, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
76 define <16 x i8> @t7(<16 x i8> %x) nounwind {
79 ; CHECK-NEXT: pslldq $13, %xmm0
81 %s = shufflevector <16 x i8> %x, <16 x i8> undef, <16 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 1, i32 2>