diff options
Diffstat (limited to 'llvm/lib/Target/X86/X86ISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index de26ce2..e03edf9 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -56041,18 +56041,19 @@ static SDValue combineConcatVectorOps(const SDLoc &DL, MVT VT, }; auto IsConcatFree = [](MVT VT, ArrayRef<SDValue> SubOps, unsigned Op) { bool AllConstants = true; - bool AllSubVectors = true; + bool AllSubs = true; + unsigned VecSize = VT.getSizeInBits(); for (unsigned I = 0, E = SubOps.size(); I != E; ++I) { - SDValue Sub = SubOps[I].getOperand(Op); - unsigned NumSubElts = Sub.getValueType().getVectorNumElements(); - SDValue BC = peekThroughBitcasts(Sub); + SDValue BC = peekThroughBitcasts(SubOps[I].getOperand(Op)); + unsigned SubSize = BC.getValueSizeInBits(); + unsigned EltSize = BC.getScalarValueSizeInBits(); AllConstants &= ISD::isBuildVectorOfConstantSDNodes(BC.getNode()) || ISD::isBuildVectorOfConstantFPSDNodes(BC.getNode()); - AllSubVectors &= Sub.getOpcode() == ISD::EXTRACT_SUBVECTOR && - Sub.getOperand(0).getValueType() == VT && - Sub.getConstantOperandAPInt(1) == (I * NumSubElts); + AllSubs &= BC.getOpcode() == ISD::EXTRACT_SUBVECTOR && + BC.getOperand(0).getValueSizeInBits() == VecSize && + (BC.getConstantOperandVal(1) * EltSize) == (I * SubSize); } - return AllConstants || AllSubVectors; + return AllConstants || AllSubs; }; switch (Op0.getOpcode()) { |