Skip to content

Commit d28c050

Browse files
committed
X86: Return canonicalized result from LowerFMINIMUM_FMAXIMUM
Fixes: #123263. fminimum/fmaximum and fminimumnum/fmaximumnum shouldn't return sNaN, instead we should quiet it if a NaN will be returned.
1 parent 76b0187 commit d28c050

File tree

2 files changed

+192
-92
lines changed

2 files changed

+192
-92
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,10 +334,10 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
334334
setOperationAction(ISD::FP_TO_SINT_SAT, VT, Custom);
335335
}
336336
setOperationAction(ISD::FCANONICALIZE, MVT::f32, Custom);
337+
setOperationAction(ISD::FCANONICALIZE, MVT::f64, Custom);
337338
if (Subtarget.is64Bit()) {
338339
setOperationAction(ISD::FP_TO_UINT_SAT, MVT::i64, Custom);
339340
setOperationAction(ISD::FP_TO_SINT_SAT, MVT::i64, Custom);
340-
setOperationAction(ISD::FCANONICALIZE, MVT::f64, Custom);
341341
}
342342
}
343343
if (Subtarget.hasAVX10_2()) {
@@ -29058,7 +29058,8 @@ static SDValue LowerFMINIMUM_FMAXIMUM(SDValue Op, const X86Subtarget &Subtarget,
2905829058
SDValue IsNaN =
2905929059
DAG.getSetCC(DL, SetCCType, NewX, NewX, IsNum ? ISD::SETO : ISD::SETUO);
2906029060

29061-
return DAG.getSelect(DL, VT, IsNaN, NewX, MinMax);
29061+
MinMax = DAG.getSelect(DL, VT, IsNaN, NewX, MinMax);
29062+
return DAG.getNode(ISD::FCANONICALIZE, DL, VT, MinMax);
2906229063
}
2906329064

2906429065
static SDValue LowerABD(SDValue Op, const X86Subtarget &Subtarget,

0 commit comments

Comments
 (0)