@@ -15604,16 +15604,11 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
1560415604 case Builtin::BI__builtin_fmaxl:
1560515605 case Builtin::BI__builtin_fmaxf16:
1560615606 case Builtin::BI__builtin_fmaxf128: {
15607- // TODO: Handle sNaN.
1560815607 APFloat RHS(0.);
1560915608 if (!EvaluateFloat(E->getArg(0), Result, Info) ||
1561015609 !EvaluateFloat(E->getArg(1), RHS, Info))
1561115610 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);
1561715612 return true;
1561815613 }
1561915614
@@ -15622,16 +15617,11 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
1562215617 case Builtin::BI__builtin_fminl:
1562315618 case Builtin::BI__builtin_fminf16:
1562415619 case Builtin::BI__builtin_fminf128: {
15625- // TODO: Handle sNaN.
1562615620 APFloat RHS(0.);
1562715621 if (!EvaluateFloat(E->getArg(0), Result, Info) ||
1562815622 !EvaluateFloat(E->getArg(1), RHS, Info))
1562915623 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);
1563515625 return true;
1563615626 }
1563715627
0 commit comments