[llvm] r256921 - [X86][SSE] An empty target shuffle mask is always a failure.
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 6 00:59:33 PST 2016
Author: rksimon
Date: Wed Jan 6 02:59:32 2016
New Revision: 256921
URL: http://llvm.org/viewvc/llvm-project?rev=256921&view=rev
Log:
[X86][SSE] An empty target shuffle mask is always a failure.
As discussed on D15378, move the mask.empty() tests to after the switch statement and consider any shuffle decode where the extracted target shuffle mask is empty as a failure.
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=256921&r1=256920&r2=256921&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Jan 6 02:59:32 2016
@@ -4853,8 +4853,6 @@ static bool getTargetShuffleMask(SDNode
if (auto *C = dyn_cast<Constant>(MaskCP->getConstVal())) {
DecodePSHUFBMask(C, Mask);
- if (Mask.empty())
- return false;
break;
}
@@ -4872,7 +4870,6 @@ static bool getTargetShuffleMask(SDNode
case X86ISD::VPERM2X128:
ImmN = N->getOperand(N->getNumOperands()-1);
DecodeVPERM2X128Mask(VT, cast<ConstantSDNode>(ImmN)->getZExtValue(), Mask);
- if (Mask.empty()) return false;
// Mask only contains negative index if an element is zero.
if (std::any_of(Mask.begin(), Mask.end(),
[](int M){ return M == SM_SentinelZero; }))
@@ -4950,8 +4947,6 @@ static bool getTargetShuffleMask(SDNode
if (auto *C = dyn_cast<Constant>(MaskCP->getConstVal())) {
DecodeVPERMVMask(C, VT, Mask);
- if (Mask.empty())
- return false;
break;
}
return false;
@@ -5002,8 +4997,6 @@ static bool getTargetShuffleMask(SDNode
if (auto *C = dyn_cast<Constant>(MaskCP->getConstVal())) {
DecodeVPERMV3Mask(C, VT, Mask);
- if (Mask.empty())
- return false;
break;
}
return false;
@@ -5011,6 +5004,10 @@ static bool getTargetShuffleMask(SDNode
default: llvm_unreachable("unknown target shuffle node");
}
+ // Empty mask indicates the decode failed.
+ if (Mask.empty())
+ return false;
+
// If we have a fake unary shuffle, the shuffle mask is spread across two
// inputs that are actually the same node. Re-map the mask to always point
// into the first input.
More information about the llvm-commits
mailing list