xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/insertelement-zero.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=x86_64-unknown-unknown -mcpu=x86-64 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE3
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSSE3
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
10*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-unknown"
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_v2f64_z1(<2 x double> %a) {
13*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v2f64_z1:
14*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorpd %xmm1, %xmm1
16*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
17*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
18*9880d681SAndroid Build Coastguard Worker;
19*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v2f64_z1:
20*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
21*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorpd %xmm1, %xmm1
22*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
23*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
24*9880d681SAndroid Build Coastguard Worker;
25*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v2f64_z1:
26*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
27*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorpd %xmm1, %xmm1
28*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
29*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
30*9880d681SAndroid Build Coastguard Worker;
31*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v2f64_z1:
32*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
33*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorpd %xmm1, %xmm1
34*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    blendpd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
35*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
36*9880d681SAndroid Build Coastguard Worker;
37*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_v2f64_z1:
38*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
39*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
40*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vblendpd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
41*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
42*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <2 x double> %a, double 0.0, i32 0
43*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %1
44*9880d681SAndroid Build Coastguard Worker}
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @insert_v4f64_0zz3(<4 x double> %a) {
47*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v4f64_0zz3:
48*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
49*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorpd %xmm2, %xmm2
50*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0]
51*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
52*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
53*9880d681SAndroid Build Coastguard Worker;
54*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v4f64_0zz3:
55*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
56*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorpd %xmm2, %xmm2
57*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0]
58*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
59*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
60*9880d681SAndroid Build Coastguard Worker;
61*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v4f64_0zz3:
62*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
63*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorpd %xmm2, %xmm2
64*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm2[0]
65*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
66*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
67*9880d681SAndroid Build Coastguard Worker;
68*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v4f64_0zz3:
69*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
70*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    movq {{.*#+}} xmm0 = xmm0[0],zero
71*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorpd %xmm2, %xmm2
72*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    blendpd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
73*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
74*9880d681SAndroid Build Coastguard Worker;
75*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_v4f64_0zz3:
76*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
77*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
78*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3]
79*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
80*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x double> %a, double 0.0, i32 1
81*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <4 x double> %1, double 0.0, i32 2
82*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %2
83*9880d681SAndroid Build Coastguard Worker}
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_v2i64_z1(<2 x i64> %a) {
86*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v2i64_z1:
87*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
88*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorpd %xmm1, %xmm1
89*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
90*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
91*9880d681SAndroid Build Coastguard Worker;
92*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v2i64_z1:
93*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
94*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorpd %xmm1, %xmm1
95*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
96*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
97*9880d681SAndroid Build Coastguard Worker;
98*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v2i64_z1:
99*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
100*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorpd %xmm1, %xmm1
101*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm1[0],xmm0[1]
102*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
103*9880d681SAndroid Build Coastguard Worker;
104*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v2i64_z1:
105*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
106*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm1, %xmm1
107*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
108*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
109*9880d681SAndroid Build Coastguard Worker;
110*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_v2i64_z1:
111*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
112*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
113*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
114*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
115*9880d681SAndroid Build Coastguard Worker;
116*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_v2i64_z1:
117*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
118*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
119*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1],xmm0[2,3]
120*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
121*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <2 x i64> %a, i64 0, i32 0
122*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %1
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @insert_v4i64_01z3(<4 x i64> %a) {
126*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v4i64_01z3:
127*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
128*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorpd %xmm2, %xmm2
129*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
130*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
131*9880d681SAndroid Build Coastguard Worker;
132*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v4i64_01z3:
133*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
134*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorpd %xmm2, %xmm2
135*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
136*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
137*9880d681SAndroid Build Coastguard Worker;
138*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v4i64_01z3:
139*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
140*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorpd %xmm2, %xmm2
141*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
142*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
143*9880d681SAndroid Build Coastguard Worker;
144*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v4i64_01z3:
145*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
146*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
147*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm2[0,1,2,3],xmm1[4,5,6,7]
148*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
149*9880d681SAndroid Build Coastguard Worker;
150*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_v4i64_01z3:
151*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
152*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorpd %ymm1, %ymm1, %ymm1
153*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3]
154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
155*9880d681SAndroid Build Coastguard Worker;
156*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_v4i64_01z3:
157*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
158*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
159*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7]
160*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
161*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i64> %a, i64 0, i32 2
162*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %1
163*9880d681SAndroid Build Coastguard Worker}
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @insert_v4f32_01z3(<4 x float> %a) {
166*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v4f32_01z3:
167*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
168*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorps %xmm1, %xmm1
169*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[3,0]
170*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,2]
171*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
172*9880d681SAndroid Build Coastguard Worker;
173*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v4f32_01z3:
174*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
175*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorps %xmm1, %xmm1
176*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[3,0]
177*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,2]
178*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
179*9880d681SAndroid Build Coastguard Worker;
180*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v4f32_01z3:
181*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
182*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorps %xmm1, %xmm1
183*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[3,0]
184*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,2]
185*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
186*9880d681SAndroid Build Coastguard Worker;
187*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v4f32_01z3:
188*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
189*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorps %xmm1, %xmm1
190*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3]
191*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
192*9880d681SAndroid Build Coastguard Worker;
193*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_v4f32_01z3:
194*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
195*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vxorps %xmm1, %xmm1, %xmm1
196*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3]
197*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
198*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x float> %a, float 0.0, i32 2
199*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %1
200*9880d681SAndroid Build Coastguard Worker}
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @insert_v8f32_z12345z7(<8 x float> %a) {
203*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v8f32_z12345z7:
204*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
205*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorps %xmm2, %xmm2
206*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movss {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3]
207*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[3,0]
208*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]
209*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
210*9880d681SAndroid Build Coastguard Worker;
211*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v8f32_z12345z7:
212*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
213*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorps %xmm2, %xmm2
214*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movss {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3]
215*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[3,0]
216*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]
217*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
218*9880d681SAndroid Build Coastguard Worker;
219*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v8f32_z12345z7:
220*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
221*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorps %xmm2, %xmm2
222*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movss {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3]
223*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[3,0]
224*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]
225*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
226*9880d681SAndroid Build Coastguard Worker;
227*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v8f32_z12345z7:
228*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
229*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorps %xmm2, %xmm2
230*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    blendps {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3]
231*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    blendps {{.*#+}} xmm1 = xmm1[0,1],xmm2[2],xmm1[3]
232*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
233*9880d681SAndroid Build Coastguard Worker;
234*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_v8f32_z12345z7:
235*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
236*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vxorps %ymm1, %ymm1, %ymm1
237*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5],ymm1[6],ymm0[7]
238*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
239*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <8 x float> %a, float 0.0, i32 0
240*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <8 x float> %1, float 0.0, i32 6
241*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %2
242*9880d681SAndroid Build Coastguard Worker}
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @insert_v4i32_01z3(<4 x i32> %a) {
245*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v4i32_01z3:
246*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
247*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl %eax, %eax
248*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm1
249*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[3,0]
250*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,2]
251*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
252*9880d681SAndroid Build Coastguard Worker;
253*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v4i32_01z3:
254*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
255*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl %eax, %eax
256*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm1
257*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[3,0]
258*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,2]
259*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
260*9880d681SAndroid Build Coastguard Worker;
261*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v4i32_01z3:
262*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
263*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl %eax, %eax
264*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm1
265*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[3,0]
266*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,2]
267*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
268*9880d681SAndroid Build Coastguard Worker;
269*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v4i32_01z3:
270*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
271*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm1, %xmm1
272*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5],xmm0[6,7]
273*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
274*9880d681SAndroid Build Coastguard Worker;
275*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_v4i32_01z3:
276*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
277*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
278*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5],xmm0[6,7]
279*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
280*9880d681SAndroid Build Coastguard Worker;
281*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_v4i32_01z3:
282*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
283*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
284*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3]
285*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
286*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <4 x i32> %a, i32 0, i32 2
287*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %1
288*9880d681SAndroid Build Coastguard Worker}
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @insert_v8i32_z12345z7(<8 x i32> %a) {
291*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v8i32_z12345z7:
292*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
293*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorps %xmm2, %xmm2
294*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movss {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3]
295*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl %eax, %eax
296*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm2
297*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[3,0]
298*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]
299*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
300*9880d681SAndroid Build Coastguard Worker;
301*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v8i32_z12345z7:
302*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
303*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorps %xmm2, %xmm2
304*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movss {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3]
305*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl %eax, %eax
306*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm2
307*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[3,0]
308*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]
309*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
310*9880d681SAndroid Build Coastguard Worker;
311*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v8i32_z12345z7:
312*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
313*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorps %xmm2, %xmm2
314*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movss {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3]
315*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl %eax, %eax
316*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm2
317*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[3,0]
318*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]
319*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
320*9880d681SAndroid Build Coastguard Worker;
321*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v8i32_z12345z7:
322*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
323*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
324*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm2[0,1],xmm0[2,3,4,5,6,7]
325*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5],xmm1[6,7]
326*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
327*9880d681SAndroid Build Coastguard Worker;
328*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_v8i32_z12345z7:
329*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
330*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm1, %ymm1, %ymm1
331*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5],ymm1[6],ymm0[7]
332*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
333*9880d681SAndroid Build Coastguard Worker;
334*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_v8i32_z12345z7:
335*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
336*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
337*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3,4,5],ymm1[6],ymm0[7]
338*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
339*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <8 x i32> %a, i32 0, i32 0
340*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <8 x i32> %1, i32 0, i32 6
341*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %2
342*9880d681SAndroid Build Coastguard Worker}
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @insert_v8i16_z12345z7(<8 x i16> %a) {
345*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v8i16_z12345z7:
346*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
347*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl %eax, %eax
348*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pinsrw $0, %eax, %xmm0
349*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pinsrw $6, %eax, %xmm0
350*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
351*9880d681SAndroid Build Coastguard Worker;
352*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v8i16_z12345z7:
353*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
354*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl %eax, %eax
355*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pinsrw $0, %eax, %xmm0
356*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pinsrw $6, %eax, %xmm0
357*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
358*9880d681SAndroid Build Coastguard Worker;
359*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v8i16_z12345z7:
360*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
361*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl %eax, %eax
362*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pinsrw $0, %eax, %xmm0
363*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pinsrw $6, %eax, %xmm0
364*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
365*9880d681SAndroid Build Coastguard Worker;
366*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v8i16_z12345z7:
367*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
368*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm1, %xmm1
369*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3,4,5],xmm1[6],xmm0[7]
370*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
371*9880d681SAndroid Build Coastguard Worker;
372*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_v8i16_z12345z7:
373*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
374*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
375*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3,4,5],xmm1[6],xmm0[7]
376*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
377*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <8 x i16> %a, i16 0, i32 0
378*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <8 x i16> %1, i16 0, i32 6
379*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
380*9880d681SAndroid Build Coastguard Worker}
381*9880d681SAndroid Build Coastguard Worker
382*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @insert_v16i16_z12345z789ABZDEz(<16 x i16> %a) {
383*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v16i16_z12345z789ABZDEz:
384*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
385*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl %eax, %eax
386*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pinsrw $0, %eax, %xmm0
387*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pinsrw $6, %eax, %xmm0
388*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pinsrw $7, %eax, %xmm1
389*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
390*9880d681SAndroid Build Coastguard Worker;
391*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v16i16_z12345z789ABZDEz:
392*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
393*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl %eax, %eax
394*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pinsrw $0, %eax, %xmm0
395*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pinsrw $6, %eax, %xmm0
396*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pinsrw $7, %eax, %xmm1
397*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
398*9880d681SAndroid Build Coastguard Worker;
399*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v16i16_z12345z789ABZDEz:
400*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
401*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl %eax, %eax
402*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pinsrw $0, %eax, %xmm0
403*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pinsrw $6, %eax, %xmm0
404*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pinsrw $7, %eax, %xmm1
405*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
406*9880d681SAndroid Build Coastguard Worker;
407*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v16i16_z12345z789ABZDEz:
408*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
409*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pxor %xmm2, %xmm2
410*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3,4,5],xmm2[6],xmm0[7]
411*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,5,6],xmm2[7]
412*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
413*9880d681SAndroid Build Coastguard Worker;
414*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_v16i16_z12345z789ABZDEz:
415*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
416*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
417*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm1[0],xmm0[1,2,3,4,5,6,7]
418*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
419*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm0[0,1,2,3,4,5],xmm1[6],xmm0[7]
420*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
421*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
422*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1,2,3,4,5,6],xmm1[7]
423*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
424*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
425*9880d681SAndroid Build Coastguard Worker;
426*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_v16i16_z12345z789ABZDEz:
427*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
428*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
429*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendw {{.*#+}} xmm2 = xmm1[0],xmm0[1,2,3,4,5,6,7]
430*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
431*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendw {{.*#+}} xmm2 = xmm0[0,1,2,3,4,5],xmm1[6],xmm0[7]
432*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
433*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
434*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1,2,3,4,5,6],xmm1[7]
435*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
436*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
437*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <16 x i16> %a, i16 0, i32 0
438*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <16 x i16> %1, i16 0, i32 6
439*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <16 x i16> %2, i16 0, i32 15
440*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %3
441*9880d681SAndroid Build Coastguard Worker}
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @insert_v16i8_z123456789ABZDEz(<16 x i8> %a) {
444*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v16i8_z123456789ABZDEz:
445*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
446*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
447*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
448*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl %eax, %eax
449*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm2
450*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm2, %xmm1
451*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm1, %xmm0
452*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]
453*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm1, %xmm0
454*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0]
455*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm2, %xmm1
456*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm1, %xmm0
457*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
458*9880d681SAndroid Build Coastguard Worker;
459*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v16i8_z123456789ABZDEz:
460*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
461*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
462*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm1, %xmm0
463*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl %eax, %eax
464*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm2
465*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pandn %xmm2, %xmm1
466*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    por %xmm1, %xmm0
467*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]
468*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm1, %xmm0
469*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0]
470*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pandn %xmm2, %xmm1
471*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    por %xmm1, %xmm0
472*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
473*9880d681SAndroid Build Coastguard Worker;
474*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v16i8_z123456789ABZDEz:
475*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
476*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = zero,xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
477*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl %eax, %eax
478*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm1
479*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm1, %xmm2
480*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
481*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm2, %xmm0
482*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],zero
483*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0]
484*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm1, %xmm0
485*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
486*9880d681SAndroid Build Coastguard Worker;
487*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v16i8_z123456789ABZDEz:
488*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
489*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl %eax, %eax
490*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $0, %eax, %xmm0
491*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $15, %eax, %xmm0
492*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
493*9880d681SAndroid Build Coastguard Worker;
494*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: insert_v16i8_z123456789ABZDEz:
495*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
496*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    xorl %eax, %eax
497*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm0
498*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0
499*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
500*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <16 x i8> %a, i8 0, i32 0
501*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <16 x i8> %1, i8 0, i32 15
502*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
503*9880d681SAndroid Build Coastguard Worker}
504*9880d681SAndroid Build Coastguard Worker
505*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @insert_v32i8_z123456789ABCDEzGHIJKLMNOPQRSTzz(<32 x i8> %a) {
506*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: insert_v32i8_z123456789ABCDEzGHIJKLMNOPQRSTzz:
507*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
508*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
509*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm0
510*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    xorl %eax, %eax
511*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movd %eax, %xmm3
512*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm3, %xmm2
513*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm0
514*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]
515*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm0
516*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
517*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0]
518*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255]
519*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm5, %xmm1
520*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1]
521*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm3, %xmm5
522*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm5, %xmm1
523*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pand %xmm2, %xmm1
524*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pandn %xmm4, %xmm2
525*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm0
526*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    por %xmm2, %xmm1
527*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
528*9880d681SAndroid Build Coastguard Worker;
529*9880d681SAndroid Build Coastguard Worker; SSE3-LABEL: insert_v32i8_z123456789ABCDEzGHIJKLMNOPQRSTzz:
530*9880d681SAndroid Build Coastguard Worker; SSE3:       # BB#0:
531*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa {{.*#+}} xmm2 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
532*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm2, %xmm0
533*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    xorl %eax, %eax
534*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movd %eax, %xmm3
535*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pandn %xmm3, %xmm2
536*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    por %xmm2, %xmm0
537*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]
538*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm2, %xmm0
539*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa %xmm3, %xmm4
540*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0]
541*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    movdqa {{.*#+}} xmm5 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255]
542*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm5, %xmm1
543*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1]
544*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pandn %xmm3, %xmm5
545*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    por %xmm5, %xmm1
546*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pand %xmm2, %xmm1
547*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    pandn %xmm4, %xmm2
548*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    por %xmm2, %xmm0
549*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    por %xmm2, %xmm1
550*9880d681SAndroid Build Coastguard Worker; SSE3-NEXT:    retq
551*9880d681SAndroid Build Coastguard Worker;
552*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: insert_v32i8_z123456789ABCDEzGHIJKLMNOPQRSTzz:
553*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
554*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = zero,xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
555*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    xorl %eax, %eax
556*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movd %eax, %xmm2
557*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm3
558*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
559*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm3, %xmm0
560*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,128]
561*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm3, %xmm0
562*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    movdqa %xmm2, %xmm4
563*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0]
564*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm4, %xmm0
565*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[0,1,2,3,4,5,6,7,8,9,10,11,12,13],zero,xmm1[15]
566*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0],zero
567*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm2, %xmm1
568*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pshufb %xmm3, %xmm1
569*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    por %xmm4, %xmm1
570*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
571*9880d681SAndroid Build Coastguard Worker;
572*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: insert_v32i8_z123456789ABCDEzGHIJKLMNOPQRSTzz:
573*9880d681SAndroid Build Coastguard Worker; SSE41:       # BB#0:
574*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    xorl %eax, %eax
575*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $0, %eax, %xmm0
576*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $15, %eax, %xmm0
577*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $14, %eax, %xmm1
578*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    pinsrb $15, %eax, %xmm1
579*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT:    retq
580*9880d681SAndroid Build Coastguard Worker;
581*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_v32i8_z123456789ABCDEzGHIJKLMNOPQRSTzz:
582*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
583*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    xorl %eax, %eax
584*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm1
585*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
586*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm1
587*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
588*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
589*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrb $14, %eax, %xmm1, %xmm1
590*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
591*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm1
592*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
593*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
594*9880d681SAndroid Build Coastguard Worker;
595*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_v32i8_z123456789ABCDEzGHIJKLMNOPQRSTzz:
596*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
597*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    xorl %eax, %eax
598*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrb $0, %eax, %xmm0, %xmm1
599*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
600*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm1
601*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
602*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
603*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrb $14, %eax, %xmm1, %xmm1
604*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
605*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm1
606*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
607*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
608*9880d681SAndroid Build Coastguard Worker  %1 = insertelement <32 x i8> %a, i8 0, i32 0
609*9880d681SAndroid Build Coastguard Worker  %2 = insertelement <32 x i8> %1, i8 0, i32 15
610*9880d681SAndroid Build Coastguard Worker  %3 = insertelement <32 x i8> %2, i8 0, i32 30
611*9880d681SAndroid Build Coastguard Worker  %4 = insertelement <32 x i8> %3, i8 0, i32 31
612*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %4
613*9880d681SAndroid Build Coastguard Worker}
614