@@ -29502,16 +29502,23 @@ static SDValue LowerFMINIMUM_FMAXIMUM(SDValue Op, const X86Subtarget &Subtarget,
2950229502 DAG.isKnownNeverNaN(IsNum ? NewX : NewY))
2950329503 std::swap(NewX, NewY);
2950429504
29505+ if (!IgnoreNaN && IsNum && !DAG.isKnownNeverNaN(NewY)) {
29506+ SDValue IsOrdered = DAG.getSetCC(DL, SetCCType, NewX, NewX, ISD::SETO);
29507+ SDValue X = DAG.getSelect(DL, VT, IsOrdered, NewY, NewX);
29508+ SDValue Y = DAG.getSelect(DL, VT, IsOrdered, NewX, NewY);
29509+ NewX = X;
29510+ NewY = Y;
29511+ }
29512+
2950529513 SDValue MinMax = DAG.getNode(MinMaxOp, DL, VT, NewX, NewY, Op->getFlags());
2950629514
29507- if (IgnoreNaN || DAG.isKnownNeverNaN(IsNum ? NewY : NewX))
29515+ if (IgnoreNaN || IsNum || DAG.isKnownNeverNaN(NewX))
2950829516 return MinMax;
2950929517
2951029518 if (DAG.isKnownNeverNaN(NewX))
2951129519 NewX = NewY;
2951229520
29513- SDValue IsNaN =
29514- DAG.getSetCC(DL, SetCCType, NewX, NewX, IsNum ? ISD::SETO : ISD::SETUO);
29521+ SDValue IsNaN = DAG.getSetCC(DL, SetCCType, NewX, NewX, ISD::SETUO);
2951529522
2951629523 return DAG.getSelect(DL, VT, IsNaN, NewX, MinMax);
2951729524}
0 commit comments