#include <range-op-mixed.h>
Private Member Functions | |
bool | truncating_cast_p (const irange &inner, const irange &outer) const |
bool | inside_domain_p (const wide_int &min, const wide_int &max, const irange &outer) const |
void | fold_pair (irange &r, unsigned index, const irange &inner, const irange &outer) const |
|
private |
References create_possibly_reversed_range(), wide_int_storage::from(), inside_domain_p(), irange::lower_bound(), r, wi::rshift(), wi::sub(), truncating_cast_p(), irange::type(), TYPE_PRECISION, TYPE_SIGN, wi::uhwi(), and irange::upper_bound().
Referenced by fold_range().
|
virtual |
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.
|
virtual |
Reimplemented from range_operator.
|
virtual |
Reimplemented from range_operator.
|
virtual |
Reimplemented from range_operator.
|
finaloverridevirtual |
Reimplemented from range_operator.
References empty_range_varying(), fold_pair(), gcc_checking_assert, irange::num_pairs(), r, update_bitmask(), and vrange::varying_p().
Referenced by op1_range(), op1_range(), op1_range(), and op1_range().
|
virtual |
Reimplemented from range_operator.
|
finaloverridevirtual |
Reimplemented from range_operator.
References empty_range_varying(), prange::get_bitmask(), prange::lower_bound(), make_unsigned_type(), r, range_cast(), prange::type(), TYPE_PRECISION, and prange::upper_bound().
|
finaloverridevirtual |
Reimplemented from range_operator.
References empty_range_varying(), irange::get_bitmask(), irange::lower_bound(), make_unsigned_type(), r, range_cast(), TYPE_PRECISION, and irange::upper_bound().
|
virtual |
Reimplemented from range_operator.
|
finaloverridevirtual |
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.
References empty_range_varying(), prange::get_bitmask(), prange::lower_bound(), r, and prange::upper_bound().
|
private |
References wi::ge_p(), irange_val_max(), irange_val_min(), wi::le_p(), irange::type(), and TYPE_SIGN.
Referenced by fold_pair().
|
virtual |
Reimplemented from range_operator.
|
virtual |
Reimplemented from range_operator.
|
finaloverridevirtual |
Reimplemented from range_operator.
References bits_to_pe(), irange::intersect(), MIN, range_negatives(), SIGNED, irange::type(), TYPE_PRECISION, TYPE_SIGN, vrange::undefined_p(), and VREL_VARYING.
|
finaloverridevirtual |
Reimplemented from range_operator.
References bits_to_pe(), irange::intersect(), MIN, range_negatives(), SIGNED, prange::type(), TYPE_PRECISION, TYPE_SIGN, vrange::undefined_p(), and VREL_VARYING.
|
finaloverridevirtual |
Reimplemented from range_operator.
References bits_to_pe(), irange::intersect(), MIN, range_negatives(), SIGNED, irange::type(), TYPE_PRECISION, TYPE_SIGN, vrange::undefined_p(), and VREL_VARYING.
|
finaloverridevirtual |
Reimplemented from range_operator.
References bits_to_pe(), irange::intersect(), MIN, range_negatives(), SIGNED, prange::type(), TYPE_PRECISION, TYPE_SIGN, vrange::undefined_p(), and VREL_VARYING.
|
virtualinherited |
Reimplemented in operator_plus.
References VREL_VARYING.
|
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.
|
virtual |
Reimplemented from range_operator.
|
virtual |
Reimplemented from range_operator.
|
finaloverridevirtual |
Reimplemented from range_operator.
References contains_zero_p(), create_possibly_reversed_range(), fold_range(), range_op_handler::fold_range(), gcc_checking_assert, irange::intersect(), wi::mask(), wi::max_value(), wi::min_value(), POINTER_TYPE_P, r, range_cast(), wi::set_bit_in_zero(), SIGNED, truncating_cast_p(), irange::type(), TYPE_PRECISION, types_compatible_p(), irange::union_(), and unsigned_type_for().
|
finaloverridevirtual |
Reimplemented from range_operator.
References fold_range(), gcc_checking_assert, POINTER_TYPE_P, r, range_includes_zero_p(), irange::type(), TYPE_PRECISION, and types_compatible_p().
|
finaloverridevirtual |
Reimplemented from range_operator.
References fold_range(), gcc_checking_assert, POINTER_TYPE_P, r, range_includes_zero_p(), prange::type(), TYPE_PRECISION, and types_compatible_p().
|
virtual |
Reimplemented from range_operator.
|
finaloverridevirtual |
Reimplemented from range_operator.
References fold_range(), gcc_checking_assert, POINTER_TYPE_P, r, range_includes_zero_p(), prange::type(), TYPE_PRECISION, and types_compatible_p().
|
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_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_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_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_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_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 in operator_abs, operator_bitwise_and, operator_bitwise_not, operator_bitwise_or, operator_bitwise_xor, operator_equal, operator_ge, operator_gt, operator_le, operator_logical_and, operator_logical_not, operator_logical_or, operator_lshift, operator_lt, operator_max, operator_min, operator_minus, operator_mult, operator_negate, operator_not_equal, operator_plus, and operator_rshift.
Referenced by pointer_plus_operator::update_bitmask().
|
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().
|
inlineprivate |
References irange::type(), and TYPE_PRECISION.
Referenced by fold_pair(), and op1_range().
Reimplemented from range_operator.
|
finaloverridevirtual |
Reimplemented from range_operator.
References r, and update_known_bitmask().
Referenced by fold_range().
|
protectedvirtualinherited |
Reimplemented in operator_abs, operator_absu, operator_bitwise_and, operator_bitwise_or, operator_bitwise_xor, operator_div, operator_lshift, operator_max, operator_min, operator_minus, operator_mult, operator_plus, operator_rshift, operator_trunc_mod, operator_widen_mult_signed, operator_widen_mult_unsigned, operator_widen_plus_signed, and operator_widen_plus_unsigned.
References gcc_checking_assert, and r.
Referenced by wi_fold_in_parts(), and wi_fold_in_parts_equiv().
|
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().