[llvm] r344931 - [X86][SSE] getTargetShuffleMaskIndices - allow opt-in support for whole undef shuffle mask elements
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 22 11:09:02 PDT 2018
Author: rksimon
Date: Mon Oct 22 11:09:02 2018
New Revision: 344931
URL: http://llvm.org/viewvc/llvm-project?rev=344931&view=rev
Log:
[X86][SSE] getTargetShuffleMaskIndices - allow opt-in support for whole undef shuffle mask elements
Enable this for PSHUFB constant mask decoding and remove the ConstantPool DecodePSHUFBMask
Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=344931&r1=344930&r2=344931&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Mon Oct 22 11:09:02 2018
@@ -5839,20 +5839,23 @@ static bool isConstantSplat(SDValue Op,
static bool getTargetShuffleMaskIndices(SDValue MaskNode,
unsigned MaskEltSizeInBits,
- SmallVectorImpl<uint64_t> &RawMask) {
+ SmallVectorImpl<uint64_t> &RawMask,
+ bool AllowWholeUndefs = false) {
APInt UndefElts;
SmallVector<APInt, 64> EltBits;
// Extract the raw target constant bits.
- // FIXME: We currently don't support UNDEF bits or mask entries.
if (!getTargetConstantBitsFromNode(MaskNode, MaskEltSizeInBits, UndefElts,
- EltBits, /* AllowWholeUndefs */ false,
+ EltBits, AllowWholeUndefs,
/* AllowPartialUndefs */ false))
return false;
// Insert the extracted elements into the mask.
- for (APInt Elt : EltBits)
- RawMask.push_back(Elt.getZExtValue());
+ for (int i = 0, e = EltBits.size(); i != e; ++i) {
+ uint64_t M = AllowWholeUndefs && UndefElts[i] ? SM_SentinelUndef
+ : EltBits[i].getZExtValue();
+ RawMask.push_back(M);
+ }
return true;
}
@@ -6057,14 +6060,10 @@ static bool getTargetShuffleMask(SDNode
IsUnary = true;
SDValue MaskNode = N->getOperand(1);
SmallVector<uint64_t, 32> RawMask;
- if (getTargetShuffleMaskIndices(MaskNode, 8, RawMask)) {
+ if (getTargetShuffleMaskIndices(MaskNode, 8, RawMask, true)) {
DecodePSHUFBMask(RawMask, Mask);
break;
}
- if (auto *C = getTargetConstantFromNode(MaskNode)) {
- DecodePSHUFBMask(C, Mask);
- break;
- }
return false;
}
case X86ISD::VPERMI:
More information about the llvm-commits
mailing list