Index: llvm/lib/Target/X86/X86ISelLowering.cpp =================================================================== --- llvm/lib/Target/X86/X86ISelLowering.cpp +++ llvm/lib/Target/X86/X86ISelLowering.cpp @@ -36843,6 +36843,7 @@ MVT SrcVT = Src.getSimpleValueType(); if (!SrcVT.isVector()) return false; + int SrcNumElts = SrcVT.getVectorNumElements(); // Don't bother broadcasting if we just need the 0'th element. if (DemandedElts == 1) { if (Src.getValueType() != VT) @@ -36851,7 +36852,12 @@ return TLO.CombineTo(Op, Src); } APInt SrcUndef, SrcZero; - APInt SrcElts = APInt::getOneBitSet(SrcVT.getVectorNumElements(), 0); + APInt SrcElts(SrcNumElts, 0); + for (int Idx = 0; Idx < NumElts; Idx++) { + if (!DemandedElts[Idx]) + continue; + SrcElts.setBit(Idx % SrcNumElts); + } if (SimplifyDemandedVectorElts(Src, SrcElts, SrcUndef, SrcZero, TLO, Depth + 1)) return true;