From f159a3414fc07793cd22bb1326b2e59f12059a29 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Fri, 16 Dec 2016 11:48:51 +0000 Subject: [X86][SSE] Combine shuffles to MOVSS/MOVSD whatever the domain. We already do the same thing in shuffle lowering; but don't do it if we have SSE41 (PBLEND) instead. llvm-svn: 289937 --- llvm/lib/Target/X86/X86ISelLowering.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'llvm/lib') diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 2b496b04f01..1de40c12562 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -26072,17 +26072,17 @@ static bool matchBinaryVectorShuffle(MVT MaskVT, ArrayRef Mask, ShuffleVT = MVT::v4f32; return true; } - if (isTargetShuffleEquivalent(Mask, {0, 3}) && FloatDomain) { - if (Subtarget.hasSSE2()) { - std::swap(V1, V2); - Shuffle = X86ISD::MOVSD; - ShuffleVT = MVT::v2f64; - return true; - } + if (isTargetShuffleEquivalent(Mask, {0, 3}) && Subtarget.hasSSE2() && + (FloatDomain || !Subtarget.hasSSE41())) { + std::swap(V1, V2); + Shuffle = X86ISD::MOVSD; + ShuffleVT = MaskVT; + return true; } - if (isTargetShuffleEquivalent(Mask, {4, 1, 2, 3}) && FloatDomain) { + if (isTargetShuffleEquivalent(Mask, {4, 1, 2, 3}) && + (FloatDomain || !Subtarget.hasSSE41())) { Shuffle = X86ISD::MOVSS; - ShuffleVT = MVT::v4f32; + ShuffleVT = MaskVT; return true; } } -- cgit v1.2.3