summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2016-06-11 03:27:42 +0000
committerCraig Topper <craig.topper@gmail.com>2016-06-11 03:27:42 +0000
commit40abd1cc61660a292d05a59828d7c0e52a2575dc (patch)
treea1bada4cf0c2db7c0ec8aec4eb6eac4ad1a952b4 /llvm/lib
parentb9b86fcfff63bac596714ed7979599714c436cf5 (diff)
downloadbcm5719-llvm-40abd1cc61660a292d05a59828d7c0e52a2575dc.tar.gz
bcm5719-llvm-40abd1cc61660a292d05a59828d7c0e52a2575dc.zip
[AVX512] Add support for lowering v32i16 shuffles with repeated lanes. This allows us to create 512-bit PSHUFLW/PSHUFHW.
llvm-svn: 272450
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 521008c50ca..b360cb8ccba 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -11827,6 +11827,17 @@ static SDValue lowerV32I16VectorShuffle(SDValue Op, SDValue V1, SDValue V2,
DL, MVT::v32i16, V1, V2, Mask, Subtarget, DAG))
return Rotate;
+ if (isSingleInputShuffleMask(Mask)) {
+ SmallVector<int, 8> RepeatedMask;
+ if (is128BitLaneRepeatedShuffleMask(MVT::v32i16, Mask, RepeatedMask)) {
+ // As this is a single-input shuffle, the repeated mask should be
+ // a strictly valid v8i16 mask that we can pass through to the v8i16
+ // lowering to handle even the v32 case.
+ return lowerV8I16GeneralSingleInputVectorShuffle(
+ DL, MVT::v32i16, V1, RepeatedMask, Subtarget, DAG);
+ }
+ }
+
return lowerVectorShuffleWithPERMV(DL, MVT::v32i16, Mask, V1, V2, DAG);
}
OpenPOWER on IntegriCloud