From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2136) id 662B638582BA; Wed, 14 Sep 2022 15:08:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 662B638582BA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1663168082; bh=MgfqNRSTtH3yBjKhMNL/J8FOwczlrMcgKgb/5PLibMw=; h=From:To:Subject:Date:From; b=oIB7G97+hO5ONREmrtz6xtgNnJewzEytkcts8YfKNi+8MvPMCdzR8KpT2QNOWqXhl E5gkk0DhaH3D0Gw96Xf9rDF52KI1ctNMLiRrRh2izjcbJn7D3Ro1JQnc1wwCMRG4oE gkE9ccTknpYOBDaRZC5XAVqCooyTuVAnhpPO1g4s= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Aldy Hernandez To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-2670] Pass full range to build_* in range-op-float.cc X-Act-Checkin: gcc X-Git-Author: Aldy Hernandez X-Git-Refname: refs/heads/master X-Git-Oldrev: 4a311a6160b3def190e64ca4a05a03fbcd163598 X-Git-Newrev: 7d647a8d49d49dfbb82061e6c66a19c142331169 Message-Id: <20220914150802.662B638582BA@sourceware.org> Date: Wed, 14 Sep 2022 15:08:02 +0000 (GMT) List-Id: https://gcc.gnu.org/g:7d647a8d49d49dfbb82061e6c66a19c142331169 commit r13-2670-g7d647a8d49d49dfbb82061e6c66a19c142331169 Author: Aldy Hernandez Date: Wed Sep 14 08:01:16 2022 +0200 Pass full range to build_* in range-op-float.cc The build_ helper functions in range-op-float.cc take the actual value from the operand's endpoint, but this value could be deduced from the operand itself therefore cleaning up the call site. This also reduces the potential of mistakenly passing the wrong bound. No functional changes. Regstrapped on x86-64 Linux, plus I ran selftests for -ffinite-math-only. gcc/ChangeLog: * range-op-float.cc (build_le): Accept frange instead of number. (build_lt): Same. (build_ge): Same. (build_gt): Same. (foperator_lt::op1_range): Pass full range to build_*. (foperator_lt::op2_range): Same. (foperator_le::op1_range): Same. (foperator_le::op2_range): Same. (foperator_gt::op1_range): Same. (foperator_gt::op2_range): Same. (foperator_ge::op1_range): Same. (foperator_ge::op2_range): Same. Diff: --- gcc/range-op-float.cc | 72 +++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/gcc/range-op-float.cc b/gcc/range-op-float.cc index f979ca597cb..8f3e5241313 100644 --- a/gcc/range-op-float.cc +++ b/gcc/range-op-float.cc @@ -208,32 +208,32 @@ frange_drop_ninf (frange &r, tree type) r.intersect (tmp); } -// (X <= VAL) produces the range of [-INF, VAL]. +// Build a range that is <= VAL and store it in R. static bool -build_le (frange &r, tree type, const REAL_VALUE_TYPE &val) +build_le (frange &r, tree type, const frange &val) { - if (real_isnan (&val)) + if (val.known_nan ()) { r.set_undefined (); return false; } - r.set (type, dconstninf, val); + r.set (type, dconstninf, val.upper_bound ()); return true; } -// (X < VAL) produces the range of [-INF, VAL). +// Build a range that is < VAL and store it in R. static bool -build_lt (frange &r, tree type, const REAL_VALUE_TYPE &val) +build_lt (frange &r, tree type, const frange &val) { - if (real_isnan (&val)) + if (val.known_nan ()) { r.set_undefined (); return false; } // < -INF is outside the range. - if (real_isinf (&val, 1)) + if (real_isinf (&val.upper_bound (), 1)) { if (HONOR_NANS (type)) r.set_nan (type); @@ -241,37 +241,37 @@ build_lt (frange &r, tree type, const REAL_VALUE_TYPE &val) r.set_undefined (); return false; } - // Hijack LE because we only support closed intervals. - build_le (r, type, val); + // We only support closed intervals. + r.set (type, dconstninf, val.upper_bound ()); return true; } -// (X >= VAL) produces the range of [VAL, +INF]. +// Build a range that is >= VAL and store it in R. static bool -build_ge (frange &r, tree type, const REAL_VALUE_TYPE &val) +build_ge (frange &r, tree type, const frange &val) { - if (real_isnan (&val)) + if (val.known_nan ()) { r.set_undefined (); return false; } - r.set (type, val, dconstinf); + r.set (type, val.lower_bound (), dconstinf); return true; } -// (X > VAL) produces the range of (VAL, +INF]. +// Build a range that is > VAL and store it in R. static bool -build_gt (frange &r, tree type, const REAL_VALUE_TYPE &val) +build_gt (frange &r, tree type, const frange &val) { - if (real_isnan (&val)) + if (val.known_nan ()) { r.set_undefined (); return false; } // > +INF is outside the range. - if (real_isinf (&val, 0)) + if (real_isinf (&val.lower_bound (), 0)) { if (HONOR_NANS (type)) r.set_nan (type); @@ -280,8 +280,8 @@ build_gt (frange &r, tree type, const REAL_VALUE_TYPE &val) return false; } - // Hijack GE because we only support closed intervals. - build_ge (r, type, val); + // We only support closed intervals. + r.set (type, val.lower_bound (), dconstinf); return true; } @@ -549,7 +549,7 @@ foperator_lt::op1_range (frange &r, switch (get_bool_state (r, lhs, type)) { case BRS_TRUE: - if (build_lt (r, type, op2.upper_bound ())) + if (build_lt (r, type, op2)) { r.clear_nan (); // x < y implies x is not +INF. @@ -558,7 +558,7 @@ foperator_lt::op1_range (frange &r, break; case BRS_FALSE: - build_ge (r, type, op2.lower_bound ()); + build_ge (r, type, op2); break; default: @@ -577,7 +577,7 @@ foperator_lt::op2_range (frange &r, switch (get_bool_state (r, lhs, type)) { case BRS_TRUE: - if (build_gt (r, type, op1.lower_bound ())) + if (build_gt (r, type, op1)) { r.clear_nan (); // x < y implies y is not -INF. @@ -586,7 +586,7 @@ foperator_lt::op2_range (frange &r, break; case BRS_FALSE: - build_le (r, type, op1.upper_bound ()); + build_le (r, type, op1); break; default: @@ -651,12 +651,12 @@ foperator_le::op1_range (frange &r, switch (get_bool_state (r, lhs, type)) { case BRS_TRUE: - if (build_le (r, type, op2.upper_bound ())) + if (build_le (r, type, op2)) r.clear_nan (); break; case BRS_FALSE: - build_gt (r, type, op2.lower_bound ()); + build_gt (r, type, op2); break; default: @@ -675,12 +675,12 @@ foperator_le::op2_range (frange &r, switch (get_bool_state (r, lhs, type)) { case BRS_TRUE: - if (build_ge (r, type, op1.lower_bound ())) + if (build_ge (r, type, op1)) r.clear_nan (); break; case BRS_FALSE: - build_lt (r, type, op1.upper_bound ()); + build_lt (r, type, op1); break; default: @@ -745,7 +745,7 @@ foperator_gt::op1_range (frange &r, switch (get_bool_state (r, lhs, type)) { case BRS_TRUE: - if (build_gt (r, type, op2.lower_bound ())) + if (build_gt (r, type, op2)) { r.clear_nan (); // x > y implies x is not -INF. @@ -754,7 +754,7 @@ foperator_gt::op1_range (frange &r, break; case BRS_FALSE: - build_le (r, type, op2.upper_bound ()); + build_le (r, type, op2); break; default: @@ -773,7 +773,7 @@ foperator_gt::op2_range (frange &r, switch (get_bool_state (r, lhs, type)) { case BRS_TRUE: - if (build_lt (r, type, op1.upper_bound ())) + if (build_lt (r, type, op1)) { r.clear_nan (); // x > y implies y is not +INF. @@ -782,7 +782,7 @@ foperator_gt::op2_range (frange &r, break; case BRS_FALSE: - build_ge (r, type, op1.lower_bound ()); + build_ge (r, type, op1); break; default: @@ -847,12 +847,12 @@ foperator_ge::op1_range (frange &r, switch (get_bool_state (r, lhs, type)) { case BRS_TRUE: - build_ge (r, type, op2.lower_bound ()); + build_ge (r, type, op2); r.clear_nan (); break; case BRS_FALSE: - build_lt (r, type, op2.upper_bound ()); + build_lt (r, type, op2); break; default: @@ -870,11 +870,11 @@ foperator_ge::op2_range (frange &r, tree type, switch (get_bool_state (r, lhs, type)) { case BRS_FALSE: - build_gt (r, type, op1.lower_bound ()); + build_gt (r, type, op1); break; case BRS_TRUE: - build_le (r, type, op1.upper_bound ()); + build_le (r, type, op1); r.clear_nan (); break;