From: Craig Topper Date: Mon, 19 Aug 2019 00:39:18 +0000 (+0000) Subject: [X86] Add test case for missed opportunity to recognize a vXi1 shuffle as an insert... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1bf17233759878ccdef80939233d432f356410e6;p=llvm [X86] Add test case for missed opportunity to recognize a vXi1 shuffle as an insert into a zero vector. We are currently missing this because shuffle canonicalization puts the zero vector as V1 and the subvector as V2. Our current code doesn't recognize this case. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369225 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/X86/avx512-skx-insert-subvec.ll b/test/CodeGen/X86/avx512-skx-insert-subvec.ll index 5ed2ef5fa50..76c983e6708 100644 --- a/test/CodeGen/X86/avx512-skx-insert-subvec.ll +++ b/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 +}