xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512-insert-extract.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 -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck --check-prefix=KNL %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck --check-prefix=SKX %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test1(<16 x float> %x, float* %br, float %y) nounwind {
6*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test1:
7*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
8*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertps {{.*#+}} xmm2 = xmm0[0],mem[0],xmm0[2,3]
9*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertf32x4 $0, %xmm2, %zmm0, %zmm0
10*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextractf32x4 $3, %zmm0, %xmm2
11*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
12*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertf32x4 $3, %xmm1, %zmm0, %zmm0
13*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
14*9880d681SAndroid Build Coastguard Worker;
15*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test1:
16*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
17*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinsertps {{.*#+}} xmm2 = xmm0[0],mem[0],xmm0[2,3]
18*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinsertf32x4 $0, %xmm2, %zmm0, %zmm0
19*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextractf32x4 $3, %zmm0, %xmm2
20*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinsertps {{.*#+}} xmm1 = xmm2[0,1],xmm1[0],xmm2[3]
21*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinsertf32x4 $3, %xmm1, %zmm0, %zmm0
22*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
23*9880d681SAndroid Build Coastguard Worker  %rrr = load float, float* %br
24*9880d681SAndroid Build Coastguard Worker  %rrr2 = insertelement <16 x float> %x, float %rrr, i32 1
25*9880d681SAndroid Build Coastguard Worker  %rrr3 = insertelement <16 x float> %rrr2, float %y, i32 14
26*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %rrr3
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test2(<8 x double> %x, double* %br, double %y) nounwind {
30*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test2:
31*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
32*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovhpd {{.*#+}} xmm2 = xmm0[0],mem[0]
33*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertf32x4 $0, %xmm2, %zmm0, %zmm0
34*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextractf32x4 $3, %zmm0, %xmm2
35*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovsd {{.*#+}} xmm1 = xmm1[0],xmm2[1]
36*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertf32x4 $3, %xmm1, %zmm0, %zmm0
37*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
38*9880d681SAndroid Build Coastguard Worker;
39*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test2:
40*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
41*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovhpd {{.*#+}} xmm2 = xmm0[0],mem[0]
42*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinsertf64x2 $0, %xmm2, %zmm0, %zmm0
43*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextractf64x2 $3, %zmm0, %xmm2
44*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovsd {{.*#+}} xmm1 = xmm1[0],xmm2[1]
45*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinsertf64x2 $3, %xmm1, %zmm0, %zmm0
46*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
47*9880d681SAndroid Build Coastguard Worker  %rrr = load double, double* %br
48*9880d681SAndroid Build Coastguard Worker  %rrr2 = insertelement <8 x double> %x, double %rrr, i32 1
49*9880d681SAndroid Build Coastguard Worker  %rrr3 = insertelement <8 x double> %rrr2, double %y, i32 6
50*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %rrr3
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test3(<16 x float> %x) nounwind {
54*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test3:
55*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
56*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextractf32x4 $1, %zmm0, %xmm1
57*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[2,3]
58*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertf32x4 $0, %xmm1, %zmm0, %zmm0
59*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
60*9880d681SAndroid Build Coastguard Worker;
61*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test3:
62*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
63*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextractf32x4 $1, %zmm0, %xmm1
64*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinsertps {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[2,3]
65*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinsertf32x4 $0, %xmm1, %zmm0, %zmm0
66*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
67*9880d681SAndroid Build Coastguard Worker  %eee = extractelement <16 x float> %x, i32 4
68*9880d681SAndroid Build Coastguard Worker  %rrr2 = insertelement <16 x float> %x, float %eee, i32 1
69*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %rrr2
70*9880d681SAndroid Build Coastguard Worker}
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test4(<8 x i64> %x) nounwind {
73*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test4:
74*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
75*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti32x4 $2, %zmm0, %xmm1
76*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovq %xmm1, %rax
77*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrq $1, %rax, %xmm0, %xmm1
78*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti32x4 $0, %xmm1, %zmm0, %zmm0
79*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
80*9880d681SAndroid Build Coastguard Worker;
81*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test4:
82*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
83*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti64x2 $2, %zmm0, %xmm1
84*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovq %xmm1, %rax
85*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrq $1, %rax, %xmm0, %xmm1
86*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti64x2 $0, %xmm1, %zmm0, %zmm0
87*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
88*9880d681SAndroid Build Coastguard Worker  %eee = extractelement <8 x i64> %x, i32 4
89*9880d681SAndroid Build Coastguard Worker  %rrr2 = insertelement <8 x i64> %x, i64 %eee, i32 1
90*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %rrr2
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine i32 @test5(<4 x float> %x) nounwind {
94*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test5:
95*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
96*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextractps $3, %xmm0, %eax
97*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
98*9880d681SAndroid Build Coastguard Worker;
99*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test5:
100*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
101*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextractps $3, %xmm0, %eax
102*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
103*9880d681SAndroid Build Coastguard Worker  %ef = extractelement <4 x float> %x, i32 3
104*9880d681SAndroid Build Coastguard Worker  %ei = bitcast float %ef to i32
105*9880d681SAndroid Build Coastguard Worker  ret i32 %ei
106*9880d681SAndroid Build Coastguard Worker}
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workerdefine void @test6(<4 x float> %x, float* %out) nounwind {
109*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test6:
110*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
111*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextractps $3, %xmm0, (%rdi)
112*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
113*9880d681SAndroid Build Coastguard Worker;
114*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test6:
115*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
116*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextractps $3, %xmm0, (%rdi)
117*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
118*9880d681SAndroid Build Coastguard Worker  %ef = extractelement <4 x float> %x, i32 3
119*9880d681SAndroid Build Coastguard Worker  store float %ef, float* %out, align 4
120*9880d681SAndroid Build Coastguard Worker  ret void
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdefine float @test7(<16 x float> %x, i32 %ind) nounwind {
124*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test7:
125*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
126*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovd %edi, %xmm1
127*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpermps %zmm0, %zmm1, %zmm0
128*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
129*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
130*9880d681SAndroid Build Coastguard Worker;
131*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test7:
132*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
133*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovd %edi, %xmm1
134*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpermps %zmm0, %zmm1, %zmm0
135*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
136*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
137*9880d681SAndroid Build Coastguard Worker  %e = extractelement <16 x float> %x, i32 %ind
138*9880d681SAndroid Build Coastguard Worker  ret float %e
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerdefine double @test8(<8 x double> %x, i32 %ind) nounwind {
142*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test8:
143*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
144*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    movslq %edi, %rax
145*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovq %rax, %xmm1
146*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
147*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
148*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
149*9880d681SAndroid Build Coastguard Worker;
150*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test8:
151*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
152*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    movslq %edi, %rax
153*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovq %rax, %xmm1
154*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpermpd %zmm0, %zmm1, %zmm0
155*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %ZMM0<kill>
156*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
157*9880d681SAndroid Build Coastguard Worker  %e = extractelement <8 x double> %x, i32 %ind
158*9880d681SAndroid Build Coastguard Worker  ret double %e
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Workerdefine float @test9(<8 x float> %x, i32 %ind) nounwind {
162*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test9:
163*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
164*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovd %edi, %xmm1
165*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
166*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
167*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
168*9880d681SAndroid Build Coastguard Worker;
169*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test9:
170*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
171*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovd %edi, %xmm1
172*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpermps %ymm0, %ymm1, %ymm0
173*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
174*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
175*9880d681SAndroid Build Coastguard Worker  %e = extractelement <8 x float> %x, i32 %ind
176*9880d681SAndroid Build Coastguard Worker  ret float %e
177*9880d681SAndroid Build Coastguard Worker}
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Workerdefine i32 @test10(<16 x i32> %x, i32 %ind) nounwind {
180*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test10:
181*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
182*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovd %edi, %xmm1
183*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpermd %zmm0, %zmm1, %zmm0
184*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovd %xmm0, %eax
185*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
186*9880d681SAndroid Build Coastguard Worker;
187*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test10:
188*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
189*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovd %edi, %xmm1
190*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpermd %zmm0, %zmm1, %zmm0
191*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovd %xmm0, %eax
192*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
193*9880d681SAndroid Build Coastguard Worker  %e = extractelement <16 x i32> %x, i32 %ind
194*9880d681SAndroid Build Coastguard Worker  ret i32 %e
195*9880d681SAndroid Build Coastguard Worker}
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test11(<16 x i32>%a, <16 x i32>%b) {
198*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test11:
199*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
200*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpltud %zmm1, %zmm0, %k0
201*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $11, %k0, %k0
202*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
203*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %eax
204*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    testb %al, %al
205*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    je LBB10_2
206*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:  ## BB#1: ## %A
207*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovaps %zmm1, %zmm0
208*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
209*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:  LBB10_2: ## %B
210*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpaddd %zmm0, %zmm1, %zmm0
211*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
212*9880d681SAndroid Build Coastguard Worker;
213*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test11:
214*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
215*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpltud %zmm1, %zmm0, %k0
216*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kshiftlw $11, %k0, %k0
217*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kshiftrw $15, %k0, %k0
218*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovw %k0, %eax
219*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    testb %al, %al
220*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    je LBB10_2
221*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:  ## BB#1: ## %A
222*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovaps %zmm1, %zmm0
223*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
224*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:  LBB10_2: ## %B
225*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpaddd %zmm0, %zmm1, %zmm0
226*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
227*9880d681SAndroid Build Coastguard Worker  %cmp_res = icmp ult <16 x i32> %a, %b
228*9880d681SAndroid Build Coastguard Worker  %ia = extractelement <16 x i1> %cmp_res, i32 4
229*9880d681SAndroid Build Coastguard Worker  br i1 %ia, label %A, label %B
230*9880d681SAndroid Build Coastguard Worker  A:
231*9880d681SAndroid Build Coastguard Worker    ret <16 x i32>%b
232*9880d681SAndroid Build Coastguard Worker  B:
233*9880d681SAndroid Build Coastguard Worker   %c = add <16 x i32>%b, %a
234*9880d681SAndroid Build Coastguard Worker   ret <16 x i32>%c
235*9880d681SAndroid Build Coastguard Worker}
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Workerdefine i64 @test12(<16 x i64>%a, <16 x i64>%b, i64 %a1, i64 %b1) {
238*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test12:
239*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
240*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpgtq %zmm0, %zmm2, %k0
241*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpgtq %zmm1, %zmm3, %k1
242*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kunpckbw %k0, %k1, %k0
243*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $15, %k0, %k0
244*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
245*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %eax
246*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    testb %al, %al
247*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    cmoveq %rsi, %rdi
248*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    movq %rdi, %rax
249*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
250*9880d681SAndroid Build Coastguard Worker;
251*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test12:
252*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
253*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpgtq %zmm0, %zmm2, %k0
254*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpgtq %zmm1, %zmm3, %k1
255*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kunpckbw %k0, %k1, %k0
256*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kshiftlw $15, %k0, %k0
257*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kshiftrw $15, %k0, %k0
258*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovw %k0, %eax
259*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    testb %al, %al
260*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    cmoveq %rsi, %rdi
261*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    movq %rdi, %rax
262*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
263*9880d681SAndroid Build Coastguard Worker  %cmpvector_func.i = icmp slt <16 x i64> %a, %b
264*9880d681SAndroid Build Coastguard Worker  %extract24vector_func.i = extractelement <16 x i1> %cmpvector_func.i, i32 0
265*9880d681SAndroid Build Coastguard Worker  %res = select i1 %extract24vector_func.i, i64 %a1, i64 %b1
266*9880d681SAndroid Build Coastguard Worker  ret i64 %res
267*9880d681SAndroid Build Coastguard Worker}
268*9880d681SAndroid Build Coastguard Worker
269*9880d681SAndroid Build Coastguard Workerdefine i16 @test13(i32 %a, i32 %b) {
270*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test13:
271*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
272*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    cmpl %esi, %edi
273*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    setb %al
274*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %eax, %k0
275*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    movw $-4, %ax
276*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %eax, %k1
277*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    korw %k0, %k1, %k0
278*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %eax
279*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
280*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
281*9880d681SAndroid Build Coastguard Worker;
282*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test13:
283*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
284*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    cmpl %esi, %edi
285*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    setb %al
286*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovw %eax, %k0
287*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    movw $-4, %ax
288*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovw %eax, %k1
289*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    korw %k0, %k1, %k0
290*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovw %k0, %eax
291*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
292*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
293*9880d681SAndroid Build Coastguard Worker  %cmp_res = icmp ult i32 %a, %b
294*9880d681SAndroid Build Coastguard Worker  %maskv = insertelement <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i1 %cmp_res, i32 0
295*9880d681SAndroid Build Coastguard Worker  %res = bitcast <16 x i1> %maskv to i16
296*9880d681SAndroid Build Coastguard Worker  ret i16 %res
297*9880d681SAndroid Build Coastguard Worker}
298*9880d681SAndroid Build Coastguard Worker
299*9880d681SAndroid Build Coastguard Workerdefine i64 @test14(<8 x i64>%a, <8 x i64>%b, i64 %a1, i64 %b1) {
300*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test14:
301*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
302*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpgtq %zmm0, %zmm1, %k0
303*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $11, %k0, %k0
304*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
305*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %eax
306*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    testb %al, %al
307*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    cmoveq %rsi, %rdi
308*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    movq %rdi, %rax
309*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
310*9880d681SAndroid Build Coastguard Worker;
311*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test14:
312*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
313*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpgtq %zmm0, %zmm1, %k0
314*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kshiftlb $3, %k0, %k0
315*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kshiftrb $7, %k0, %k0
316*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovw %k0, %eax
317*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    testb %al, %al
318*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    cmoveq %rsi, %rdi
319*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    movq %rdi, %rax
320*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
321*9880d681SAndroid Build Coastguard Worker  %cmpvector_func.i = icmp slt <8 x i64> %a, %b
322*9880d681SAndroid Build Coastguard Worker  %extract24vector_func.i = extractelement <8 x i1> %cmpvector_func.i, i32 4
323*9880d681SAndroid Build Coastguard Worker  %res = select i1 %extract24vector_func.i, i64 %a1, i64 %b1
324*9880d681SAndroid Build Coastguard Worker  ret i64 %res
325*9880d681SAndroid Build Coastguard Worker}
326*9880d681SAndroid Build Coastguard Worker
327*9880d681SAndroid Build Coastguard Workerdefine i16 @test15(i1 *%addr) {
328*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test15:
329*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
330*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    movb (%rdi), %al
331*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    xorl %ecx, %ecx
332*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    testb %al, %al
333*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    movw $-1, %ax
334*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    cmovew %cx, %ax
335*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
336*9880d681SAndroid Build Coastguard Worker;
337*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test15:
338*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
339*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    movb (%rdi), %al
340*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    xorl %ecx, %ecx
341*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    testb %al, %al
342*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    movw $-1, %ax
343*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    cmovew %cx, %ax
344*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
345*9880d681SAndroid Build Coastguard Worker  %x = load i1 , i1 * %addr, align 1
346*9880d681SAndroid Build Coastguard Worker  %x1 = insertelement <16 x i1> undef, i1 %x, i32 10
347*9880d681SAndroid Build Coastguard Worker  %x2 = bitcast <16 x i1>%x1 to i16
348*9880d681SAndroid Build Coastguard Worker  ret i16 %x2
349*9880d681SAndroid Build Coastguard Worker}
350*9880d681SAndroid Build Coastguard Worker
351*9880d681SAndroid Build Coastguard Workerdefine i16 @test16(i1 *%addr, i16 %a) {
352*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test16:
353*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
354*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    movzbl (%rdi), %eax
355*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    andl $1, %eax
356*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %eax, %k0
357*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %esi, %k1
358*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $10, %k0, %k0
359*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    korw %k0, %k1, %k0
360*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %eax
361*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
362*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
363*9880d681SAndroid Build Coastguard Worker;
364*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test16:
365*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
366*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    movzbl (%rdi), %eax
367*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    andl $1, %eax
368*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovd %eax, %k0
369*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovw %esi, %k1
370*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kshiftlw $10, %k0, %k0
371*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    korw %k0, %k1, %k0
372*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovw %k0, %eax
373*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
374*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
375*9880d681SAndroid Build Coastguard Worker  %x = load i1 , i1 * %addr, align 128
376*9880d681SAndroid Build Coastguard Worker  %a1 = bitcast i16 %a to <16 x i1>
377*9880d681SAndroid Build Coastguard Worker  %x1 = insertelement <16 x i1> %a1, i1 %x, i32 10
378*9880d681SAndroid Build Coastguard Worker  %x2 = bitcast <16 x i1>%x1 to i16
379*9880d681SAndroid Build Coastguard Worker  ret i16 %x2
380*9880d681SAndroid Build Coastguard Worker}
381*9880d681SAndroid Build Coastguard Worker
382*9880d681SAndroid Build Coastguard Workerdefine i8 @test17(i1 *%addr, i8 %a) {
383*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test17:
384*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
385*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    movzbl (%rdi), %eax
386*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    andl $1, %eax
387*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %eax, %k0
388*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %esi, %k1
389*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $4, %k0, %k0
390*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    korw %k0, %k1, %k0
391*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %eax
392*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
393*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
394*9880d681SAndroid Build Coastguard Worker;
395*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test17:
396*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
397*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    movzbl (%rdi), %eax
398*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    andl $1, %eax
399*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovd %eax, %k0
400*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovb %esi, %k1
401*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kshiftlb $4, %k0, %k0
402*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    korb %k0, %k1, %k0
403*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovb %k0, %eax
404*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
405*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
406*9880d681SAndroid Build Coastguard Worker  %x = load i1 , i1 * %addr, align 128
407*9880d681SAndroid Build Coastguard Worker  %a1 = bitcast i8 %a to <8 x i1>
408*9880d681SAndroid Build Coastguard Worker  %x1 = insertelement <8 x i1> %a1, i1 %x, i32 4
409*9880d681SAndroid Build Coastguard Worker  %x2 = bitcast <8 x i1>%x1 to i8
410*9880d681SAndroid Build Coastguard Worker  ret i8 %x2
411*9880d681SAndroid Build Coastguard Worker}
412*9880d681SAndroid Build Coastguard Worker
413*9880d681SAndroid Build Coastguard Workerdefine i64 @extract_v8i64(<8 x i64> %x, i64* %dst) {
414*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v8i64:
415*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
416*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrq $1, %xmm0, %rax
417*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti32x4 $1, %zmm0, %xmm0
418*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrq $1, %xmm0, (%rdi)
419*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
420*9880d681SAndroid Build Coastguard Worker;
421*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v8i64:
422*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
423*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrq $1, %xmm0, %rax
424*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti64x2 $1, %zmm0, %xmm0
425*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrq $1, %xmm0, (%rdi)
426*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
427*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <8 x i64> %x, i32 1
428*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <8 x i64> %x, i32 3
429*9880d681SAndroid Build Coastguard Worker  store i64 %r2, i64* %dst, align 1
430*9880d681SAndroid Build Coastguard Worker  ret i64 %r1
431*9880d681SAndroid Build Coastguard Worker}
432*9880d681SAndroid Build Coastguard Worker
433*9880d681SAndroid Build Coastguard Workerdefine i64 @extract_v4i64(<4 x i64> %x, i64* %dst) {
434*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v4i64:
435*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
436*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrq $1, %xmm0, %rax
437*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
438*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrq $1, %xmm0, (%rdi)
439*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
440*9880d681SAndroid Build Coastguard Worker;
441*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v4i64:
442*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
443*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrq $1, %xmm0, %rax
444*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti64x2 $1, %ymm0, %xmm0
445*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrq $1, %xmm0, (%rdi)
446*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
447*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <4 x i64> %x, i32 1
448*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <4 x i64> %x, i32 3
449*9880d681SAndroid Build Coastguard Worker  store i64 %r2, i64* %dst, align 1
450*9880d681SAndroid Build Coastguard Worker  ret i64 %r1
451*9880d681SAndroid Build Coastguard Worker}
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Workerdefine i64 @extract_v2i64(<2 x i64> %x, i64* %dst) {
454*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v2i64:
455*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
456*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovq %xmm0, %rax
457*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrq $1, %xmm0, (%rdi)
458*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
459*9880d681SAndroid Build Coastguard Worker;
460*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v2i64:
461*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
462*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovq %xmm0, %rax
463*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrq $1, %xmm0, (%rdi)
464*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
465*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <2 x i64> %x, i32 0
466*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <2 x i64> %x, i32 1
467*9880d681SAndroid Build Coastguard Worker  store i64 %r2, i64* %dst, align 1
468*9880d681SAndroid Build Coastguard Worker  ret i64 %r1
469*9880d681SAndroid Build Coastguard Worker}
470*9880d681SAndroid Build Coastguard Worker
471*9880d681SAndroid Build Coastguard Workerdefine i32 @extract_v16i32(<16 x i32> %x, i32* %dst) {
472*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v16i32:
473*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
474*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrd $1, %xmm0, %eax
475*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti32x4 $1, %zmm0, %xmm0
476*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrd $1, %xmm0, (%rdi)
477*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
478*9880d681SAndroid Build Coastguard Worker;
479*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v16i32:
480*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
481*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrd $1, %xmm0, %eax
482*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %zmm0, %xmm0
483*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrd $1, %xmm0, (%rdi)
484*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
485*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <16 x i32> %x, i32 1
486*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <16 x i32> %x, i32 5
487*9880d681SAndroid Build Coastguard Worker  store i32 %r2, i32* %dst, align 1
488*9880d681SAndroid Build Coastguard Worker  ret i32 %r1
489*9880d681SAndroid Build Coastguard Worker}
490*9880d681SAndroid Build Coastguard Worker
491*9880d681SAndroid Build Coastguard Workerdefine i32 @extract_v8i32(<8 x i32> %x, i32* %dst) {
492*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v8i32:
493*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
494*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrd $1, %xmm0, %eax
495*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
496*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrd $1, %xmm0, (%rdi)
497*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
498*9880d681SAndroid Build Coastguard Worker;
499*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v8i32:
500*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
501*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrd $1, %xmm0, %eax
502*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %ymm0, %xmm0
503*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrd $1, %xmm0, (%rdi)
504*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
505*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <8 x i32> %x, i32 1
506*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <8 x i32> %x, i32 5
507*9880d681SAndroid Build Coastguard Worker  store i32 %r2, i32* %dst, align 1
508*9880d681SAndroid Build Coastguard Worker  ret i32 %r1
509*9880d681SAndroid Build Coastguard Worker}
510*9880d681SAndroid Build Coastguard Worker
511*9880d681SAndroid Build Coastguard Workerdefine i32 @extract_v4i32(<4 x i32> %x, i32* %dst) {
512*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v4i32:
513*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
514*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrd $1, %xmm0, %eax
515*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrd $3, %xmm0, (%rdi)
516*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
517*9880d681SAndroid Build Coastguard Worker;
518*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v4i32:
519*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
520*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrd $1, %xmm0, %eax
521*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrd $3, %xmm0, (%rdi)
522*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
523*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <4 x i32> %x, i32 1
524*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <4 x i32> %x, i32 3
525*9880d681SAndroid Build Coastguard Worker  store i32 %r2, i32* %dst, align 1
526*9880d681SAndroid Build Coastguard Worker  ret i32 %r1
527*9880d681SAndroid Build Coastguard Worker}
528*9880d681SAndroid Build Coastguard Worker
529*9880d681SAndroid Build Coastguard Workerdefine i16 @extract_v32i16(<32 x i16> %x, i16* %dst) {
530*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v32i16:
531*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
532*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrw $1, %xmm0, %eax
533*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
534*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrw $1, %xmm0, (%rdi)
535*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
536*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
537*9880d681SAndroid Build Coastguard Worker;
538*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v32i16:
539*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
540*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrw $1, %xmm0, %eax
541*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %zmm0, %xmm0
542*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrw $1, %xmm0, (%rdi)
543*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
544*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
545*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <32 x i16> %x, i32 1
546*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <32 x i16> %x, i32 9
547*9880d681SAndroid Build Coastguard Worker  store i16 %r2, i16* %dst, align 1
548*9880d681SAndroid Build Coastguard Worker  ret i16 %r1
549*9880d681SAndroid Build Coastguard Worker}
550*9880d681SAndroid Build Coastguard Worker
551*9880d681SAndroid Build Coastguard Workerdefine i16 @extract_v16i16(<16 x i16> %x, i16* %dst) {
552*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v16i16:
553*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
554*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrw $1, %xmm0, %eax
555*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
556*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrw $1, %xmm0, (%rdi)
557*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
558*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
559*9880d681SAndroid Build Coastguard Worker;
560*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v16i16:
561*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
562*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrw $1, %xmm0, %eax
563*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %ymm0, %xmm0
564*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrw $1, %xmm0, (%rdi)
565*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
566*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
567*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <16 x i16> %x, i32 1
568*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <16 x i16> %x, i32 9
569*9880d681SAndroid Build Coastguard Worker  store i16 %r2, i16* %dst, align 1
570*9880d681SAndroid Build Coastguard Worker  ret i16 %r1
571*9880d681SAndroid Build Coastguard Worker}
572*9880d681SAndroid Build Coastguard Worker
573*9880d681SAndroid Build Coastguard Workerdefine i16 @extract_v8i16(<8 x i16> %x, i16* %dst) {
574*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v8i16:
575*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
576*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrw $1, %xmm0, %eax
577*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrw $3, %xmm0, (%rdi)
578*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
579*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
580*9880d681SAndroid Build Coastguard Worker;
581*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v8i16:
582*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
583*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrw $1, %xmm0, %eax
584*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrw $3, %xmm0, (%rdi)
585*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
586*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
587*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <8 x i16> %x, i32 1
588*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <8 x i16> %x, i32 3
589*9880d681SAndroid Build Coastguard Worker  store i16 %r2, i16* %dst, align 1
590*9880d681SAndroid Build Coastguard Worker  ret i16 %r1
591*9880d681SAndroid Build Coastguard Worker}
592*9880d681SAndroid Build Coastguard Worker
593*9880d681SAndroid Build Coastguard Workerdefine i8 @extract_v64i8(<64 x i8> %x, i8* %dst) {
594*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v64i8:
595*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
596*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrb $1, %xmm0, %eax
597*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
598*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrb $1, %xmm0, (%rdi)
599*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
600*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
601*9880d681SAndroid Build Coastguard Worker;
602*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v64i8:
603*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
604*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrb $1, %xmm0, %eax
605*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %zmm0, %xmm0
606*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrb $1, %xmm0, (%rdi)
607*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
608*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
609*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <64 x i8> %x, i32 1
610*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <64 x i8> %x, i32 17
611*9880d681SAndroid Build Coastguard Worker  store i8 %r2, i8* %dst, align 1
612*9880d681SAndroid Build Coastguard Worker  ret i8 %r1
613*9880d681SAndroid Build Coastguard Worker}
614*9880d681SAndroid Build Coastguard Worker
615*9880d681SAndroid Build Coastguard Workerdefine i8 @extract_v32i8(<32 x i8> %x, i8* %dst) {
616*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v32i8:
617*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
618*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrb $1, %xmm0, %eax
619*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
620*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrb $1, %xmm0, (%rdi)
621*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
622*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
623*9880d681SAndroid Build Coastguard Worker;
624*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v32i8:
625*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
626*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrb $1, %xmm0, %eax
627*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %ymm0, %xmm0
628*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrb $1, %xmm0, (%rdi)
629*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
630*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
631*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <32 x i8> %x, i32 1
632*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <32 x i8> %x, i32 17
633*9880d681SAndroid Build Coastguard Worker  store i8 %r2, i8* %dst, align 1
634*9880d681SAndroid Build Coastguard Worker  ret i8 %r1
635*9880d681SAndroid Build Coastguard Worker}
636*9880d681SAndroid Build Coastguard Worker
637*9880d681SAndroid Build Coastguard Workerdefine i8 @extract_v16i8(<16 x i8> %x, i8* %dst) {
638*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: extract_v16i8:
639*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
640*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrb $1, %xmm0, %eax
641*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpextrb $3, %xmm0, (%rdi)
642*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
643*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
644*9880d681SAndroid Build Coastguard Worker;
645*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: extract_v16i8:
646*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
647*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrb $1, %xmm0, %eax
648*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpextrb $3, %xmm0, (%rdi)
649*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
650*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
651*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <16 x i8> %x, i32 1
652*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <16 x i8> %x, i32 3
653*9880d681SAndroid Build Coastguard Worker  store i8 %r2, i8* %dst, align 1
654*9880d681SAndroid Build Coastguard Worker  ret i8 %r1
655*9880d681SAndroid Build Coastguard Worker}
656*9880d681SAndroid Build Coastguard Worker
657*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @insert_v8i64(<8 x i64> %x, i64 %y , i64* %ptr) {
658*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v8i64:
659*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
660*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrq $1, (%rsi), %xmm0, %xmm1
661*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti32x4 $0, %xmm1, %zmm0, %zmm0
662*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti32x4 $1, %zmm0, %xmm1
663*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrq $1, %rdi, %xmm1, %xmm1
664*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti32x4 $1, %xmm1, %zmm0, %zmm0
665*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
666*9880d681SAndroid Build Coastguard Worker;
667*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v8i64:
668*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
669*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrq $1, (%rsi), %xmm0, %xmm1
670*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti64x2 $0, %xmm1, %zmm0, %zmm0
671*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti64x2 $1, %zmm0, %xmm1
672*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrq $1, %rdi, %xmm1, %xmm1
673*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti64x2 $1, %xmm1, %zmm0, %zmm0
674*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
675*9880d681SAndroid Build Coastguard Worker  %val = load i64, i64* %ptr
676*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <8 x i64> %x, i64 %val, i32 1
677*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <8 x i64> %r1, i64 %y, i32 3
678*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %r2
679*9880d681SAndroid Build Coastguard Worker}
680*9880d681SAndroid Build Coastguard Worker
681*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @insert_v4i64(<4 x i64> %x, i64 %y , i64* %ptr) {
682*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v4i64:
683*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
684*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrq $1, (%rsi), %xmm0, %xmm1
685*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
686*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm1
687*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrq $1, %rdi, %xmm1, %xmm1
688*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
689*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
690*9880d681SAndroid Build Coastguard Worker;
691*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v4i64:
692*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
693*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrq $1, (%rsi), %xmm0, %xmm1
694*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
695*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti64x2 $1, %ymm0, %xmm1
696*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrq $1, %rdi, %xmm1, %xmm1
697*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti64x2 $1, %xmm1, %ymm0, %ymm0
698*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
699*9880d681SAndroid Build Coastguard Worker  %val = load i64, i64* %ptr
700*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <4 x i64> %x, i64 %val, i32 1
701*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <4 x i64> %r1, i64 %y, i32 3
702*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %r2
703*9880d681SAndroid Build Coastguard Worker}
704*9880d681SAndroid Build Coastguard Worker
705*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_v2i64(<2 x i64> %x, i64 %y , i64* %ptr) {
706*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v2i64:
707*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
708*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrq $1, (%rsi), %xmm0, %xmm0
709*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrq $3, %rdi, %xmm0, %xmm0
710*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
711*9880d681SAndroid Build Coastguard Worker;
712*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v2i64:
713*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
714*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrq $1, (%rsi), %xmm0, %xmm0
715*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrq $3, %rdi, %xmm0, %xmm0
716*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
717*9880d681SAndroid Build Coastguard Worker  %val = load i64, i64* %ptr
718*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <2 x i64> %x, i64 %val, i32 1
719*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <2 x i64> %r1, i64 %y, i32 3
720*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %r2
721*9880d681SAndroid Build Coastguard Worker}
722*9880d681SAndroid Build Coastguard Worker
723*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @insert_v16i32(<16 x i32> %x, i32 %y, i32* %ptr) {
724*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v16i32:
725*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
726*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrd $1, (%rsi), %xmm0, %xmm1
727*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti32x4 $0, %xmm1, %zmm0, %zmm0
728*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti32x4 $1, %zmm0, %xmm1
729*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrd $1, %edi, %xmm1, %xmm1
730*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti32x4 $1, %xmm1, %zmm0, %zmm0
731*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
732*9880d681SAndroid Build Coastguard Worker;
733*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v16i32:
734*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
735*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrd $1, (%rsi), %xmm0, %xmm1
736*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $0, %xmm1, %zmm0, %zmm0
737*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %zmm0, %xmm1
738*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrd $1, %edi, %xmm1, %xmm1
739*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $1, %xmm1, %zmm0, %zmm0
740*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
741*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32* %ptr
742*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <16 x i32> %x, i32 %val, i32 1
743*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <16 x i32> %r1, i32 %y, i32 5
744*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %r2
745*9880d681SAndroid Build Coastguard Worker}
746*9880d681SAndroid Build Coastguard Worker
747*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @insert_v8i32(<8 x i32> %x, i32 %y, i32* %ptr) {
748*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v8i32:
749*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
750*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrd $1, (%rsi), %xmm0, %xmm1
751*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
752*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm1
753*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrd $1, %edi, %xmm1, %xmm1
754*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
755*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
756*9880d681SAndroid Build Coastguard Worker;
757*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v8i32:
758*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
759*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrd $1, (%rsi), %xmm0, %xmm1
760*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
761*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %ymm0, %xmm1
762*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrd $1, %edi, %xmm1, %xmm1
763*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $1, %xmm1, %ymm0, %ymm0
764*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
765*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32* %ptr
766*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <8 x i32> %x, i32 %val, i32 1
767*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <8 x i32> %r1, i32 %y, i32 5
768*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %r2
769*9880d681SAndroid Build Coastguard Worker}
770*9880d681SAndroid Build Coastguard Worker
771*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @insert_v4i32(<4 x i32> %x, i32 %y, i32* %ptr) {
772*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v4i32:
773*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
774*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrd $1, (%rsi), %xmm0, %xmm0
775*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrd $3, %edi, %xmm0, %xmm0
776*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
777*9880d681SAndroid Build Coastguard Worker;
778*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v4i32:
779*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
780*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrd $1, (%rsi), %xmm0, %xmm0
781*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrd $3, %edi, %xmm0, %xmm0
782*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
783*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32* %ptr
784*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <4 x i32> %x, i32 %val, i32 1
785*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <4 x i32> %r1, i32 %y, i32 3
786*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r2
787*9880d681SAndroid Build Coastguard Worker}
788*9880d681SAndroid Build Coastguard Worker
789*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @insert_v32i16(<32 x i16> %x, i16 %y, i16* %ptr) {
790*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v32i16:
791*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
792*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrw $1, (%rsi), %xmm0, %xmm2
793*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
794*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm2
795*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrw $1, %edi, %xmm2, %xmm2
796*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
797*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
798*9880d681SAndroid Build Coastguard Worker;
799*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v32i16:
800*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
801*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrw $1, (%rsi), %xmm0, %xmm1
802*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $0, %xmm1, %zmm0, %zmm0
803*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %zmm0, %xmm1
804*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrw $1, %edi, %xmm1, %xmm1
805*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $1, %xmm1, %zmm0, %zmm0
806*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
807*9880d681SAndroid Build Coastguard Worker  %val = load i16, i16* %ptr
808*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <32 x i16> %x, i16 %val, i32 1
809*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <32 x i16> %r1, i16 %y, i32 9
810*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %r2
811*9880d681SAndroid Build Coastguard Worker}
812*9880d681SAndroid Build Coastguard Worker
813*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @insert_v16i16(<16 x i16> %x, i16 %y, i16* %ptr) {
814*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v16i16:
815*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
816*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrw $1, (%rsi), %xmm0, %xmm1
817*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
818*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm1
819*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrw $1, %edi, %xmm1, %xmm1
820*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
821*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
822*9880d681SAndroid Build Coastguard Worker;
823*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v16i16:
824*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
825*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrw $1, (%rsi), %xmm0, %xmm1
826*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
827*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %ymm0, %xmm1
828*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrw $1, %edi, %xmm1, %xmm1
829*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $1, %xmm1, %ymm0, %ymm0
830*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
831*9880d681SAndroid Build Coastguard Worker  %val = load i16, i16* %ptr
832*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <16 x i16> %x, i16 %val, i32 1
833*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <16 x i16> %r1, i16 %y, i32 9
834*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %r2
835*9880d681SAndroid Build Coastguard Worker}
836*9880d681SAndroid Build Coastguard Worker
837*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @insert_v8i16(<8 x i16> %x, i16 %y, i16* %ptr) {
838*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v8i16:
839*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
840*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrw $1, (%rsi), %xmm0, %xmm0
841*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrw $5, %edi, %xmm0, %xmm0
842*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
843*9880d681SAndroid Build Coastguard Worker;
844*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v8i16:
845*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
846*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrw $1, (%rsi), %xmm0, %xmm0
847*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrw $5, %edi, %xmm0, %xmm0
848*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
849*9880d681SAndroid Build Coastguard Worker  %val = load i16, i16* %ptr
850*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <8 x i16> %x, i16 %val, i32 1
851*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <8 x i16> %r1, i16 %y, i32 5
852*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %r2
853*9880d681SAndroid Build Coastguard Worker}
854*9880d681SAndroid Build Coastguard Worker
855*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @insert_v64i8(<64 x i8> %x, i8 %y, i8* %ptr) {
856*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v64i8:
857*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
858*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $1, (%rsi), %xmm0, %xmm2
859*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
860*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm1, %xmm2
861*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $2, %edi, %xmm2, %xmm2
862*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
863*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
864*9880d681SAndroid Build Coastguard Worker;
865*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v64i8:
866*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
867*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrb $1, (%rsi), %xmm0, %xmm1
868*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $0, %xmm1, %zmm0, %zmm0
869*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $3, %zmm0, %xmm1
870*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrb $2, %edi, %xmm1, %xmm1
871*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $3, %xmm1, %zmm0, %zmm0
872*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
873*9880d681SAndroid Build Coastguard Worker  %val = load i8, i8* %ptr
874*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <64 x i8> %x, i8 %val, i32 1
875*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <64 x i8> %r1, i8 %y, i32 50
876*9880d681SAndroid Build Coastguard Worker  ret <64 x i8> %r2
877*9880d681SAndroid Build Coastguard Worker}
878*9880d681SAndroid Build Coastguard Worker
879*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @insert_v32i8(<32 x i8> %x, i8 %y, i8* %ptr) {
880*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v32i8:
881*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
882*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $1, (%rsi), %xmm0, %xmm1
883*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
884*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm1
885*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $1, %edi, %xmm1, %xmm1
886*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
887*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
888*9880d681SAndroid Build Coastguard Worker;
889*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v32i8:
890*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
891*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrb $1, (%rsi), %xmm0, %xmm1
892*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]
893*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %ymm0, %xmm1
894*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrb $1, %edi, %xmm1, %xmm1
895*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $1, %xmm1, %ymm0, %ymm0
896*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
897*9880d681SAndroid Build Coastguard Worker  %val = load i8, i8* %ptr
898*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <32 x i8> %x, i8 %val, i32 1
899*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <32 x i8> %r1, i8 %y, i32 17
900*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %r2
901*9880d681SAndroid Build Coastguard Worker}
902*9880d681SAndroid Build Coastguard Worker
903*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @insert_v16i8(<16 x i8> %x, i8 %y, i8* %ptr) {
904*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: insert_v16i8:
905*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
906*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $3, (%rsi), %xmm0, %xmm0
907*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $10, %edi, %xmm0, %xmm0
908*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
909*9880d681SAndroid Build Coastguard Worker;
910*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: insert_v16i8:
911*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
912*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrb $3, (%rsi), %xmm0, %xmm0
913*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrb $10, %edi, %xmm0, %xmm0
914*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
915*9880d681SAndroid Build Coastguard Worker  %val = load i8, i8* %ptr
916*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <16 x i8> %x, i8 %val, i32 3
917*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <16 x i8> %r1, i8 %y, i32 10
918*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %r2
919*9880d681SAndroid Build Coastguard Worker}
920*9880d681SAndroid Build Coastguard Worker
921*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test_insert_128_v8i64(<8 x i64> %x, i64 %y) {
922*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v8i64:
923*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
924*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrq $1, %rdi, %xmm0, %xmm1
925*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti32x4 $0, %xmm1, %zmm0, %zmm0
926*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
927*9880d681SAndroid Build Coastguard Worker;
928*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v8i64:
929*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
930*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrq $1, %rdi, %xmm0, %xmm1
931*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti64x2 $0, %xmm1, %zmm0, %zmm0
932*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
933*9880d681SAndroid Build Coastguard Worker  %r = insertelement <8 x i64> %x, i64 %y, i32 1
934*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %r
935*9880d681SAndroid Build Coastguard Worker}
936*9880d681SAndroid Build Coastguard Worker
937*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test_insert_128_v16i32(<16 x i32> %x, i32 %y) {
938*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v16i32:
939*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
940*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrd $1, %edi, %xmm0, %xmm1
941*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti32x4 $0, %xmm1, %zmm0, %zmm0
942*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
943*9880d681SAndroid Build Coastguard Worker;
944*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v16i32:
945*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
946*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrd $1, %edi, %xmm0, %xmm1
947*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $0, %xmm1, %zmm0, %zmm0
948*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
949*9880d681SAndroid Build Coastguard Worker  %r = insertelement <16 x i32> %x, i32 %y, i32 1
950*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %r
951*9880d681SAndroid Build Coastguard Worker}
952*9880d681SAndroid Build Coastguard Worker
953*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @test_insert_128_v8f64(<8 x double> %x, double %y) {
954*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v8f64:
955*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
956*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm0[0],xmm1[0]
957*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertf32x4 $0, %xmm1, %zmm0, %zmm0
958*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
959*9880d681SAndroid Build Coastguard Worker;
960*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v8f64:
961*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
962*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vunpcklpd {{.*#+}} xmm1 = xmm0[0],xmm1[0]
963*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinsertf64x2 $0, %xmm1, %zmm0, %zmm0
964*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
965*9880d681SAndroid Build Coastguard Worker  %r = insertelement <8 x double> %x, double %y, i32 1
966*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %r
967*9880d681SAndroid Build Coastguard Worker}
968*9880d681SAndroid Build Coastguard Worker
969*9880d681SAndroid Build Coastguard Workerdefine <16 x float> @test_insert_128_v16f32(<16 x float> %x, float %y) {
970*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v16f32:
971*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
972*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertps {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[2,3]
973*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertf32x4 $0, %xmm1, %zmm0, %zmm0
974*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
975*9880d681SAndroid Build Coastguard Worker;
976*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v16f32:
977*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
978*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinsertps {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[2,3]
979*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinsertf32x4 $0, %xmm1, %zmm0, %zmm0
980*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
981*9880d681SAndroid Build Coastguard Worker  %r = insertelement <16 x float> %x, float %y, i32 1
982*9880d681SAndroid Build Coastguard Worker  ret <16 x float> %r
983*9880d681SAndroid Build Coastguard Worker}
984*9880d681SAndroid Build Coastguard Worker
985*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_insert_128_v16i16(<16 x i16> %x, i16 %y) {
986*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v16i16:
987*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
988*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm1
989*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrw $2, %edi, %xmm1, %xmm1
990*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
991*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
992*9880d681SAndroid Build Coastguard Worker;
993*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v16i16:
994*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
995*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %ymm0, %xmm1
996*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrw $2, %edi, %xmm1, %xmm1
997*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $1, %xmm1, %ymm0, %ymm0
998*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
999*9880d681SAndroid Build Coastguard Worker  %r = insertelement <16 x i16> %x, i16 %y, i32 10
1000*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %r
1001*9880d681SAndroid Build Coastguard Worker}
1002*9880d681SAndroid Build Coastguard Worker
1003*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_insert_128_v32i8(<32 x i8> %x, i8 %y) {
1004*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test_insert_128_v32i8:
1005*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1006*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm1
1007*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $4, %edi, %xmm1, %xmm1
1008*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1009*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1010*9880d681SAndroid Build Coastguard Worker;
1011*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test_insert_128_v32i8:
1012*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1013*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vextracti32x4 $1, %ymm0, %xmm1
1014*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpinsrb $4, %edi, %xmm1, %xmm1
1015*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vinserti32x4 $1, %xmm1, %ymm0, %ymm0
1016*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1017*9880d681SAndroid Build Coastguard Worker  %r = insertelement <32 x i8> %x, i8 %y, i32 20
1018*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %r
1019*9880d681SAndroid Build Coastguard Worker}
1020