@@ -228,6 +228,56 @@ define void @trunc_v8i64_to_v8i8(<64 x i8>* %L, <8 x i8>* %S) nounwind {
228
228
ret void
229
229
}
230
230
231
+ define <16 x i8 > @trunc_shuffle_v64i8_01_05_09_13_17_21_25_29_33_37_41_45_49_53_57_61 (<64 x i8 > %x ) {
232
+ ; AVX512F-LABEL: trunc_shuffle_v64i8_01_05_09_13_17_21_25_29_33_37_41_45_49_53_57_61:
233
+ ; AVX512F: # BB#0:
234
+ ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm2
235
+ ; AVX512F-NEXT: vmovdqa {{.*#+}} xmm3 = <u,u,u,u,1,5,9,13,u,u,u,u,u,u,u,u>
236
+ ; AVX512F-NEXT: vpshufb %xmm3, %xmm2, %xmm2
237
+ ; AVX512F-NEXT: vpshufb %xmm3, %xmm1, %xmm1
238
+ ; AVX512F-NEXT: vpunpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
239
+ ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm2
240
+ ; AVX512F-NEXT: vmovdqa {{.*#+}} xmm3 = <1,5,9,13,u,u,u,u,u,u,u,u,u,u,u,u>
241
+ ; AVX512F-NEXT: vpshufb %xmm3, %xmm2, %xmm2
242
+ ; AVX512F-NEXT: vpshufb %xmm3, %xmm0, %xmm0
243
+ ; AVX512F-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
244
+ ; AVX512F-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
245
+ ; AVX512F-NEXT: vzeroupper
246
+ ; AVX512F-NEXT: retq
247
+ ;
248
+ ; AVX512VL-LABEL: trunc_shuffle_v64i8_01_05_09_13_17_21_25_29_33_37_41_45_49_53_57_61:
249
+ ; AVX512VL: # BB#0:
250
+ ; AVX512VL-NEXT: vextracti128 $1, %ymm1, %xmm2
251
+ ; AVX512VL-NEXT: vmovdqa {{.*#+}} xmm3 = <u,u,u,u,1,5,9,13,u,u,u,u,u,u,u,u>
252
+ ; AVX512VL-NEXT: vpshufb %xmm3, %xmm2, %xmm2
253
+ ; AVX512VL-NEXT: vpshufb %xmm3, %xmm1, %xmm1
254
+ ; AVX512VL-NEXT: vpunpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
255
+ ; AVX512VL-NEXT: vextracti128 $1, %ymm0, %xmm2
256
+ ; AVX512VL-NEXT: vmovdqa {{.*#+}} xmm3 = <1,5,9,13,u,u,u,u,u,u,u,u,u,u,u,u>
257
+ ; AVX512VL-NEXT: vpshufb %xmm3, %xmm2, %xmm2
258
+ ; AVX512VL-NEXT: vpshufb %xmm3, %xmm0, %xmm0
259
+ ; AVX512VL-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
260
+ ; AVX512VL-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]
261
+ ; AVX512VL-NEXT: vzeroupper
262
+ ; AVX512VL-NEXT: retq
263
+ ;
264
+ ; AVX512BW-LABEL: trunc_shuffle_v64i8_01_05_09_13_17_21_25_29_33_37_41_45_49_53_57_61:
265
+ ; AVX512BW: # BB#0:
266
+ ; AVX512BW-NEXT: vpsrlw $8, %zmm0, %zmm0
267
+ ; AVX512BW-NEXT: vpmovdb %zmm0, %xmm0
268
+ ; AVX512BW-NEXT: vzeroupper
269
+ ; AVX512BW-NEXT: retq
270
+ ;
271
+ ; AVX512BWVL-LABEL: trunc_shuffle_v64i8_01_05_09_13_17_21_25_29_33_37_41_45_49_53_57_61:
272
+ ; AVX512BWVL: # BB#0:
273
+ ; AVX512BWVL-NEXT: vpsrlw $8, %zmm0, %zmm0
274
+ ; AVX512BWVL-NEXT: vpmovdb %zmm0, %xmm0
275
+ ; AVX512BWVL-NEXT: vzeroupper
276
+ ; AVX512BWVL-NEXT: retq
277
+ %res = shufflevector <64 x i8 > %x , <64 x i8 > %x , <16 x i32 > <i32 1 , i32 5 , i32 9 , i32 13 , i32 17 , i32 21 , i32 25 , i32 29 , i32 33 , i32 37 , i32 41 , i32 45 , i32 49 , i32 53 , i32 57 , i32 61 >
278
+ ret <16 x i8 > %res
279
+ }
280
+
231
281
define <16 x i8 > @trunc_shuffle_v64i8_01_05_09_13_17_21_25_29_33_37_41_45_49_53_57_62 (<64 x i8 > %x ) {
232
282
; AVX512F-LABEL: trunc_shuffle_v64i8_01_05_09_13_17_21_25_29_33_37_41_45_49_53_57_62:
233
283
; AVX512F: # BB#0:
0 commit comments