summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86ISelLowering.cpp
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2016-10-01 15:33:01 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2016-10-01 15:33:01 +0000
commitae17cf20ce6bd2fb9b7660fa124859916ae1c74a (patch)
tree54330987fb8ec1d8be491551502b7b17f1bafbc2 /llvm/lib/Target/X86/X86ISelLowering.cpp
parentccdd1ff49b2cebd46eb3b3972680cc07abff8a5e (diff)
downloadbcm5719-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.cpp12
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;
OpenPOWER on IntegriCloud