summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86ISelLowering.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/X86/X86ISelLowering.cpp')
-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 52ad6504760..0ad988d69da 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -5940,6 +5940,17 @@ static bool getFauxShuffleMask(SDValue N, SmallVectorImpl<int> &Mask,
unsigned Opcode = N.getOpcode();
switch (Opcode) {
+ case ISD::VECTOR_SHUFFLE: {
+ // Don't treat ISD::VECTOR_SHUFFLE as a target shuffle so decode it here.
+ ArrayRef<int> ShuffleMask = cast<ShuffleVectorSDNode>(N)->getMask();
+ if (isUndefOrInRange(ShuffleMask, 0, 2 * NumElts)) {
+ Mask.append(ShuffleMask.begin(), ShuffleMask.end());
+ Ops.push_back(N.getOperand(0));
+ Ops.push_back(N.getOperand(1));
+ return true;
+ }
+ return false;
+ }
case ISD::AND:
case X86ISD::ANDNP: {
// Attempt to decode as a per-byte mask.
OpenPOWER on IntegriCloud