diff --git a/llvm/test/CodeGen/X86/avx512-skx-insert-subvec.ll b/llvm/test/CodeGen/X86/avx512-skx-insert-subvec.ll index 5ed2ef5fa50d..76c983e6708c 100644 --- a/llvm/test/CodeGen/X86/avx512-skx-insert-subvec.ll +++ b/llvm/test/CodeGen/X86/avx512-skx-insert-subvec.ll @@ -199,3 +199,21 @@ define <64 x i1> @test14(<2 x i1> %a) { %res = shufflevector <2 x i1> %a, <2 x i1> zeroinitializer, <64 x i32> ret <64 x i1> %res } + +; Make sure we can recognize this shuffle as an insertion in to a zero vector. +define i8 @test15(<2 x i64> %x) { +; CHECK-LABEL: test15: +; CHECK: # %bb.0: +; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k0 +; CHECK-NEXT: vpmovm2d %k0, %ymm0 +; CHECK-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero +; CHECK-NEXT: vpmovd2m %ymm0, %k0 +; CHECK-NEXT: kmovd %k0, %eax +; CHECK-NEXT: # kill: def $al killed $al killed $eax +; CHECK-NEXT: vzeroupper +; CHECK-NEXT: retq + %a = icmp eq <2 x i64> %x, zeroinitializer + %b = shufflevector <2 x i1> %a, <2 x i1> , <8 x i32> + %c = bitcast <8 x i1> %b to i8 + ret i8 %c +}