From 6eabd3b1528ed28c2c2a9cea3a98db6cfbb0d918 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Sun, 18 Aug 2019 23:30:07 +0000 Subject: [PATCH] [X86] Add test cases for suboptimal insertion of a vXi1 vector into a larger vector with zeros in the lower elements and undef upper elements. Currently we generate kshifts to clear both the upper and lower elements, but we only need one kshift. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369223 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/avx512-skx-insert-subvec.ll | 39 ++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/test/CodeGen/X86/avx512-skx-insert-subvec.ll b/test/CodeGen/X86/avx512-skx-insert-subvec.ll index 5338eb3c3a1..bd0057e0d82 100644 --- a/test/CodeGen/X86/avx512-skx-insert-subvec.ll +++ b/test/CodeGen/X86/avx512-skx-insert-subvec.ll @@ -163,3 +163,42 @@ define <8 x i1> @test11(<4 x i1> %a, <4 x i1>%b) { %res = shufflevector <4 x i1> %a, <4 x i1> undef, <8 x i32> ret <8 x i1> %res } + +define <16 x i1> @test12(<2 x i1> %a) { +; CHECK-LABEL: test12: +; CHECK: # %bb.0: +; CHECK-NEXT: vpsllq $63, %xmm0, %xmm0 +; CHECK-NEXT: vpmovq2m %xmm0, %k0 +; CHECK-NEXT: kshiftlw $14, %k0, %k0 +; CHECK-NEXT: kshiftrw $4, %k0, %k0 +; CHECK-NEXT: vpmovm2b %k0, %xmm0 +; CHECK-NEXT: retq + %res = shufflevector <2 x i1> %a, <2 x i1> zeroinitializer, <16 x i32> + ret <16 x i1> %res +} + +define <32 x i1> @test13(<2 x i1> %a) { +; CHECK-LABEL: test13: +; CHECK: # %bb.0: +; CHECK-NEXT: vpsllq $63, %xmm0, %xmm0 +; CHECK-NEXT: vpmovq2m %xmm0, %k0 +; CHECK-NEXT: kshiftld $30, %k0, %k0 +; CHECK-NEXT: kshiftrd $20, %k0, %k0 +; CHECK-NEXT: vpmovm2b %k0, %ymm0 +; CHECK-NEXT: retq + %res = shufflevector <2 x i1> %a, <2 x i1> zeroinitializer, <32 x i32> + ret <32 x i1> %res +} + +define <64 x i1> @test14(<2 x i1> %a) { +; CHECK-LABEL: test14: +; CHECK: # %bb.0: +; CHECK-NEXT: vpsllq $63, %xmm0, %xmm0 +; CHECK-NEXT: vpmovq2m %xmm0, %k0 +; CHECK-NEXT: kshiftlq $62, %k0, %k0 +; CHECK-NEXT: kshiftrq $52, %k0, %k0 +; CHECK-NEXT: vpmovm2b %k0, %zmm0 +; CHECK-NEXT: retq + %res = shufflevector <2 x i1> %a, <2 x i1> zeroinitializer, <64 x i32> + ret <64 x i1> %res +} -- 2.49.0