diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index a33bf07cd72..de556ed8433 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -7525,21 +7525,26 @@ static SDValue EltsFromConsecutiveLoads(EVT VT, ArrayRef<SDValue> Elts, SDValue Elt = peekThroughBitcasts(Elts[i]); if (!Elt.getNode()) return SDValue(); - - if (Elt.isUndef()) + if (Elt.isUndef()) { UndefMask.setBit(i); - else if (X86::isZeroNode(Elt) || ISD::isBuildVectorAllZeros(Elt.getNode())) + continue; + } + if (X86::isZeroNode(Elt) || ISD::isBuildVectorAllZeros(Elt.getNode())) { ZeroMask.setBit(i); - else if (ISD::isNON_EXTLoad(Elt.getNode())) { - Loads[i] = cast<LoadSDNode>(Elt); - LoadMask.setBit(i); - LastLoadedElt = i; - // Each loaded element must be the correct fractional portion of the - // requested vector load. - if ((NumElems * Elt.getValueSizeInBits()) != VT.getSizeInBits()) - return SDValue(); - } else + continue; + } + + // Each loaded element must be the correct fractional portion of the + // requested vector load. + if ((NumElems * Elt.getValueSizeInBits()) != VT.getSizeInBits()) return SDValue(); + + if (!ISD::isNON_EXTLoad(Elt.getNode())) + return SDValue(); + + Loads[i] = cast<LoadSDNode>(Elt); + LoadMask.setBit(i); + LastLoadedElt = i; } assert((ZeroMask.countPopulation() + UndefMask.countPopulation() + LoadMask.countPopulation()) == NumElems && |

