@@ -15604,16 +15604,11 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
15604
15604
case Builtin::BI__builtin_fmaxl:
15605
15605
case Builtin::BI__builtin_fmaxf16:
15606
15606
case Builtin::BI__builtin_fmaxf128: {
15607
- // TODO: Handle sNaN.
15608
15607
APFloat RHS(0.);
15609
15608
if (!EvaluateFloat(E->getArg(0), Result, Info) ||
15610
15609
!EvaluateFloat(E->getArg(1), RHS, Info))
15611
15610
return false;
15612
- // When comparing zeroes, return +0.0 if one of the zeroes is positive.
15613
- if (Result.isZero() && RHS.isZero() && Result.isNegative())
15614
- Result = RHS;
15615
- else if (Result.isNaN() || RHS > Result)
15616
- Result = RHS;
15611
+ Result = maxnum(Result, RHS);
15617
15612
return true;
15618
15613
}
15619
15614
@@ -15622,16 +15617,11 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
15622
15617
case Builtin::BI__builtin_fminl:
15623
15618
case Builtin::BI__builtin_fminf16:
15624
15619
case Builtin::BI__builtin_fminf128: {
15625
- // TODO: Handle sNaN.
15626
15620
APFloat RHS(0.);
15627
15621
if (!EvaluateFloat(E->getArg(0), Result, Info) ||
15628
15622
!EvaluateFloat(E->getArg(1), RHS, Info))
15629
15623
return false;
15630
- // When comparing zeroes, return -0.0 if one of the zeroes is negative.
15631
- if (Result.isZero() && RHS.isZero() && RHS.isNegative())
15632
- Result = RHS;
15633
- else if (Result.isNaN() || RHS < Result)
15634
- Result = RHS;
15624
+ Result = minnum(Result, RHS);
15635
15625
return true;
15636
15626
}
15637
15627
0 commit comments