Skip to content

Commit 50ff49e

Browse files
authored
Clang: ExprConstant use maxnum/minnum for fmax/fmin (#129630)
In APFloat, we have defined maxnum and minnum, so let's use them directly here. In `maxnum`/`minnum` of APFloat, we process sNaN, signed-zero as strictly as possible.
1 parent 4670f0d commit 50ff49e

File tree

1 file changed

+2
-12
lines changed

1 file changed

+2
-12
lines changed

clang/lib/AST/ExprConstant.cpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)