@@ -22750,7 +22750,7 @@ SDValue DAGCombiner::scalarizeExtractedVectorLoad(SDNode *EVE, EVT InVecVT,
2275022750/// Transform a vector binary operation into a scalar binary operation by moving
2275122751/// the math/logic after an extract element of a vector.
2275222752static SDValue scalarizeExtractedBinOp(SDNode *ExtElt, SelectionDAG &DAG,
22753- const SDLoc &DL) {
22753+ const SDLoc &DL, bool LegalTypes ) {
2275422754 const TargetLowering &TLI = DAG.getTargetLoweringInfo();
2275522755 SDValue Vec = ExtElt->getOperand(0);
2275622756 SDValue Index = ExtElt->getOperand(1);
@@ -22761,7 +22761,8 @@ static SDValue scalarizeExtractedBinOp(SDNode *ExtElt, SelectionDAG &DAG,
2276122761 return SDValue();
2276222762
2276322763 EVT ResVT = ExtElt->getValueType(0);
22764- if (Opc == ISD::SETCC && ResVT != Vec.getValueType().getVectorElementType())
22764+ if (Opc == ISD::SETCC &&
22765+ (ResVT != Vec.getValueType().getVectorElementType() || LegalTypes))
2276522766 return SDValue();
2276622767
2276722768 // Targets may want to avoid this to prevent an expensive register transfer.
@@ -23024,7 +23025,7 @@ SDValue DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) {
2302423025 }
2302523026 }
2302623027
23027- if (SDValue BO = scalarizeExtractedBinOp(N, DAG, DL))
23028+ if (SDValue BO = scalarizeExtractedBinOp(N, DAG, DL, LegalTypes ))
2302823029 return BO;
2302923030
2303023031 if (VecVT.isScalableVector())
0 commit comments