@@ -5187,6 +5187,75 @@ define <4 x i64> @PR66150(ptr %b) {
5187
5187
ret <4 x i64 > %tmp6
5188
5188
}
5189
5189
5190
+ define <64 x i8 > @PR103564 (<32 x i8 > %a0 , <32 x i8 > %a1 ) {
5191
+ ; AVX1-LABEL: PR103564:
5192
+ ; AVX1: # %bb.0:
5193
+ ; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
5194
+ ; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm3 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
5195
+ ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
5196
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
5197
+ ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
5198
+ ; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
5199
+ ; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
5200
+ ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm1
5201
+ ; AVX1-NEXT: vmovaps %ymm2, %ymm0
5202
+ ; AVX1-NEXT: retq
5203
+ ;
5204
+ ; AVX2-LABEL: PR103564:
5205
+ ; AVX2: # %bb.0:
5206
+ ; AVX2-NEXT: vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
5207
+ ; AVX2-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
5208
+ ; AVX2-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm1[0,1],ymm2[0,1]
5209
+ ; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm1[2,3],ymm2[2,3]
5210
+ ; AVX2-NEXT: retq
5211
+ ;
5212
+ ; AVX512VLBW-LABEL: PR103564:
5213
+ ; AVX512VLBW: # %bb.0:
5214
+ ; AVX512VLBW-NEXT: vextracti128 $1, %ymm1, %xmm2
5215
+ ; AVX512VLBW-NEXT: vextracti128 $1, %ymm0, %xmm3
5216
+ ; AVX512VLBW-NEXT: vpunpckhbw {{.*#+}} xmm4 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
5217
+ ; AVX512VLBW-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
5218
+ ; AVX512VLBW-NEXT: vinserti128 $1, %xmm4, %ymm2, %ymm2
5219
+ ; AVX512VLBW-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
5220
+ ; AVX512VLBW-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
5221
+ ; AVX512VLBW-NEXT: vinserti128 $1, %xmm3, %ymm0, %ymm0
5222
+ ; AVX512VLBW-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5223
+ ; AVX512VLBW-NEXT: retq
5224
+ ;
5225
+ ; AVX512VLVBMI-LABEL: PR103564:
5226
+ ; AVX512VLVBMI: # %bb.0:
5227
+ ; AVX512VLVBMI-NEXT: # kill: def $ymm1 killed $ymm1 def $zmm1
5228
+ ; AVX512VLVBMI-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm0
5229
+ ; AVX512VLVBMI-NEXT: vinserti64x4 $1, %ymm1, %zmm1, %zmm1
5230
+ ; AVX512VLVBMI-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm2
5231
+ ; AVX512VLVBMI-NEXT: vmovdqa64 {{.*#+}} zmm0 = [0,64,1,65,2,66,3,67,4,68,5,69,6,70,7,71,8,72,9,73,10,74,11,75,12,76,13,77,14,78,15,79,48,112,49,113,50,114,51,115,52,116,53,117,54,118,55,119,56,120,57,121,58,122,59,123,60,124,61,125,62,126,63,127]
5232
+ ; AVX512VLVBMI-NEXT: vpermi2b %zmm1, %zmm2, %zmm0
5233
+ ; AVX512VLVBMI-NEXT: retq
5234
+ ;
5235
+ ; XOPAVX1-LABEL: PR103564:
5236
+ ; XOPAVX1: # %bb.0:
5237
+ ; XOPAVX1-NEXT: vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
5238
+ ; XOPAVX1-NEXT: vpunpcklbw {{.*#+}} xmm3 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
5239
+ ; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
5240
+ ; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
5241
+ ; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
5242
+ ; XOPAVX1-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
5243
+ ; XOPAVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
5244
+ ; XOPAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm1
5245
+ ; XOPAVX1-NEXT: vmovaps %ymm2, %ymm0
5246
+ ; XOPAVX1-NEXT: retq
5247
+ ;
5248
+ ; XOPAVX2-LABEL: PR103564:
5249
+ ; XOPAVX2: # %bb.0:
5250
+ ; XOPAVX2-NEXT: vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
5251
+ ; XOPAVX2-NEXT: vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
5252
+ ; XOPAVX2-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm1[0,1],ymm2[0,1]
5253
+ ; XOPAVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm1[2,3],ymm2[2,3]
5254
+ ; XOPAVX2-NEXT: retq
5255
+ %r = shufflevector <32 x i8 > %a0 , <32 x i8 > %a1 , <64 x i32 > <i32 0 , i32 32 , i32 1 , i32 33 , i32 2 , i32 34 , i32 3 , i32 35 , i32 4 , i32 36 , i32 5 , i32 37 , i32 6 , i32 38 , i32 7 , i32 39 , i32 8 , i32 40 , i32 9 , i32 41 , i32 10 , i32 42 , i32 11 , i32 43 , i32 12 , i32 44 , i32 13 , i32 45 , i32 14 , i32 46 , i32 15 , i32 47 , i32 16 , i32 48 , i32 17 , i32 49 , i32 18 , i32 50 , i32 19 , i32 51 , i32 20 , i32 52 , i32 21 , i32 53 , i32 22 , i32 54 , i32 23 , i32 55 , i32 24 , i32 56 , i32 25 , i32 57 , i32 26 , i32 58 , i32 27 , i32 59 , i32 28 , i32 60 , i32 29 , i32 61 , i32 30 , i32 62 , i32 31 , i32 63 >
5256
+ ret <64 x i8 > %r
5257
+ }
5258
+
5190
5259
define <32 x i8 > @insert_dup_mem_v32i8_i32 (ptr %ptr ) {
5191
5260
; AVX1-LABEL: insert_dup_mem_v32i8_i32:
5192
5261
; AVX1: # %bb.0:
0 commit comments