diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86ISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index e19041651be..ea1270e9cc8 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -32257,6 +32257,13 @@ bool X86TargetLowering::SimplifyDemandedVectorEltsForTargetNode( MVT SrcVT = Src.getSimpleValueType(); if (!SrcVT.isVector()) return false; + // Don't bother broadcasting if we just need the 0'th element. + if (DemandedElts == 1) { + if(Src.getValueType() != VT) + Src = widenSubVector(VT.getSimpleVT(), Src, false, Subtarget, TLO.DAG, + SDLoc(Op)); + return TLO.CombineTo(Op, Src); + } APInt SrcUndef, SrcZero; APInt SrcElts = APInt::getOneBitSet(SrcVT.getVectorNumElements(), 0); if (SimplifyDemandedVectorElts(Src, SrcElts, SrcUndef, SrcZero, TLO, |