From: Elena Demikhovsky Date: Wed, 13 Aug 2014 07:58:43 +0000 (+0000) Subject: AVX-512: Fixed a bug in shufflevector lowering. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=4c97c1420bea552a7e1fa711793279a7801a7033;p=oota-llvm.git AVX-512: Fixed a bug in shufflevector lowering. PALIGNR instruction does not exist in AVX-512F set. Added a test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215526 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 96f01c8b245..98eedb8ec6e 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -3872,7 +3872,8 @@ static bool isAlignrMask(ArrayRef Mask, MVT VT, bool InterLane) { static bool isPALIGNRMask(ArrayRef Mask, MVT VT, const X86Subtarget *Subtarget) { if ((VT.is128BitVector() && !Subtarget->hasSSSE3()) || - (VT.is256BitVector() && !Subtarget->hasInt256())) + (VT.is256BitVector() && !Subtarget->hasInt256()) || + VT.is512BitVector()) // FIXME: Add AVX512BW. return false; diff --git a/test/CodeGen/X86/avx512-shuffle.ll b/test/CodeGen/X86/avx512-shuffle.ll index bae99d97b21..964971e6f62 100644 --- a/test/CodeGen/X86/avx512-shuffle.ll +++ b/test/CodeGen/X86/avx512-shuffle.ll @@ -199,6 +199,24 @@ define <16 x i32> @test15(<16 x i32> %a) { %b = shufflevector <16 x i32> %a, <16 x i32> undef, <16 x i32> ret <16 x i32> %b } + +; CHECK-LABEL: valign_test_v16f32 +; CHECK: valignd $2, %zmm0, %zmm0 +; CHECK: ret +define <16 x float> @valign_test_v16f32(<16 x float> %a, <16 x float> %b) nounwind { + %c = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> + ret <16 x float> %c +} + +; CHECK-LABEL: valign_test_v16i32 +; CHECK: valignd $2, %zmm0, %zmm0 +; CHECK: ret +define <16 x i32> @valign_test_v16i32(<16 x i32> %a, <16 x i32> %b) nounwind { + %c = shufflevector <16 x i32> %a, <16 x i32> %b, <16 x i32> + ret <16 x i32> %c +} + + ; CHECK-LABEL: test16 ; CHECK: valignq $2, %zmm0, %zmm1 ; CHECK: ret