@@ -58475,12 +58475,13 @@ static SDValue combineConcatVectorOps(const SDLoc &DL, MVT VT,
58475
58475
EVT SrcVT1 = Src1.getOperand(0).getValueType();
58476
58476
unsigned NumSrcElts0 = SrcVT0.getVectorNumElements();
58477
58477
unsigned NumSrcElts1 = SrcVT1.getVectorNumElements();
58478
+ const APInt &SrcIdx0 = Src0.getConstantOperandAPInt(1);
58479
+ const APInt &SrcIdx1 = Src1.getConstantOperandAPInt(1);
58478
58480
// concat(extract_subvector(v0), extract_subvector(v1)) -> vperm2x128.
58479
58481
// Only concat of subvector high halves which vperm2x128 is best at.
58480
58482
if (VT.is256BitVector() && SrcVT0.is256BitVector() &&
58481
- SrcVT1.is256BitVector() &&
58482
- Src0.getConstantOperandAPInt(1) == (NumSrcElts0 / 2) &&
58483
- Src1.getConstantOperandAPInt(1) == (NumSrcElts1 / 2)) {
58483
+ SrcVT1.is256BitVector() && SrcIdx0 == (NumSrcElts0 / 2) &&
58484
+ SrcIdx1 == (NumSrcElts1 / 2)) {
58484
58485
return DAG.getNode(X86ISD::VPERM2X128, DL, VT,
58485
58486
DAG.getBitcast(VT, Src0.getOperand(0)),
58486
58487
DAG.getBitcast(VT, Src1.getOperand(0)),
@@ -58491,10 +58492,8 @@ static SDValue combineConcatVectorOps(const SDLoc &DL, MVT VT,
58491
58492
// --> extract_subvector(x,lo)
58492
58493
unsigned NumSubElts0 = Src0.getValueType().getVectorNumElements();
58493
58494
if (Src0.getOperand(0) == Src1.getOperand(0) &&
58494
- (Src0.getConstantOperandAPInt(1) == 0 ||
58495
- Src0.getConstantOperandAPInt(1) == (NumSrcElts0 / 2)) &&
58496
- Src1.getConstantOperandAPInt(1) ==
58497
- (Src0.getConstantOperandAPInt(1) + NumSubElts0)) {
58495
+ (SrcIdx0 == 0 || SrcIdx0 == (NumSrcElts0 / 2)) &&
58496
+ SrcIdx1 == (SrcIdx0 + NumSubElts0)) {
58498
58497
return DAG.getBitcast(VT,
58499
58498
extractSubVector(Src0.getOperand(0),
58500
58499
Src0.getConstantOperandVal(1),
0 commit comments