diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index a1e37975b7a..4a2eba05aee 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -34214,15 +34214,15 @@ static SDValue combineTruncateWithSat(SDValue In, EVT VT, const SDLoc &DL, const X86Subtarget &Subtarget) { EVT InVT = In.getValueType(); const TargetLowering &TLI = DAG.getTargetLoweringInfo(); - if (!TLI.isTypeLegal(InVT) || !TLI.isTypeLegal(VT)) - return SDValue(); - if (isSATValidOnAVX512Subtarget(InVT, VT, Subtarget)) { + if (TLI.isTypeLegal(InVT) && TLI.isTypeLegal(VT) && + isSATValidOnAVX512Subtarget(InVT, VT, Subtarget)) { if (auto SSatVal = detectSSatPattern(In, VT)) return DAG.getNode(X86ISD::VTRUNCS, DL, VT, SSatVal); if (auto USatVal = detectUSatPattern(In, VT)) return DAG.getNode(X86ISD::VTRUNCUS, DL, VT, USatVal); } - if ((VT.getScalarType() == MVT::i8 && InVT.getScalarType() == MVT::i16) || + if (VT.isVector() && isPowerOf2_32(VT.getVectorNumElements()) && + (VT.getScalarType() == MVT::i8 && InVT.getScalarType() == MVT::i16) || (VT.getScalarType() == MVT::i16 && InVT.getScalarType() == MVT::i32)) { if (auto SSatVal = detectSSatPattern(In, VT)) return truncateVectorWithPACK(X86ISD::PACKSS, VT, SSatVal, DL, DAG, |

