[llvm] [X86] Swap NewX and NewY for ordered elements for minimumnum/maximumnum (PR #164546)
Shengchen Kan via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 21 21:53:22 PDT 2025
================
@@ -29511,16 +29502,23 @@ static SDValue LowerFMINIMUM_FMAXIMUM(SDValue Op, const X86Subtarget &Subtarget,
DAG.isKnownNeverNaN(IsNum ? NewX : NewY))
std::swap(NewX, NewY);
+ if (!IgnoreNaN && IsNum && !DAG.isKnownNeverNaN(NewY)) {
+ SDValue IsOrdered = DAG.getSetCC(DL, SetCCType, NewX, NewX, ISD::SETO);
+ SDValue X = DAG.getSelect(DL, VT, IsOrdered, NewY, NewX);
+ SDValue Y = DAG.getSelect(DL, VT, IsOrdered, NewX, NewY);
+ NewX = X;
+ NewY = Y;
+ }
+
SDValue MinMax = DAG.getNode(MinMaxOp, DL, VT, NewX, NewY, Op->getFlags());
- if (IgnoreNaN || DAG.isKnownNeverNaN(IsNum ? NewY : NewX))
+ if (IgnoreNaN || IsNum || DAG.isKnownNeverNaN(NewX))
return MinMax;
if (DAG.isKnownNeverNaN(NewX))
NewX = NewY;
- SDValue IsNaN =
- DAG.getSetCC(DL, SetCCType, NewX, NewX, IsNum ? ISD::SETO : ISD::SETUO);
+ SDValue IsNaN = DAG.getSetCC(DL, SetCCType, NewX, NewX, ISD::SETUO);
----------------
KanRobert wrote:
IsNum ? ISD::SETO : ISD::SETUO
->
ISD::SETUO
Why this change?
https://github.com/llvm/llvm-project/pull/164546
More information about the llvm-commits
mailing list