From: Jakub Jelinek Date: Sat, 1 Apr 2023 07:32:20 +0000 (+0200) Subject: range-op-float: Further foperator_{,not_}equal::fold_range fix X-Git-Tag: basepoints/gcc-14~239 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=69044e11ac52e93622c3d368ae2fd9ef8c3ec015;p=thirdparty%2Fgcc.git range-op-float: Further foperator_{,not_}equal::fold_range fix On Fri, Mar 31, 2023 at 12:45:10PM +0200, Jakub Jelinek via Gcc-patches wrote: > - there is a missing case (not handled in this patch) where both operands > are known to be zeros, but not singleton zeros This patch adds those cases. 2023-04-01 Jakub Jelinek * range-op-float.cc (foperator_equal::fold_range): If at least one of the op ranges is not singleton and neither is NaN and all 4 bounds are zero, return [1, 1]. (foperator_not_equal::fold_range): In the same case return [0, 0]. --- diff --git a/gcc/range-op-float.cc b/gcc/range-op-float.cc index 0e0fd92ff2e9..41d497e96ade 100644 --- a/gcc/range-op-float.cc +++ b/gcc/range-op-float.cc @@ -616,6 +616,13 @@ foperator_equal::fold_range (irange &r, tree type, else r = range_false (type); } + else if (real_iszero (&op1.lower_bound ()) + && real_iszero (&op1.upper_bound ()) + && real_iszero (&op2.lower_bound ()) + && real_iszero (&op2.upper_bound ()) + && !maybe_isnan (op1, op2)) + // [-0.0, 0.0] == [-0.0, 0.0] or similar. + r = range_true (type); else { // If ranges do not intersect, we know the range is not equal, @@ -732,6 +739,13 @@ foperator_not_equal::fold_range (irange &r, tree type, else r = range_true (type); } + else if (real_iszero (&op1.lower_bound ()) + && real_iszero (&op1.upper_bound ()) + && real_iszero (&op2.lower_bound ()) + && real_iszero (&op2.upper_bound ()) + && !maybe_isnan (op1, op2)) + // [-0.0, 0.0] != [-0.0, 0.0] or similar. + r = range_false (type); else { // If ranges do not intersect, we know the range is not equal,