diff --git a/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512vbmi.ll b/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512vbmi.ll index ccc78823623d..1301fcb0cd0b 100644 --- a/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512vbmi.ll +++ b/llvm/test/CodeGen/X86/vector-shuffle-combining-avx512vbmi.ll @@ -158,3 +158,22 @@ define <64 x i8> @combine_vpermi2var_v64i8_with_mask(<64 x i8> %a0, <64 x i8> %a %sel = select <64 x i1> %cmp, <64 x i8> zeroinitializer, <64 x i8> %perm ret <64 x i8> %sel } + +define <32 x i8> @concat_vpermt2var_v16i8(<32 x i8> %x0, <32 x i8> %x1) { +; CHECK-LABEL: concat_vpermt2var_v16i8: +; CHECK: # %bb.0: +; CHECK-NEXT: vmovdqa {{.*#+}} xmm2 = [0,17,2,18,4,19,6,21,8,23,10,25,12,27,14,29] +; CHECK-NEXT: vpermi2b %xmm1, %xmm0, %xmm2 +; CHECK-NEXT: vmovdqa {{.*#+}} xmm3 = [16,49,18,50,20,51,22,53,24,55,26,57,28,59,30,61] +; CHECK-NEXT: vpermi2b %ymm1, %ymm0, %ymm3 +; CHECK-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm0 +; CHECK-NEXT: ret{{[l|q]}} + %l0 = shufflevector <32 x i8> %x0, <32 x i8> poison, <16 x i32> + %l1 = shufflevector <32 x i8> %x1, <32 x i8> poison, <16 x i32> + %h0 = shufflevector <32 x i8> %x0, <32 x i8> poison, <16 x i32> + %h1 = shufflevector <32 x i8> %x1, <32 x i8> poison, <16 x i32> + %v0 = call <16 x i8> @llvm.x86.avx512.maskz.vpermt2var.qi.128(<16 x i8> , <16 x i8> %l0, <16 x i8> %l1, i16 -1) + %v1 = call <16 x i8> @llvm.x86.avx512.maskz.vpermt2var.qi.128(<16 x i8> , <16 x i8> %h0, <16 x i8> %h1, i16 -1) + %res = shufflevector <16 x i8> %v0, <16 x i8> %v1, <32 x i32> + ret <32 x i8> %res +}