diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-10-01 15:33:01 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-10-01 15:33:01 +0000 |
| commit | ae17cf20ce6bd2fb9b7660fa124859916ae1c74a (patch) | |
| tree | 54330987fb8ec1d8be491551502b7b17f1bafbc2 /llvm/lib/Target/X86/X86ISelLowering.cpp | |
| parent | ccdd1ff49b2cebd46eb3b3972680cc07abff8a5e (diff) | |
| download | bcm5719-llvm-ae17cf20ce6bd2fb9b7660fa124859916ae1c74a.tar.gz bcm5719-llvm-ae17cf20ce6bd2fb9b7660fa124859916ae1c74a.zip | |
[X86][SSE] Always combine target shuffles to MOVSD/MOVSS
Now we can commute to BLENDPD/BLENDPS on SSE41+ targets if necessary, so simplify the combine matching where we can.
This required me to add a couple of scalar math movsd/moss fold patterns that hadn't been needed in the past.
llvm-svn: 283038
Diffstat (limited to 'llvm/lib/Target/X86/X86ISelLowering.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index a1600230cc9..6c8def1c397 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -25094,8 +25094,7 @@ static bool matchBinaryVectorShuffle(MVT MaskVT, ArrayRef<int> Mask, return true; } if (isTargetShuffleEquivalent(Mask, {0, 3}) && FloatDomain) { - // On SSE41 targets use BLENDPD (its commutable). - if (Subtarget.hasSSE2() && !Subtarget.hasSSE41()) { + if (Subtarget.hasSSE2()) { std::swap(V1, V2); Shuffle = X86ISD::MOVSD; ShuffleVT = MVT::v2f64; @@ -25103,12 +25102,9 @@ static bool matchBinaryVectorShuffle(MVT MaskVT, ArrayRef<int> Mask, } } if (isTargetShuffleEquivalent(Mask, {4, 1, 2, 3}) && FloatDomain) { - // On SSE41 targets use BLENDPS (its commutable). - if (!Subtarget.hasSSE41()) { - Shuffle = X86ISD::MOVSS; - ShuffleVT = MVT::v4f32; - return true; - } + Shuffle = X86ISD::MOVSS; + ShuffleVT = MVT::v4f32; + return true; } if (isTargetShuffleEquivalent(Mask, {0, 0, 1, 1}) && FloatDomain) { V2 = V1; |

