Author: YunQiang Su Date: 2025-03-04T12:26:44+08:00 New Revision: 50ff49ebbcdc88301070e94b04cb158d040db276
URL: https://github.com/llvm/llvm-project/commit/50ff49ebbcdc88301070e94b04cb158d040db276 DIFF: https://github.com/llvm/llvm-project/commit/50ff49ebbcdc88301070e94b04cb158d040db276.diff LOG: 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. Added: Modified: clang/lib/AST/ExprConstant.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index ef1d763009453..7244120d1be51 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -15604,16 +15604,11 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) { case Builtin::BI__builtin_fmaxl: case Builtin::BI__builtin_fmaxf16: case Builtin::BI__builtin_fmaxf128: { - // TODO: Handle sNaN. APFloat RHS(0.); if (!EvaluateFloat(E->getArg(0), Result, Info) || !EvaluateFloat(E->getArg(1), RHS, Info)) return false; - // When comparing zeroes, return +0.0 if one of the zeroes is positive. - if (Result.isZero() && RHS.isZero() && Result.isNegative()) - Result = RHS; - else if (Result.isNaN() || RHS > Result) - Result = RHS; + Result = maxnum(Result, RHS); return true; } @@ -15622,16 +15617,11 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) { case Builtin::BI__builtin_fminl: case Builtin::BI__builtin_fminf16: case Builtin::BI__builtin_fminf128: { - // TODO: Handle sNaN. APFloat RHS(0.); if (!EvaluateFloat(E->getArg(0), Result, Info) || !EvaluateFloat(E->getArg(1), RHS, Info)) return false; - // When comparing zeroes, return -0.0 if one of the zeroes is negative. - if (Result.isZero() && RHS.isZero() && RHS.isNegative()) - Result = RHS; - else if (Result.isNaN() || RHS < Result) - Result = RHS; + Result = minnum(Result, RHS); return true; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits