From d698e4446a2d8e683f7fe289b7d31f0780a38407 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Thu, 3 Oct 2019 06:18:45 +0000 Subject: [PATCH] [X86] Add test case for v8i64->v8i8 truncate with avx512 and prefer-vector-width/min-legal-vector-width=256. NFC With vpmovqb, we should be able to do better here until we get AVX512VBMI on Cannonlake/Icelake. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373569 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/min-legal-vector-width.ll | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/CodeGen/X86/min-legal-vector-width.ll b/test/CodeGen/X86/min-legal-vector-width.ll index deb26115140..d0bc67a4485 100644 --- a/test/CodeGen/X86/min-legal-vector-width.ll +++ b/test/CodeGen/X86/min-legal-vector-width.ll @@ -828,6 +828,37 @@ define <16 x i8> @trunc_v16i32_v16i8(<16 x i32>* %x) nounwind "min-legal-vector- ret <16 x i8> %b } +define <8 x i8> @trunc_v8i64_v8i8(<8 x i64>* %x) nounwind "min-legal-vector-width"="256" { +; CHECK-AVX512-LABEL: trunc_v8i64_v8i8: +; CHECK-AVX512: # %bb.0: +; CHECK-AVX512-NEXT: vmovdqa (%rdi), %xmm0 +; CHECK-AVX512-NEXT: vmovdqa 16(%rdi), %xmm1 +; CHECK-AVX512-NEXT: vmovdqa 32(%rdi), %xmm2 +; CHECK-AVX512-NEXT: vmovdqa 48(%rdi), %xmm3 +; CHECK-AVX512-NEXT: vmovdqa {{.*#+}} xmm4 = +; CHECK-AVX512-NEXT: vpshufb %xmm4, %xmm3, %xmm3 +; CHECK-AVX512-NEXT: vpshufb %xmm4, %xmm2, %xmm2 +; CHECK-AVX512-NEXT: vpunpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] +; CHECK-AVX512-NEXT: vmovdqa {{.*#+}} xmm3 = <0,8,u,u,u,u,u,u,u,u,u,u,u,u,u,u> +; CHECK-AVX512-NEXT: vpshufb %xmm3, %xmm1, %xmm1 +; CHECK-AVX512-NEXT: vpshufb %xmm3, %xmm0, %xmm0 +; CHECK-AVX512-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] +; CHECK-AVX512-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2,3] +; CHECK-AVX512-NEXT: retq +; +; CHECK-VBMI-LABEL: trunc_v8i64_v8i8: +; CHECK-VBMI: # %bb.0: +; CHECK-VBMI-NEXT: vmovdqa (%rdi), %ymm1 +; CHECK-VBMI-NEXT: vpbroadcastq {{.*#+}} ymm0 = [4048780183313844224,4048780183313844224,4048780183313844224,4048780183313844224] +; CHECK-VBMI-NEXT: vpermi2b 32(%rdi), %ymm1, %ymm0 +; CHECK-VBMI-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0 +; CHECK-VBMI-NEXT: vzeroupper +; CHECK-VBMI-NEXT: retq + %a = load <8 x i64>, <8 x i64>* %x + %b = trunc <8 x i64> %a to <8 x i8> + ret <8 x i8> %b +} + define <8 x i16> @trunc_v8i64_v8i16(<8 x i64>* %x) nounwind "min-legal-vector-width"="256" { ; CHECK-LABEL: trunc_v8i64_v8i16: ; CHECK: # %bb.0: -- 2.40.0