[llvm] [X86] Check MinMax has NaN and replace with NewX for minimumnum/maximumnum (PR #164546)
    Phoebe Wang via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Tue Oct 21 22:07:48 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);
----------------
phoebewang wrote:
I optimized it with another approach. PTAL.
https://github.com/llvm/llvm-project/pull/164546
    
    
More information about the llvm-commits
mailing list