From 3ad040909ae16e8ae2e1f4e43628e1a5de90dd7a Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Mon, 4 Jul 2016 20:41:24 +0000 Subject: [PATCH] [X86][AVX512] Add support for lowering shuffles to VSHUFPD llvm-svn: 274520 --- llvm/lib/Target/X86/X86ISelLowering.cpp | 5 +++++ llvm/test/CodeGen/X86/sse3-avx-addsub.ll | 3 +-- llvm/test/CodeGen/X86/vector-shuffle-512-v8.ll | 8 ++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 149a6bb62b1e..2e30c131cddb 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -11778,6 +11778,11 @@ static SDValue lowerV8F64VectorShuffle(const SDLoc &DL, ArrayRef Mask, lowerVectorShuffleWithUNPCK(DL, MVT::v8f64, Mask, V1, V2, DAG)) return Unpck; + // Check if the blend happens to exactly fit that of SHUFPD. + if (SDValue Op = + lowerVectorShuffleWithSHUFPD(DL, MVT::v8f64, Mask, V1, V2, DAG)) + return Op; + return lowerVectorShuffleWithPERMV(DL, MVT::v8f64, Mask, V1, V2, DAG); } diff --git a/llvm/test/CodeGen/X86/sse3-avx-addsub.ll b/llvm/test/CodeGen/X86/sse3-avx-addsub.ll index c4da546ed77e..ea59232a7ec1 100644 --- a/llvm/test/CodeGen/X86/sse3-avx-addsub.ll +++ b/llvm/test/CodeGen/X86/sse3-avx-addsub.ll @@ -149,8 +149,7 @@ define <8 x double> @test6(<8 x double> %A, <8 x double> %B) { ; AVX512: # BB#0: ; AVX512-NEXT: vaddpd %zmm1, %zmm0, %zmm2 ; AVX512-NEXT: vsubpd %zmm1, %zmm0, %zmm0 -; AVX512-NEXT: vmovdqa64 {{.*#+}} zmm1 = [0,9,2,11,4,13,6,15] -; AVX512-NEXT: vpermt2pd %zmm2, %zmm1, %zmm0 +; AVX512-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[0],zmm2[1],zmm0[2],zmm2[3],zmm0[4],zmm2[5],zmm0[6],zmm2[7] ; AVX512-NEXT: retq %add = fadd <8 x double> %A, %B %sub = fsub <8 x double> %A, %B diff --git a/llvm/test/CodeGen/X86/vector-shuffle-512-v8.ll b/llvm/test/CodeGen/X86/vector-shuffle-512-v8.ll index 6924c8f169a5..d39961d9c427 100644 --- a/llvm/test/CodeGen/X86/vector-shuffle-512-v8.ll +++ b/llvm/test/CodeGen/X86/vector-shuffle-512-v8.ll @@ -217,16 +217,12 @@ define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) { ; ; AVX512F-LABEL: shuffle_v8f64_81a3c5e7: ; AVX512F: # BB#0: -; AVX512F-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,9,2,11,4,13,6,15] -; AVX512F-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1 -; AVX512F-NEXT: vmovaps %zmm1, %zmm0 +; AVX512F-NEXT: vshufpd {{.*#+}} zmm0 = zmm1[0],zmm0[1],zmm1[2],zmm0[3],zmm1[4],zmm0[5],zmm1[6],zmm0[7] ; AVX512F-NEXT: retq ; ; AVX512F-32-LABEL: shuffle_v8f64_81a3c5e7: ; AVX512F-32: # BB#0: -; AVX512F-32-NEXT: vmovdqa64 {{.*#+}} zmm2 = [0,0,9,0,2,0,11,0,4,0,13,0,6,0,15,0] -; AVX512F-32-NEXT: vpermt2pd %zmm0, %zmm2, %zmm1 -; AVX512F-32-NEXT: vmovaps %zmm1, %zmm0 +; AVX512F-32-NEXT: vshufpd {{.*#+}} zmm0 = zmm1[0],zmm0[1],zmm1[2],zmm0[3],zmm1[4],zmm0[5],zmm1[6],zmm0[7] ; AVX512F-32-NEXT: retl %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> ret <8 x double> %shuffle