xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vec_insert-5.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i386-unknown -mattr=+sse2,+ssse3 | FileCheck %s --check-prefix=X32
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse2,+ssse3 | FileCheck %s --check-prefix=X64
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; There are no MMX operations in @t1
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine void  @t1(i32 %a, x86_mmx* %P) nounwind {
8*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t1:
9*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
10*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
11*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
12*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shll $12, %ecx
13*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movd %ecx, %xmm0
14*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,0,1,1]
15*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movq %xmm0, (%eax)
16*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
17*9880d681SAndroid Build Coastguard Worker;
18*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t1:
19*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
20*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    # kill: %EDI<def> %EDI<kill> %RDI<def>
21*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shll $12, %edi
22*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movd %rdi, %xmm0
23*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7]
24*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
25*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq %xmm0, (%rsi)
26*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
27*9880d681SAndroid Build Coastguard Worker %tmp12 = shl i32 %a, 12
28*9880d681SAndroid Build Coastguard Worker %tmp21 = insertelement <2 x i32> undef, i32 %tmp12, i32 1
29*9880d681SAndroid Build Coastguard Worker %tmp22 = insertelement <2 x i32> %tmp21, i32 0, i32 0
30*9880d681SAndroid Build Coastguard Worker %tmp23 = bitcast <2 x i32> %tmp22 to x86_mmx
31*9880d681SAndroid Build Coastguard Worker store x86_mmx %tmp23, x86_mmx* %P
32*9880d681SAndroid Build Coastguard Worker ret void
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @t2(<4 x float>* %P) nounwind {
36*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t2:
37*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
38*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
39*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps (%eax), %xmm1
40*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorps %xmm0, %xmm0
41*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[2,0]
42*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,0]
43*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
44*9880d681SAndroid Build Coastguard Worker;
45*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t2:
46*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
47*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps (%rdi), %xmm1
48*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorps %xmm0, %xmm0
49*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[2,0]
50*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,0]
51*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
52*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <4 x float>, <4 x float>* %P
53*9880d681SAndroid Build Coastguard Worker  %tmp2 = shufflevector <4 x float> %tmp1, <4 x float> zeroinitializer, <4 x i32> < i32 4, i32 4, i32 4, i32 0 >
54*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %tmp2
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @t3(<4 x float>* %P) nounwind {
58*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t3:
59*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
60*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
61*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movapd (%eax), %xmm0
62*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorpd %xmm1, %xmm1
63*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
64*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
65*9880d681SAndroid Build Coastguard Worker;
66*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t3:
67*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
68*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movapd (%rdi), %xmm0
69*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorpd %xmm1, %xmm1
70*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]
71*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
72*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <4 x float>, <4 x float>* %P
73*9880d681SAndroid Build Coastguard Worker  %tmp2 = shufflevector <4 x float> %tmp1, <4 x float> zeroinitializer, <4 x i32> < i32 2, i32 3, i32 4, i32 4 >
74*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %tmp2
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @t4(<4 x float>* %P) nounwind {
78*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t4:
79*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
80*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
81*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps (%eax), %xmm0
82*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorps %xmm1, %xmm1
83*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[1,0]
84*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[2,3]
85*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
86*9880d681SAndroid Build Coastguard Worker;
87*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t4:
88*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
89*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps (%rdi), %xmm0
90*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorps %xmm1, %xmm1
91*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[1,0]
92*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[2,3]
93*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
94*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <4 x float>, <4 x float>* %P
95*9880d681SAndroid Build Coastguard Worker  %tmp2 = shufflevector <4 x float> zeroinitializer, <4 x float> %tmp1, <4 x i32> < i32 7, i32 0, i32 0, i32 0 >
96*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %tmp2
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t5(<16 x i8> %x) nounwind {
100*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t5:
101*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
102*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    psrlw $8, %xmm0
103*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
104*9880d681SAndroid Build Coastguard Worker;
105*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t5:
106*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
107*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    psrlw $8, %xmm0
108*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
109*9880d681SAndroid Build Coastguard Worker  %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>
110*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %s
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t6(<16 x i8> %x) nounwind {
114*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t6:
115*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
116*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    psrlw $8, %xmm0
117*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
118*9880d681SAndroid Build Coastguard Worker;
119*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t6:
120*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
121*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    psrlw $8, %xmm0
122*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
123*9880d681SAndroid Build Coastguard Worker  %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>
124*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %s
125*9880d681SAndroid Build Coastguard Worker}
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t7(<16 x i8> %x) nounwind {
128*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t7:
129*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
130*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2]
131*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
132*9880d681SAndroid Build Coastguard Worker;
133*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t7:
134*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
135*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2]
136*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
137*9880d681SAndroid Build Coastguard Worker  %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>
138*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %s
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t8(<16 x i8> %x) nounwind {
142*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t8:
143*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
144*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero
145*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
146*9880d681SAndroid Build Coastguard Worker;
147*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t8:
148*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
149*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero
150*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
151*9880d681SAndroid Build Coastguard Worker  %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 8, i32 9, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 17>
152*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %s
153*9880d681SAndroid Build Coastguard Worker}
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t9(<16 x i8> %x) nounwind {
156*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t9:
157*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
158*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero
159*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
160*9880d681SAndroid Build Coastguard Worker;
161*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t9:
162*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
163*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero
164*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
165*9880d681SAndroid Build Coastguard Worker  %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 7, i32 8, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 14, i32 undef, i32 undef>
166*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %s
167*9880d681SAndroid Build Coastguard Worker}
168