diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index ccb8e8aa76b3..d9e38b18d86c 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -32414,10 +32414,9 @@ static SDValue combineX86ShuffleChain(ArrayRef Inputs, SDValue Root, (!MaskVT.is256BitVector() || Subtarget.hasAVX2()); // Determine zeroable mask elements. - APInt Zeroable(NumMaskElts, 0); - for (unsigned i = 0; i != NumMaskElts; ++i) - if (isUndefOrZero(Mask[i])) - Zeroable.setBit(i); + APInt KnownUndef, KnownZero; + resolveZeroablesFromTargetShuffle(Mask, KnownUndef, KnownZero); + APInt Zeroable = KnownUndef | KnownZero; if (UnaryShuffle) { // If we are shuffling a X86ISD::VZEXT_LOAD then we can use the load