Skip to content

Commit cc90c8a

Browse files
committed
remove clang changes: should be another patch
1 parent ad7c6b6 commit cc90c8a

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

clang/lib/AST/ExprConstant.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15338,11 +15338,16 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
1533815338
case Builtin::BI__builtin_fmaxl:
1533915339
case Builtin::BI__builtin_fmaxf16:
1534015340
case Builtin::BI__builtin_fmaxf128: {
15341+
// TODO: Handle sNaN.
1534115342
APFloat RHS(0.);
1534215343
if (!EvaluateFloat(E->getArg(0), Result, Info) ||
1534315344
!EvaluateFloat(E->getArg(1), RHS, Info))
1534415345
return false;
15345-
Result = maxnum(Result, RHS);
15346+
// When comparing zeroes, return +0.0 if one of the zeroes is positive.
15347+
if (Result.isZero() && RHS.isZero() && Result.isNegative())
15348+
Result = RHS;
15349+
else if (Result.isNaN() || RHS > Result)
15350+
Result = RHS;
1534615351
return true;
1534715352
}
1534815353

@@ -15351,11 +15356,16 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
1535115356
case Builtin::BI__builtin_fminl:
1535215357
case Builtin::BI__builtin_fminf16:
1535315358
case Builtin::BI__builtin_fminf128: {
15359+
// TODO: Handle sNaN.
1535415360
APFloat RHS(0.);
1535515361
if (!EvaluateFloat(E->getArg(0), Result, Info) ||
1535615362
!EvaluateFloat(E->getArg(1), RHS, Info))
1535715363
return false;
15358-
Result = minnum(Result, RHS);
15364+
// When comparing zeroes, return -0.0 if one of the zeroes is negative.
15365+
if (Result.isZero() && RHS.isZero() && RHS.isNegative())
15366+
Result = RHS;
15367+
else if (Result.isNaN() || RHS < Result)
15368+
Result = RHS;
1535915369
return true;
1536015370
}
1536115371

0 commit comments

Comments
 (0)