[clang] 50ff49e - Clang: ExprConstant use maxnum/minnum for fmax/fmin (#129630)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 3 20:26:47 PST 2025
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;
}
More information about the cfe-commits
mailing list