GCC Middle and Back End API Reference
|
#include <value-range.h>
Public Member Functions | |
void | set (tree type, const wide_int &, const wide_int &, value_range_kind=VR_RANGE) |
virtual void | set_nonzero (tree type) override |
virtual void | set_zero (tree type) override |
virtual void | set_nonnegative (tree type) override |
virtual void | set_varying (tree type) override |
virtual void | set_undefined () override |
virtual bool | supports_type_p (const_tree type) const override |
virtual tree | type () const override |
unsigned | num_pairs () const |
wide_int | lower_bound (unsigned=0) const |
wide_int | upper_bound (unsigned) const |
wide_int | upper_bound () const |
virtual tree | lbound () const override |
virtual tree | ubound () const override |
virtual bool | zero_p () const override |
virtual bool | nonzero_p () const override |
virtual bool | singleton_p (tree *result=NULL) const override |
bool | singleton_p (wide_int &) const |
bool | contains_p (const wide_int &) const |
bool | nonnegative_p () const |
bool | nonpositive_p () const |
virtual bool | union_ (const vrange &) override |
virtual bool | intersect (const vrange &) override |
void | invert () |
irange & | operator= (const irange &) |
bool | operator== (const irange &) const |
bool | operator!= (const irange &r) const |
virtual bool | fits_p (const vrange &r) const override |
virtual void | accept (const vrange_visitor &v) const override |
virtual void | update_bitmask (const class irange_bitmask &) override |
virtual irange_bitmask | get_bitmask () const override |
virtual void | accept (const class vrange_visitor &v) const =0 |
wide_int | get_nonzero_bits () const |
void | set_nonzero_bits (const wide_int &bits) |
bool | varying_p () const |
bool | undefined_p () const |
bool | operator== (const vrange &) const |
bool | operator!= (const vrange &r) const |
void | dump (FILE *) const |
Static Public Member Functions | |
static bool | supports_p (const_tree type) |
Protected Member Functions | |
void | maybe_resize (int needed) |
virtual void | set (tree, tree, value_range_kind=VR_RANGE) override |
virtual bool | contains_p (tree cst) const override |
irange (wide_int *, unsigned nranges, bool resizable) | |
bool | irange_contains_p (const irange &) const |
bool | irange_single_pair_union (const irange &r) |
void | normalize_kind () |
void | verify_range () |
Protected Attributes | |
wide_int * | m_base |
enum value_range_kind | m_kind: 8 |
enum value_range_discriminator | m_discriminator: 4 |
Static Protected Attributes | |
static const int | HARD_MAX_RANGES = 255 |
Private Member Functions | |
bool | varying_compatible_p () const |
bool | intersect_bitmask (const irange &r) |
bool | union_bitmask (const irange &r) |
bool | set_range_from_bitmask () |
bool | intersect (const wide_int &lb, const wide_int &ub) |
bool | union_append (const irange &r) |
Private Attributes | |
unsigned char | m_num_ranges |
bool | m_resizable |
unsigned char | m_max_ranges |
tree | m_type |
irange_bitmask | m_bitmask |
Friends | |
class | irange_storage |
class | vrange_printer |
References m_base, m_max_ranges, m_resizable, set_undefined(), VR_IRANGE, and vrange::vrange().
Referenced by int_range< 3, true >::contains_p(), int_range< N, RESIZABLE >::int_range(), int_range< N, RESIZABLE >::int_range(), int_range< N, RESIZABLE >::int_range(), int_range< N, RESIZABLE >::int_range(), int_range< N, RESIZABLE >::int_range(), int_range< N, RESIZABLE >::int_range(), int_range< 3, true >::int_range(), intersect(), intersect_bitmask(), irange_contains_p(), irange_single_pair_union(), int_range< 3, true >::nonzero_p(), operator!=(), operator=(), operator==(), int_range< 3, true >::set(), union_(), union_append(), union_bitmask(), and int_range< 3, true >::varying_compatible_p().
|
overridevirtual |
References vrange_visitor::visit().
|
pure virtualinherited |
Return 1 if CST is inside value range. 0 if CST is not inside value range. Benchmark compile/20001226-1.c compilation time after changing this function.
References wi::bit_and(), wi::le_p(), lower_bound(), wi::lt_p(), m_bitmask, m_num_ranges, r, type(), TYPE_SIGN, vrange::undefined_p(), and upper_bound().
Referenced by contains_p(), expr_not_equal_to(), and set_range_from_bitmask().
Implements vrange.
References contains_p(), and wi::to_wide().
|
inherited |
Implements vrange.
References as_a(), m_max_ranges, r, and vrange::vrange().
|
overridevirtual |
Reimplemented from vrange.
References gcc_checking_assert, get_bitmask_from_range(), irange_bitmask::intersect(), lower_bound(), m_bitmask, type(), vrange::undefined_p(), and upper_bound().
Referenced by cfn_popcount::fold_range(), operator_cast::fold_range(), operator_equal::fold_range(), operator_not_equal::fold_range(), get_known_nonzero_bits_1(), intersect_bitmask(), operator==(), and union_bitmask().
|
inherited |
References gcc_checking_assert, get_bitmask(), irange_bitmask::mask(), undefined_p(), and irange_bitmask::value().
Referenced by operator_lt::fold_range(), operator_lt::fold_range(), get_nonzero_bits_1(), and operator_bitwise_and::op1_range().
Implements vrange.
References as_a(), gcc_checking_assert, wi::ge_p(), i, i2, intersect(), intersect_bitmask(), irange(), wi::le_p(), wi::lt_p(), m_base, vrange::m_kind, m_max_ranges, m_num_ranges, m_type, maybe_resize(), normalize_kind(), num_pairs(), operator=(), r, range_compatible_p(), set_undefined(), type(), TYPE_SIGN, vrange::undefined_p(), vrange::varying_p(), verify_range(), VR_RANGE, and vrange::vrange().
Referenced by adjust_pointer_diff_expr(), irange_bitmask::adjust_range(), gimple_outgoing_range::calc_switch_ranges(), find_case_label_range(), operator_equal::fold_range(), operator_not_equal::fold_range(), intersect(), simplify_using_ranges::legacy_fold_cond_overflow(), operator_cast::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_cast::lhs_op1_relation(), minus_op1_op2_relation_effect(), operator_bitwise_xor::op1_op2_relation_effect(), operator_abs::op1_range(), operator_cast::op1_range(), operator_rshift::op1_range(), fur_source::register_outgoing_edges(), simplify_using_ranges::simplify(), and size_must_be_zero_p().
References gcc_checking_assert, get_bitmask(), irange_bitmask::intersect(), irange(), m_bitmask, normalize_kind(), r, set_range_from_bitmask(), vrange::undefined_p(), and verify_range().
Referenced by intersect().
void irange::invert | ( | ) |
References wi::add(), add_one(), gcc_checking_assert, i, lower_bound(), m_base, m_bitmask, vrange::m_kind, m_num_ranges, wi::max_value(), maybe_resize(), wi::min_value(), num_pairs(), subtract_one(), type(), TYPE_PRECISION, TYPE_SIGN, vrange::undefined_p(), vrange::varying_p(), verify_range(), and VR_RANGE.
Referenced by irange_bitmask::adjust_range(), gimple_outgoing_range::calc_switch_ranges(), cfn_toupper_tolower::fold_range(), get_legacy_range(), and operator_rshift::op1_range().
References gcc_checking_assert, wi::ge_p(), i, irange(), wi::le_p(), wi::lt_p(), m_base, m_type, num_pairs(), r, TYPE_SIGN, vrange::undefined_p(), and vrange::varying_p().
Referenced by union_().
References gcc_checking_assert, wi::ge_p(), irange(), wi::le_p(), m_base, m_max_ranges, m_num_ranges, m_type, normalize_kind(), r, TYPE_SIGN, vrange::undefined_p(), union_bitmask(), vrange::varying_p(), and verify_range().
Referenced by union_().
|
overridevirtual |
Implements vrange.
References lower_bound(), type(), and wide_int_to_tree().
|
inline |
References gcc_checking_assert, m_base, m_num_ranges, and num_pairs().
Referenced by check_for_binary_op_overflow(), compare_nonzero_chars(), compute_distributive_range(), contains_p(), strlen_pass::count_nonzero_bytes_addr(), determine_value_range(), dr_step_indicator(), expr_to_aff_combination(), find_case_label_range(), operator_cast::fold_pair(), cfn_clz::fold_range(), cfn_ctz::fold_range(), operator_cast::fold_range(), operator_equal::fold_range(), operator_ge::fold_range(), operator_gt::fold_range(), operator_le::fold_range(), operator_logical_and::fold_range(), operator_lshift::fold_range(), operator_lt::fold_range(), operator_not_equal::fold_range(), pointer_plus_operator::fold_range(), range_operator::fold_range(), get_bitmask(), get_legacy_range(), get_range_strlen_dynamic(), get_ref_base_and_extent(), handle_printf_call(), intersect(), invert(), lbound(), operator_bitwise_and::lhs_op1_relation(), operator_plus::lhs_op1_relation(), operator_rshift::lhs_op1_relation(), nonnegative_p(), operator_abs::op1_range(), operator_equal::op1_range(), operator_ge::op1_range(), operator_gt::op1_range(), operator_le::op1_range(), operator_lshift::op1_range(), operator_lt::op1_range(), operator_not_equal::op1_range(), operator_ge::op2_range(), operator_gt::op2_range(), operator_le::op2_range(), operator_lt::op2_range(), operator==(), operator_minus::overflow_free_p(), operator_mult::overflow_free_p(), operator_plus::overflow_free_p(), plus_minus_ranges(), range_fits_type_p(), phi_group::refine_using_relation(), operator_bitwise_and::simple_op1_range_solver(), simplify_conversion_using_ranges(), simplify_using_ranges::simplify_div_or_mod_using_ranges(), singleton_p(), singleton_p(), test_for_singularity(), simplify_using_ranges::two_valued_val_range_p(), verify_range(), vr_set_zero_nonzero_bits(), and zero_p().
|
inlineprotected |
References HARD_MAX_RANGES, i, m_base, m_max_ranges, m_resizable, and num_pairs().
Referenced by intersect(), invert(), operator=(), union_(), and union_append().
bool irange::nonnegative_p | ( | ) | const |
References wi::ge_p(), lower_bound(), type(), and TYPE_SIGN.
bool irange::nonpositive_p | ( | ) | const |
References wi::le_p(), type(), TYPE_SIGN, and upper_bound().
|
inlineoverridevirtual |
Implements vrange.
References type(), TYPE_PRECISION, vrange::undefined_p(), VR_ANTI_RANGE, and wi::zero().
|
inlineprotected |
References vrange::m_kind, m_num_ranges, set_undefined(), varying_compatible_p(), verify_range(), VR_ANTI_RANGE, VR_RANGE, and VR_VARYING.
Referenced by intersect(), intersect_bitmask(), irange_single_pair_union(), operator=(), union_(), union_append(), union_bitmask(), and update_bitmask().
|
inline |
References m_num_ranges.
Referenced by compute_distributive_range(), operator_cast::fold_range(), range_operator::fold_range(), intersect(), intersect(), invert(), irange_contains_p(), lower_bound(), maybe_resize(), operator_abs::op1_range(), operator=(), singleton_p(), singleton_p(), simplify_using_ranges::two_valued_val_range_p(), upper_bound(), and upper_bound().
References irange(), m_base, m_bitmask, vrange::m_kind, m_max_ranges, m_num_ranges, m_type, maybe_resize(), normalize_kind(), num_pairs(), and verify_range().
Referenced by int_range< N, RESIZABLE >::int_range(), int_range< N, RESIZABLE >::int_range(), intersect(), int_range< N, RESIZABLE >::operator=(), and union_().
References as_a(), gcc_unreachable, is_a< frange >(), is_a< irange >(), is_a< prange >(), and vrange().
void irange::set | ( | tree | type, |
const wide_int & | min, | ||
const wide_int & | max, | ||
value_range_kind | kind = VR_RANGE ) |
Set value range to the canonical form of {VRTYPE, MIN, MAX, EQUIV}. This means adjusting VRTYPE, MIN and MAX representing the case of a wrapping range with MAX < MIN covering [MIN, type_max] U [type_min, MAX] as anti-rage ~[MAX+1, MIN-1]. Likewise for wrapping anti-ranges. In corner cases where MAX+1 or MIN-1 wraps this will fall back to varying. This routine exists to ease canonicalization in the case where we extract ranges from var + CST op limit.
References wi::add(), gcc_checking_assert, m_base, m_bitmask, vrange::m_kind, m_max_ranges, m_num_ranges, m_type, wi::max_value(), wi::min_value(), SIGNED, wi::sub(), type(), TYPE_PRECISION, TYPE_SIGN, verify_range(), VR_ANTI_RANGE, VR_RANGE, VR_UNDEFINED, and VR_VARYING.
Referenced by find_unswitching_predicates_for_bb(), int_range< N, RESIZABLE >::int_range(), int_range< N, RESIZABLE >::int_range(), simplify_using_ranges::legacy_fold_cond_overflow(), set(), set_nonnegative(), set_nonzero(), set_range_from_bitmask(), set_zero(), split_constant_offset(), and unswitch_predicate::unswitch_predicate().
|
overrideprotectedvirtual |
Implements vrange.
References gcc_checking_assert, POLY_INT_CST_P, set(), set_varying(), wi::to_wide(), TREE_CODE, and TREE_TYPE.
|
overridevirtual |
Implements vrange.
References set(), wi::to_wide(), type(), TYPE_MAX_VALUE, TYPE_PRECISION, and wi::zero().
|
inlineoverridevirtual |
Implements vrange.
References m_base, m_bitmask, vrange::m_kind, m_num_ranges, m_type, wi::minus_one(), wi::one(), set(), type(), TYPE_PRECISION, TYPE_UNSIGNED, verify_range(), VR_ANTI_RANGE, VR_RANGE, and wi::zero().
Referenced by strlen_pass::handle_builtin_string_cmp(), operator_bitwise_xor::op1_op2_relation_effect(), operator_bitwise_xor::wi_fold(), and wi_optimize_and_or().
|
inherited |
References gcc_checking_assert, type(), TYPE_PRECISION, undefined_p(), update_bitmask(), and wi::zero().
Referenced by operator_bitwise_and::op1_range().
|
private |
References contains_p(), contains_zero_p(), gcc_checking_assert, m_bitmask, m_type, wi::popcount(), set(), set_zero(), type(), vrange::undefined_p(), union_(), and verify_range().
Referenced by intersect_bitmask(), and update_bitmask().
|
inlineoverridevirtual |
Implements vrange.
References vrange::m_kind, m_num_ranges, and VR_UNDEFINED.
Referenced by gimple_outgoing_range::calc_switch_ranges(), intersect(), intersect(), irange(), normalize_kind(), phi_analyzer::process_phi(), simplify_using_ranges::simplify_compare_using_ranges_1(), and unsupported_range::unsupported_range().
|
inlineoverridevirtual |
Implements vrange.
References error_mark_node, INTEGRAL_TYPE_P, m_base, m_bitmask, vrange::m_kind, m_num_ranges, m_type, wi::max_value(), wi::min_value(), POINTER_TYPE_P, type(), TYPE_PRECISION, TYPE_SIGN, and VR_VARYING.
Referenced by check_for_binary_op_overflow(), compute_distributive_range(), evaluate_conditions_for_known_args(), get_size_range(), int_range< N, RESIZABLE >::int_range(), simplify_using_ranges::legacy_fold_cond_overflow(), phi_group::refine_using_relation(), set(), set_switch_stmt_execution_predicate(), simplify_using_ranges::simplify_div_or_mod_using_ranges(), size_must_be_zero_p(), split_constant_offset(), union_(), and vect_get_range_info().
|
inlineoverridevirtual |
Implements vrange.
References set(), type(), TYPE_PRECISION, and wi::zero().
Referenced by operator_bitwise_xor::op1_op2_relation_effect(), and set_range_from_bitmask().
If range is a singleton, place it in RESULT and return TRUE.
Implements vrange.
References lower_bound(), num_pairs(), type(), upper_bound(), and wide_int_to_tree().
Referenced by compare_nonzero_chars(), cfn_constant_p::fold_range(), cfn_goacc_dim::fold_range(), cfn_popcount::fold_range(), operator_lshift::fold_range(), operator_bitwise_and::lhs_op1_relation(), operator_bitwise_and::op1_range(), operator_exact_divide::op1_range(), operator_lshift::op1_range(), operator_mult::op1_range(), operator_rshift::op1_range(), plus_minus_ranges(), fold_using_range::relation_fold_and_or(), and operator_bitwise_and::simple_op1_range_solver().
References lower_bound(), num_pairs(), and upper_bound().
|
inlinestatic |
References INTEGRAL_TYPE_P, and type().
Referenced by assume_query::assume_query(), vrange_allocator::clone_undefined(), vrange_allocator::clone_varying(), evaluate_control_stmt_using_entry_checks(), get_known_nonzero_bits_1(), get_nonzero_bits_1(), value_range::init(), ipa_vr_supported_type_p(), irange_val_max(), irange_val_min(), gimple_range_op_handler::maybe_builtin_call(), phi_analyzer::operator[](), fold_using_range::range_of_phi(), fold_using_range::range_of_range_op(), supports_type_p(), value_range::supports_type_p(), unswitch_predicate::unswitch_predicate(), unswitch_predicate::unswitch_predicate(), and verify_range().
|
overridevirtual |
Implements vrange.
References supports_p(), and type().
|
inlineoverridevirtual |
Implements vrange.
References gcc_checking_assert, m_num_ranges, and m_type.
Referenced by compare_nonzero_chars(), contains_p(), find_case_label_range(), operator_cast::fold_pair(), cfn_clrsb::fold_range(), cfn_clz::fold_range(), cfn_ctz::fold_range(), cfn_ffs::fold_range(), operator_ge::fold_range(), operator_gt::fold_range(), operator_le::fold_range(), operator_logical_and::fold_range(), operator_lt::fold_range(), get_bitmask(), get_range_strlen_dynamic(), get_shift_range(), operator_cast::inside_domain_p(), int_range< N, RESIZABLE >::int_range(), int_range< N, RESIZABLE >::int_range(), intersect(), intersect(), invert(), lbound(), operator_bitwise_and::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_minus::lhs_op1_relation(), operator_rshift::lhs_op1_relation(), nonnegative_p(), nonpositive_p(), nonzero_p(), operator_cast::op1_range(), operator_cast::op1_range(), operator_lshift::op1_range(), operator_rshift::op1_range(), operator==(), operator_minus::overflow_free_p(), operator_mult::overflow_free_p(), operator_plus::overflow_free_p(), phi_group::phi_group(), plus_minus_ranges(), range_fits_type_p(), set(), set_nonnegative(), set_nonzero(), set_range_from_bitmask(), set_varying(), set_zero(), simplify_using_ranges::simplify_div_or_mod_using_ranges(), singleton_p(), supports_p(), supports_type_p(), operator_cast::truncating_cast_p(), ubound(), union_(), verify_range(), and vrange_printer.
|
overridevirtual |
Implements vrange.
References type(), upper_bound(), and wide_int_to_tree().
|
inlineinherited |
References m_kind, and VR_UNDEFINED.
Referenced by adjust_equivalence_range(), gimple_range_op_handler::calc_op1(), gimple_range_op_handler::calc_op2(), array_bounds_checker::check_array_ref(), check_for_binary_op_overflow(), frange::clear_nan(), frange::combine_zeros(), compare_nonzero_chars(), compute_distributive_range(), frange::contains_p(), irange::contains_p(), prange::contains_p(), strlen_pass::count_nonzero_bytes_addr(), determine_value_range(), dr_step_indicator(), empty_range_varying(), expr_not_equal_to(), expr_to_aff_combination(), find_case_label_range(), find_case_label_ranges(), find_range_for_lhs(), frange::flush_denormals_to_zero(), cfn_clrsb::fold_range(), cfn_clz::fold_range(), cfn_ctz::fold_range(), cfn_ffs::fold_range(), cfn_isfinite::fold_range(), cfn_isinf::fold_range(), cfn_isnormal::fold_range(), cfn_popcount::fold_range(), operator_addr_expr::fold_range(), operator_equal::fold_range(), operator_equal::fold_range(), operator_equal::fold_range(), operator_logical_not::fold_range(), operator_lshift::fold_range(), operator_not_equal::fold_range(), operator_not_equal::fold_range(), operator_not_equal::fold_range(), operator_rshift::fold_range(), range_op_handler::fold_range(), irange::get_bitmask(), get_known_nonzero_bits_1(), get_nonzero_bits(), get_range_strlen_dynamic(), get_ref_base_and_extent(), get_shift_range(), get_size_range(), handle_printf_call(), frange::intersect(), irange::intersect(), irange::intersect(), prange::intersect(), unsupported_range::intersect(), irange::intersect_bitmask(), irange::invert(), prange::invert(), ipa_vr_operation_and_type_effects(), irange::irange_contains_p(), irange::irange_single_pair_union(), frange::known_isfinite(), simplify_using_ranges::legacy_fold_cond_overflow(), operator_bitwise_and::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_minus::lhs_op1_relation(), operator_plus::lhs_op1_relation(), operator_rshift::lhs_op1_relation(), frange::lower_bound(), prange::lower_bound(), frange::maybe_isinf(), frange::maybe_isnan(), frange::maybe_isnan(), frange::nan_signbit_p(), irange::nonzero_p(), foperator_div::op1_range(), foperator_unordered_ge::op1_range(), foperator_unordered_gt::op1_range(), foperator_unordered_le::op1_range(), foperator_unordered_lt::op1_range(), operator_bitwise_xor::op1_range(), operator_equal::op1_range(), operator_equal::op1_range(), operator_ge::op1_range(), operator_ge::op1_range(), operator_ge::op1_range(), operator_gt::op1_range(), operator_gt::op1_range(), operator_gt::op1_range(), operator_le::op1_range(), operator_le::op1_range(), operator_le::op1_range(), operator_lt::op1_range(), operator_lt::op1_range(), operator_lt::op1_range(), operator_mult::op1_range(), operator_not_equal::op1_range(), operator_not_equal::op1_range(), operator_rshift::op1_range(), foperator_div::op2_range(), foperator_unordered_ge::op2_range(), foperator_unordered_gt::op2_range(), foperator_unordered_le::op2_range(), foperator_unordered_lt::op2_range(), operator_ge::op2_range(), operator_ge::op2_range(), operator_ge::op2_range(), operator_gt::op2_range(), operator_gt::op2_range(), operator_gt::op2_range(), operator_le::op2_range(), operator_le::op2_range(), operator_le::op2_range(), operator_lt::op2_range(), operator_lt::op2_range(), operator_lt::op2_range(), range_op_handler::op2_range(), frange::operator==(), prange::operator==(), operator_minus::overflow_free_p(), operator_mult::overflow_free_p(), operator_plus::overflow_free_p(), phi_group::phi_group(), phi_analyzer::process_phi(), range_fits_type_p(), range_includes_zero_p(), fur_source::register_outgoing_edges(), set_nonzero_bits(), irange::set_range_from_bitmask(), set_switch_stmt_execution_predicate(), frange::signbit_p(), simplify_using_ranges::simplify(), simplify_using_ranges::simplify_bit_ops_using_ranges(), simplify_using_ranges::simplify_casted_compare(), simplify_using_ranges::simplify_compare_using_ranges_1(), simplify_conversion_using_ranges(), simplify_using_ranges::simplify_div_or_mod_using_ranges(), simplify_using_ranges::simplify_float_conversion_using_ranges(), simplify_using_ranges::simplify_switch_using_ranges(), size_must_be_zero_p(), split_constant_offset(), streamer_write_vrange, simplify_using_ranges::two_valued_val_range_p(), frange::type(), prange::type(), frange::union_(), irange::union_(), prange::union_(), unsupported_range::union_(), irange::union_bitmask(), irange::update_bitmask(), pointer_plus_operator::update_bitmask(), prange::update_bitmask(), update_known_bitmask(), frange::update_nan(), frange::update_nan(), frange::update_nan(), frange::upper_bound(), prange::upper_bound(), prange::varying_compatible_p(), vect_get_range_info(), frange::verify_range(), and vr_set_zero_nonzero_bits().
Implements vrange.
References as_a(), wi::gt_p(), i, irange(), irange_contains_p(), irange_single_pair_union(), m_base, vrange::m_kind, m_max_ranges, m_num_ranges, m_type, maybe_resize(), normalize_kind(), operator=(), r, set_varying(), type(), TYPE_SIGN, vrange::undefined_p(), union_append(), union_bitmask(), upper_bound(), vrange::varying_p(), verify_range(), VR_RANGE, and vrange::vrange().
Referenced by gimple_outgoing_range::calc_switch_ranges(), phi_group::calculate_using_modifier(), operator_cast::op1_range(), operator_lshift::op1_range(), phi_analyzer::process_phi(), set_range_from_bitmask(), and simplify_rotate().
References irange(), m_base, m_max_ranges, m_num_ranges, m_type, maybe_resize(), normalize_kind(), r, TYPE_SIGN, union_bitmask(), upper_bound(), and verify_range().
Referenced by union_().
References gcc_checking_assert, get_bitmask(), irange(), m_bitmask, normalize_kind(), r, vrange::undefined_p(), irange_bitmask::union_(), and irange_bitmask::unknown_p().
Referenced by irange_single_pair_union(), union_(), and union_append().
|
overridevirtual |
Reimplemented from vrange.
References gcc_checking_assert, m_bitmask, vrange::m_kind, normalize_kind(), set_range_from_bitmask(), vrange::undefined_p(), irange_bitmask::unknown_p(), verify_range(), VR_RANGE, and VR_VARYING.
|
inline |
References gcc_checking_assert, num_pairs(), and upper_bound().
Referenced by union_append(), upper_bound(), and verify_range().
|
inline |
References gcc_checking_assert, m_base, m_num_ranges, and num_pairs().
Referenced by check_for_binary_op_overflow(), compute_distributive_range(), contains_p(), strlen_pass::count_nonzero_bytes_addr(), determine_value_range(), dr_step_indicator(), expr_to_aff_combination(), find_case_label_range(), operator_cast::fold_pair(), cfn_clz::fold_range(), cfn_ctz::fold_range(), cfn_ffs::fold_range(), operator_cast::fold_range(), operator_equal::fold_range(), operator_ge::fold_range(), operator_gt::fold_range(), operator_le::fold_range(), operator_logical_and::fold_range(), operator_lt::fold_range(), operator_not_equal::fold_range(), pointer_plus_operator::fold_range(), range_operator::fold_range(), get_bitmask(), get_legacy_range(), get_range_strlen_dynamic(), get_ref_base_and_extent(), handle_printf_call(), intersect(), operator_plus::lhs_op1_relation(), nonpositive_p(), operator_abs::op1_range(), operator_equal::op1_range(), operator_ge::op1_range(), operator_gt::op1_range(), operator_le::op1_range(), operator_lshift::op1_range(), operator_lt::op1_range(), operator_not_equal::op1_range(), operator_ge::op2_range(), operator_gt::op2_range(), operator_le::op2_range(), operator_lt::op2_range(), operator==(), operator_minus::overflow_free_p(), operator_mult::overflow_free_p(), operator_plus::overflow_free_p(), range_fits_type_p(), phi_group::refine_using_relation(), simplify_conversion_using_ranges(), simplify_using_ranges::simplify_div_or_mod_using_ranges(), singleton_p(), singleton_p(), test_for_singularity(), simplify_using_ranges::two_valued_val_range_p(), ubound(), union_(), verify_range(), vr_set_zero_nonzero_bits(), and zero_p().
|
inlineprivate |
References INTEGRAL_TYPE_P, m_base, m_bitmask, vrange::m_kind, m_num_ranges, m_type, wi::max_value(), wi::min_value(), POINTER_TYPE_P, TYPE_PRECISION, TYPE_SIGN, and VR_VARYING.
Referenced by normalize_kind(), and verify_range().
|
inlineinherited |
References m_kind, and VR_VARYING.
Referenced by gimple_outgoing_range::calc_switch_ranges(), phi_group::calculate_using_modifier(), array_bounds_checker::check_array_ref(), compare_nonzero_chars(), compute_distributive_range(), frange::contains_p(), prange::contains_p(), strlen_pass::count_nonzero_bytes_addr(), determine_value_range(), expr_to_aff_combination(), find_case_label_range(), find_case_label_ranges(), operator_cast::fold_range(), operator_logical_not::fold_range(), get_range_strlen_dynamic(), get_ref_base_and_extent(), frange::intersect(), irange::intersect(), prange::intersect(), unsupported_range::intersect(), irange::invert(), prange::invert(), ipa_vr_operation_and_type_effects(), irange::irange_contains_p(), irange::irange_single_pair_union(), frange::known_isfinite(), gori_compute::logical_combine(), frange::maybe_isinf(), ipcp_vr_lattice::meet_with_1(), operator_bitwise_xor::op1_range(), frange::operator==(), prange::operator==(), phi_group::phi_group(), phi_analyzer::process_phi(), range_fits_type_p(), range_includes_zero_p(), int_range< 3, true >::set_nonzero_bits(), simplify_using_ranges::simplify_casted_compare(), simplify_using_ranges::simplify_compare_using_ranges_1(), simplify_conversion_using_ranges(), simplify_using_ranges::simplify_div_or_mod_using_ranges(), simplify_using_ranges::simplify_float_conversion_using_ranges(), simplify_using_ranges::simplify_switch_using_ranges(), simplify_using_ranges::two_valued_val_range_p(), frange::union_(), irange::union_(), prange::union_(), unsupported_range::union_(), and vr_set_zero_nonzero_bits().
|
protected |
References wi::cmp(), error_mark_node, gcc_checking_assert, wide_int_storage::get_precision(), i, lower_bound(), m_bitmask, vrange::m_discriminator, vrange::m_kind, m_max_ranges, m_num_ranges, m_type, supports_p(), type(), TYPE_PRECISION, TYPE_SIGN, upper_bound(), upper_bound(), varying_compatible_p(), VR_IRANGE, VR_UNDEFINED, and VR_VARYING.
Referenced by intersect(), intersect_bitmask(), invert(), irange_single_pair_union(), normalize_kind(), operator=(), set(), set_nonzero(), set_range_from_bitmask(), union_(), union_append(), and update_bitmask().
|
inlineoverridevirtual |
Implements vrange.
References lower_bound(), vrange::m_kind, m_num_ranges, upper_bound(), and VR_RANGE.
Referenced by evaluate_conditions_for_known_args(), operator_addr_expr::fold_range(), operator_lt::fold_range(), operator_plus::lhs_op1_relation(), operator_bitwise_xor::op1_range(), plus_minus_ranges(), and size_must_be_zero_p().
|
friend |
References irange_storage.
Referenced by irange_storage.
|
friend |
References type(), VR_RANGE, and vrange_printer.
Referenced by int_range< 3, true >::set_nonnegative(), and vrange_printer.
|
staticprotected |
Referenced by maybe_resize().
|
protected |
|
private |
|
protectedinherited |
|
protectedinherited |
Referenced by frange::combine_zeros(), frange::contains_p(), frange::internal_singleton_p(), frange::intersect(), irange::intersect(), irange::intersect(), frange::intersect_nans(), irange::invert(), frange::known_isfinite(), frange::known_isinf(), frange::known_isnan(), frange::maybe_isinf(), prange::nonzero_p(), frange::normalize_kind(), irange::normalize_kind(), frange::operator=(), irange::operator=(), prange::operator=(), operator=(), frange::operator==(), prange::operator==(), frange::set(), irange::set(), prange::set(), frange::set_nan(), irange::set_nonzero(), prange::set_nonzero(), frange::set_undefined(), irange::set_undefined(), prange::set_undefined(), unsupported_range::set_undefined(), frange::set_varying(), irange::set_varying(), prange::set_varying(), unsupported_range::set_varying(), prange::set_zero(), prange::singleton_p(), streamer_write_vrange, undefined_p(), irange::union_(), frange::union_nans(), irange::update_bitmask(), prange::update_bitmask(), irange::varying_compatible_p(), varying_p(), frange::verify_range(), irange::verify_range(), prange::verify_range(), frange::zero_p(), irange::zero_p(), and prange::zero_p().
|
private |
Referenced by fits_p(), intersect(), irange(), irange_single_pair_union(), maybe_resize(), operator=(), set(), union_(), union_append(), and verify_range().
|
private |
Referenced by contains_p(), intersect(), intersect(), invert(), irange_single_pair_union(), lower_bound(), normalize_kind(), num_pairs(), operator=(), operator==(), set(), set_nonzero(), set_undefined(), set_varying(), type(), union_(), union_append(), upper_bound(), varying_compatible_p(), verify_range(), and zero_p().
|
private |
Referenced by irange(), and maybe_resize().
|
private |