[x86] Regenerate precise checks for a couple of test cases and remove
[oota-llvm.git] / test / CodeGen / X86 / vec_insert-5.ll
1 ; RUN: llc < %s -march=x86 -mattr=+sse2,+ssse3 | FileCheck %s
2 ; There are no MMX operations in @t1
3
4 define void  @t1(i32 %a, x86_mmx* %P) nounwind {
5 ; CHECK-LABEL: t1:
6 ; CHECK:       # BB#0:
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)
13 ; CHECK-NEXT:    retl
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
19  ret void
20 }
21
22 define <4 x float> @t2(<4 x float>* %P) nounwind {
23 ; CHECK-LABEL: t2:
24 ; CHECK:       # BB#0:
25 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
26 ; CHECK-NEXT:    movdqa (%eax), %xmm0
27 ; CHECK-NEXT:    pslldq $12, %xmm0
28 ; CHECK-NEXT:    retl
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 >
31   ret <4 x float> %tmp2
32 }
33
34 define <4 x float> @t3(<4 x float>* %P) nounwind {
35 ; CHECK-LABEL: t3:
36 ; CHECK:       # BB#0:
37 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
38 ; CHECK-NEXT:    movdqa (%eax), %xmm0
39 ; CHECK-NEXT:    psrldq $8, %xmm0
40 ; CHECK-NEXT:    retl
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 >
43   ret <4 x float> %tmp2
44 }
45
46 define <4 x float> @t4(<4 x float>* %P) nounwind {
47 ; CHECK-LABEL: t4:
48 ; CHECK:       # BB#0:
49 ; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
50 ; CHECK-NEXT:    movdqa (%eax), %xmm0
51 ; CHECK-NEXT:    psrldq $12, %xmm0
52 ; CHECK-NEXT:    retl
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 >
55   ret <4 x float> %tmp2
56 }
57
58 define <16 x i8> @t5(<16 x i8> %x) nounwind {
59 ; CHECK-LABEL: t5:
60 ; CHECK:       # BB#0:
61 ; CHECK-NEXT:    psrldq $1, %xmm0
62 ; CHECK-NEXT:    retl
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>
64   ret <16 x i8> %s
65 }
66
67 define <16 x i8> @t6(<16 x i8> %x) nounwind {
68 ; CHECK-LABEL: t6:
69 ; CHECK:       # BB#0:
70 ; CHECK-NEXT:    palignr {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0]
71 ; CHECK-NEXT:    retl
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>
73   ret <16 x i8> %s
74 }
75
76 define <16 x i8> @t7(<16 x i8> %x) nounwind {
77 ; CHECK-LABEL: t7:
78 ; CHECK:       # BB#0:
79 ; CHECK-NEXT:    pslldq $13, %xmm0
80 ; CHECK-NEXT:    retl
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>
82   ret <16 x i8> %s
83 }