@@ -27526,36 +27526,25 @@ static SDValue scalarizeBinOpOfSplats(SDNode *N, SelectionDAG &DAG,
27526
27526
if ((Opcode == ISD::MULHS || Opcode == ISD::MULHU) && !TLI.isTypeLegal(EltVT))
27527
27527
return SDValue();
27528
27528
27529
- SDValue IndexC = DAG.getVectorIdxConstant(Index0, DL);
27530
- SDValue X = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, EltVT, Src0, IndexC);
27531
- SDValue Y = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, EltVT, Src1, IndexC);
27532
- SDValue ScalarBO = DAG.getNode(Opcode, DL, EltVT, X, Y, N->getFlags());
27533
-
27534
27529
// If all lanes but 1 are undefined, no need to splat the scalar result.
27535
27530
// TODO: Keep track of undefs and use that info in the general case.
27536
27531
if (N0.getOpcode() == ISD::BUILD_VECTOR && N0.getOpcode() == N1.getOpcode()) {
27537
27532
// bo (build_vec ..undef, X, undef...), (build_vec ..undef, Y, undef...) -->
27538
- // insert_vector_elt undef, (bo X, Y), index
27539
-
27540
- SmallVector<SDValue, 16> EltsX, EltsY;
27533
+ // build_vec ..undef, (bo X, Y), undef...
27534
+ SmallVector<SDValue, 16> EltsX, EltsY, EltsResult;
27541
27535
DAG.ExtractVectorElements(Src0, EltsX);
27542
27536
DAG.ExtractVectorElements(Src1, EltsY);
27543
27537
27544
- SmallVector<SDValue, 16> EltsResult;
27545
-
27546
- unsigned NonUndefElements = 0;
27547
- for (auto [X, Y] : zip(EltsX, EltsY)) {
27548
- SDValue ScalarBO = DAG.getNode(Opcode, DL, EltVT, X, Y, N->getFlags());
27549
- if (!ScalarBO.isUndef())
27550
- if (NonUndefElements++ > 1)
27551
- break;
27552
- EltsResult.push_back(ScalarBO);
27553
- }
27554
-
27555
- if (NonUndefElements == 1)
27556
- return DAG.getBuildVector(VT, DL, EltsResult);
27538
+ for (auto [X, Y] : zip(EltsX, EltsY))
27539
+ EltsResult.push_back(DAG.getNode(Opcode, DL, EltVT, X, Y, N->getFlags()));
27540
+ return DAG.getBuildVector(VT, DL, EltsResult);
27557
27541
}
27558
27542
27543
+ SDValue IndexC = DAG.getVectorIdxConstant(Index0, DL);
27544
+ SDValue X = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, EltVT, Src0, IndexC);
27545
+ SDValue Y = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, EltVT, Src1, IndexC);
27546
+ SDValue ScalarBO = DAG.getNode(Opcode, DL, EltVT, X, Y, N->getFlags());
27547
+
27559
27548
// bo (splat X, Index), (splat Y, Index) --> splat (bo X, Y), Index
27560
27549
return DAG.getSplat(VT, DL, ScalarBO);
27561
27550
}
0 commit comments