Public Member Functions | |
virtual bool | fold_range (irange &r, tree type, const irange &op1, const irange &op2, relation_trio rel=TRIO_VARYING) const final override |
virtual void | wi_fold (irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const final override |
virtual bool | wi_op_overflows (wide_int &res, tree type, const wide_int &w0, const wide_int &w1) const final override |
virtual bool | op1_range (irange &, tree type, const irange &lhs, const irange &op2, relation_trio rel=TRIO_VARYING) const final override |
virtual relation_kind | lhs_op1_relation (const irange &lhs, const irange &op1, const irange &op2, relation_kind rel) const final override |
void | update_bitmask (irange &r, const irange &lh, const irange &rh) const final override |
bool | operand_check_p (tree t1, tree t2, tree) const final override |
void | wi_cross_product (irange &r, tree type, const wide_int &lh_lb, const wide_int &lh_ub, const wide_int &rh_lb, const wide_int &rh_ub) const |
virtual bool | op2_range (irange &r, tree type, const irange &lhs, const irange &op1, relation_trio=TRIO_VARYING) const |
virtual bool | op2_range (prange &r, tree type, const irange &lhs, const prange &op1, relation_trio=TRIO_VARYING) const |
virtual bool | op2_range (irange &r, tree type, const prange &lhs, const prange &op1, relation_trio=TRIO_VARYING) const |
virtual bool | op2_range (frange &r, tree type, const frange &lhs, const frange &op1, relation_trio=TRIO_VARYING) const |
virtual bool | op2_range (frange &r, tree type, const irange &lhs, const frange &op1, relation_trio=TRIO_VARYING) const |
virtual relation_kind | lhs_op2_relation (const irange &lhs, const irange &op1, const irange &op2, relation_kind=VREL_VARYING) const |
virtual relation_kind | lhs_op2_relation (const frange &lhs, const frange &op1, const frange &op2, relation_kind=VREL_VARYING) const |
virtual relation_kind | lhs_op2_relation (const irange &lhs, const frange &op1, const frange &op2, relation_kind=VREL_VARYING) const |
virtual relation_kind | op1_op2_relation (const irange &lhs, const irange &op1, const irange &op2) const |
virtual relation_kind | op1_op2_relation (const irange &lhs, const prange &op1, const prange &op2) const |
virtual relation_kind | op1_op2_relation (const irange &lhs, const frange &op1, const frange &op2) const |
virtual relation_kind | op1_op2_relation (const frange &lhs, const frange &op1, const frange &op2) const |
virtual bool | overflow_free_p (const irange &lh, const irange &rh, relation_trio=TRIO_VARYING) const |
|
privatevirtual |
Floating point range operators. Copyright (C) 2022-2025 Free Software Foundation, Inc. Contributed by Aldy Hernandez <aldyh@redhat.com>. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
finaloverridevirtual |
Reimplemented from range_operator.
References range_operator::fold_range(), get_shift_range(), r, shift, and vrange::undefined_p().
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Code for range operators. Copyright (C) 2017-2025 Free Software Foundation, Inc. Contributed by Andrew MacLeod <amacleod@redhat.com> and Aldy Hernandez <aldyh@redhat.com>. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
finaloverridevirtual |
Reimplemented from range_operator.
References wi::ge_p(), irange::lower_bound(), irange::type(), TYPE_SIGN, vrange::undefined_p(), VREL_LE, and VREL_VARYING.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
virtualinherited |
Reimplemented in operator_plus.
|
virtualinherited |
Reimplemented in operator_plus.
|
virtualinherited |
Reimplemented in operator_plus.
References VREL_VARYING.
|
virtualinherited |
Reimplemented in operator_equal, operator_ge, operator_gt, operator_le, operator_lt, and operator_not_equal.
References VREL_VARYING.
|
virtualinherited |
Reimplemented in operator_equal, operator_ge, operator_gt, operator_le, operator_lt, and operator_not_equal.
|
virtualinherited |
Reimplemented in operator_equal, operator_ge, operator_gt, operator_le, operator_lt, and operator_not_equal.
References VREL_VARYING.
|
virtualinherited |
Reimplemented in operator_equal, operator_ge, operator_gt, operator_le, operator_lt, and operator_not_equal.
|
protectedvirtualinherited |
Reimplemented in operator_bitwise_xor, operator_minus, and operator_pointer_diff.
References op1_range(), and op2_range().
Referenced by fold_range().
|
protectedvirtualinherited |
Reimplemented in operator_bitwise_xor, operator_minus, and operator_pointer_diff.
|
protectedvirtualinherited |
Reimplemented in operator_bitwise_xor, operator_minus, and operator_pointer_diff.
|
protectedvirtualinherited |
Reimplemented in operator_bitwise_xor, operator_minus, and operator_pointer_diff.
|
protectedvirtualinherited |
Reimplemented in operator_bitwise_xor, operator_minus, and operator_pointer_diff.
|
protectedvirtualinherited |
Reimplemented in operator_bitwise_xor, operator_minus, and operator_pointer_diff.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
finaloverridevirtual |
Reimplemented from range_operator.
References contains_zero_p(), wi::ge_p(), irange::intersect(), irange::invert(), wi::mask(), op_lshift, op_plus, op_rshift, r, shift, irange::singleton_p(), irange::type(), TYPE_PRECISION, wi::uhwi(), vrange::undefined_p(), UNSIGNED, and wi::zero().
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
privatevirtual |
Reimplemented from range_operator.
|
virtualinherited |
Reimplemented in foperator_div, foperator_ltgt, foperator_ordered, foperator_unordered, foperator_unordered_equal, foperator_unordered_ge, foperator_unordered_gt, foperator_unordered_le, foperator_unordered_lt, operator_bitwise_and, operator_bitwise_or, operator_bitwise_xor, operator_div, operator_equal, operator_ge, operator_gt, operator_le, operator_logical_and, operator_logical_or, operator_lt, operator_minus, operator_mult, operator_not_equal, operator_plus, operator_trunc_mod, and pointer_plus_operator.
References r.
|
virtualinherited |
Reimplemented in foperator_div, foperator_ltgt, foperator_ordered, foperator_unordered, foperator_unordered_equal, foperator_unordered_ge, foperator_unordered_gt, foperator_unordered_le, foperator_unordered_lt, operator_bitwise_and, operator_bitwise_or, operator_bitwise_xor, operator_div, operator_equal, operator_ge, operator_gt, operator_le, operator_logical_and, operator_logical_or, operator_lt, operator_minus, operator_mult, operator_not_equal, operator_plus, operator_trunc_mod, and pointer_plus_operator.
References r.
|
virtualinherited |
Reimplemented in foperator_div, foperator_ltgt, foperator_ordered, foperator_unordered, foperator_unordered_equal, foperator_unordered_ge, foperator_unordered_gt, foperator_unordered_le, foperator_unordered_lt, operator_bitwise_and, operator_bitwise_or, operator_bitwise_xor, operator_div, operator_equal, operator_ge, operator_gt, operator_le, operator_logical_and, operator_logical_or, operator_lt, operator_minus, operator_mult, operator_not_equal, operator_plus, operator_trunc_mod, and pointer_plus_operator.
References r.
Referenced by operator_pointer_diff::op1_op2_relation_effect(), op1_op2_relation_effect(), and range_op_table.
|
virtualinherited |
Reimplemented in foperator_div, foperator_ltgt, foperator_ordered, foperator_unordered, foperator_unordered_equal, foperator_unordered_ge, foperator_unordered_gt, foperator_unordered_le, foperator_unordered_lt, operator_bitwise_and, operator_bitwise_or, operator_bitwise_xor, operator_div, operator_equal, operator_ge, operator_gt, operator_le, operator_logical_and, operator_logical_or, operator_lt, operator_minus, operator_mult, operator_not_equal, operator_plus, operator_trunc_mod, and pointer_plus_operator.
|
virtualinherited |
Reimplemented in foperator_div, foperator_ltgt, foperator_ordered, foperator_unordered, foperator_unordered_equal, foperator_unordered_ge, foperator_unordered_gt, foperator_unordered_le, foperator_unordered_lt, operator_bitwise_and, operator_bitwise_or, operator_bitwise_xor, operator_div, operator_equal, operator_ge, operator_gt, operator_le, operator_logical_and, operator_logical_or, operator_lt, operator_minus, operator_mult, operator_not_equal, operator_plus, operator_trunc_mod, and pointer_plus_operator.
Reimplemented from range_operator.
References range_compatible_p().
|
virtualinherited |
Reimplemented in operator_minus, operator_mult, and operator_plus.
|
protectedvirtualinherited |
Reimplemented in foperator_div, operator_minus, operator_mult, and operator_plus.
References dconstinf, dconstninf, r, and REAL_VALUE_TYPE.
Referenced by fold_range().
|
privatevirtual |
Reimplemented from range_operator.
|
inlinefinaloverridevirtual |
Reimplemented from range_operator.
References r, and update_known_bitmask().
|
inherited |
References wi::eq_p(), wi::gt_p(), wi::max(), wi::min(), r, TYPE_SIGN, value_range_with_overflow(), and wi_op_overflows().
Referenced by operator_div::wi_fold(), operator_lshift::wi_fold(), operator_mult::wi_fold(), and operator_rshift::wi_fold().
|
finaloverridevirtual |
Reimplemented from range_operator.
References r, and cross_product_operator::wi_cross_product().
|
protectedinherited |
References r, wi::sub(), TYPE_SIGN, wi_fold(), and wi_fold_in_parts().
Referenced by fold_range(), and wi_fold_in_parts().
|
protectedinherited |
References r, wi::sub(), TYPE_SIGN, and wi_fold().
Referenced by fold_range().
|
finaloverridevirtual |
Implements cross_product_operator.
References wi::lshift(), wi::neg_p(), wi::rshift(), and TYPE_SIGN.