From 6e6da3f449ae631cd1812ec045a44c6015c0fcdb Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Thu, 11 Jan 2018 14:25:18 +0000 Subject: [X86][SSE] Add ISD::VECTOR_SHUFFLE to faux shuffle decoding Primarily, this allows us to use the aggressive extraction mechanisms in combineExtractWithShuffle earlier and make use of UNDEF elements that may be lost during lowering. llvm-svn: 322279 --- llvm/lib/Target/X86/X86ISelLowering.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'llvm/lib') 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 &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 ShuffleMask = cast(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. -- cgit v1.2.3