@@ -4129,6 +4129,62 @@ define <32 x i8> @shuffle_v32i8_56_zz_zz_zz_57_zz_zz_zz_58_zz_zz_zz__zz_59_zz_zz
41294129 ret <32 x i8 > %shuffle
41304130}
41314131
4132+ ; PR121823
4133+ define <32 x i8 > @shuffle_v32i8_01_09_00_03_11_02_05_13_04_07_15_06_17_25_16_19_27_18_21_29_20_23_31_22_zz_zz_zz_zz_zz_zz_zz_zz (<32 x i8 > %a ) {
4134+ ; AVX1-LABEL: shuffle_v32i8_01_09_00_03_11_02_05_13_04_07_15_06_17_25_16_19_27_18_21_29_20_23_31_22_zz_zz_zz_zz_zz_zz_zz_zz:
4135+ ; AVX1: # %bb.0:
4136+ ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
4137+ ; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[1,9,0,3]
4138+ ; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,9,0,3,11,2,5,13,4,7,15,6],zero,zero,zero,zero
4139+ ; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
4140+ ; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[11,2,5,13,4,7,15,6],zero,zero,zero,zero,zero,zero,zero,zero
4141+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
4142+ ; AVX1-NEXT: retq
4143+ ;
4144+ ; AVX2-LABEL: shuffle_v32i8_01_09_00_03_11_02_05_13_04_07_15_06_17_25_16_19_27_18_21_29_20_23_31_22_zz_zz_zz_zz_zz_zz_zz_zz:
4145+ ; AVX2: # %bb.0:
4146+ ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[1,9,0,3,11,2,5,13,4,7,15,6,u,u,u,u,17,25,16,19,27,18,21,29,20,23,31,22,u,u,u,u]
4147+ ; AVX2-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,1,2,4,5,6,0,0]
4148+ ; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
4149+ ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
4150+ ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]
4151+ ; AVX2-NEXT: retq
4152+ ;
4153+ ; AVX512VLBW-LABEL: shuffle_v32i8_01_09_00_03_11_02_05_13_04_07_15_06_17_25_16_19_27_18_21_29_20_23_31_22_zz_zz_zz_zz_zz_zz_zz_zz:
4154+ ; AVX512VLBW: # %bb.0:
4155+ ; AVX512VLBW-NEXT: vpshufb {{.*#+}} ymm1 = ymm0[1,9,0,3,11,2,5,13,4,7,15,6,u,u,u,u,17,25,16,19,27,18,21,29,20,23,31,22,u,u,u,u]
4156+ ; AVX512VLBW-NEXT: vpxor %xmm2, %xmm2, %xmm2
4157+ ; AVX512VLBW-NEXT: vpmovsxbd {{.*#+}} ymm0 = [0,1,2,4,5,6,14,15]
4158+ ; AVX512VLBW-NEXT: vpermi2d %ymm2, %ymm1, %ymm0
4159+ ; AVX512VLBW-NEXT: retq
4160+ ;
4161+ ; AVX512VLVBMI-LABEL: shuffle_v32i8_01_09_00_03_11_02_05_13_04_07_15_06_17_25_16_19_27_18_21_29_20_23_31_22_zz_zz_zz_zz_zz_zz_zz_zz:
4162+ ; AVX512VLVBMI: # %bb.0:
4163+ ; AVX512VLVBMI-NEXT: vpxor %xmm1, %xmm1, %xmm1
4164+ ; AVX512VLVBMI-NEXT: vmovdqa {{.*#+}} ymm2 = [1,9,0,3,11,2,5,13,4,7,15,6,17,25,16,19,27,18,21,29,20,23,31,22,56,57,58,59,60,61,62,63]
4165+ ; AVX512VLVBMI-NEXT: vpermt2b %ymm1, %ymm2, %ymm0
4166+ ; AVX512VLVBMI-NEXT: retq
4167+ ;
4168+ ; XOPAVX1-LABEL: shuffle_v32i8_01_09_00_03_11_02_05_13_04_07_15_06_17_25_16_19_27_18_21_29_20_23_31_22_zz_zz_zz_zz_zz_zz_zz_zz:
4169+ ; XOPAVX1: # %bb.0:
4170+ ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
4171+ ; XOPAVX1-NEXT: vpperm {{.*#+}} xmm0 = xmm0[1,9,0,3,11,2,5,13,4,7,15,6],xmm1[1,9,0,3]
4172+ ; XOPAVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[11,2,5,13,4,7,15,6],zero,zero,zero,zero,zero,zero,zero,zero
4173+ ; XOPAVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
4174+ ; XOPAVX1-NEXT: retq
4175+ ;
4176+ ; XOPAVX2-LABEL: shuffle_v32i8_01_09_00_03_11_02_05_13_04_07_15_06_17_25_16_19_27_18_21_29_20_23_31_22_zz_zz_zz_zz_zz_zz_zz_zz:
4177+ ; XOPAVX2: # %bb.0:
4178+ ; XOPAVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[1,9,0,3,11,2,5,13,4,7,15,6,u,u,u,u,17,25,16,19,27,18,21,29,20,23,31,22,u,u,u,u]
4179+ ; XOPAVX2-NEXT: vpmovsxbd {{.*#+}} ymm1 = [0,1,2,4,5,6,0,0]
4180+ ; XOPAVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0
4181+ ; XOPAVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
4182+ ; XOPAVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]
4183+ ; XOPAVX2-NEXT: retq
4184+ %r = shufflevector <32 x i8 > %a , <32 x i8 > zeroinitializer , <32 x i32 > <i32 1 , i32 9 , i32 0 , i32 3 , i32 11 , i32 2 , i32 5 , i32 13 , i32 4 , i32 7 , i32 15 , i32 6 , i32 17 , i32 25 , i32 16 , i32 19 , i32 27 , i32 18 , i32 21 , i32 29 , i32 20 , i32 23 , i32 31 , i32 22 , i32 32 , i32 32 , i32 32 , i32 32 , i32 48 , i32 48 , i32 48 , i32 48 >
4185+ ret <32 x i8 > %r
4186+ }
4187+
41324188define <32 x i8 > @shuffle_v32i8_47_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14_63_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30 (<32 x i8 > %a , <32 x i8 > %b ) {
41334189; AVX1-LABEL: shuffle_v32i8_47_00_01_02_03_04_05_06_07_08_09_10_11_12_13_14_63_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30:
41344190; AVX1: # %bb.0:
0 commit comments