GCC Middle and Back End API Reference
|
#include <value-range.h>
Static Public Member Functions | |
static bool | supports_p (const_tree type) |
Protected Member Functions | |
bool | varying_compatible_p () const |
Protected Attributes | |
tree | m_type |
wide_int | m_min |
wide_int | m_max |
irange_bitmask | m_bitmask |
enum value_range_kind | m_kind: 8 |
enum value_range_discriminator | m_discriminator: 4 |
Friends | |
class | prange_storage |
class | vrange_printer |
|
inline |
References set_undefined().
|
inline |
References set_varying().
|
inline |
References set().
|
pure virtualinherited |
Referenced by Value_Range::accept(), and vrange::dump().
|
finaloverridevirtual |
References vrange_visitor::visit().
References wi::ge_p(), ggc_alloc(), wi::le_p(), lower_bound(), vrange::undefined_p(), UNSIGNED, upper_bound(), and vrange::varying_p().
Implements vrange.
References contains_p(), ggc_alloc(), and wi::to_wide().
Referenced by contains_p().
References vrange::accept(), pretty_printer::buffer, ggc_alloc(), pp_flush(), pp_needs_newline, and output_buffer::stream.
Referenced by gori_compute::compute_operand1_range(), gori_compute::compute_operand2_range(), gori_compute::compute_operand_range(), phi_group::dump(), Value_Range::dump(), dump_strlen_info(), dump_value_range(), and gori_compute::logical_combine().
|
inlinefinaloverridevirtual |
Reimplemented from vrange.
References m_bitmask.
Referenced by operator_cast::fold_range(), operator_not_equal::fold_range(), operator_equal::fold_range(), operator_cast::fold_range(), and varying_compatible_p().
|
inherited |
References gcc_checking_assert, vrange::get_bitmask(), irange_bitmask::mask(), vrange::undefined_p(), and irange_bitmask::value().
Referenced by operator_lt::fold_range(), operator_lt::fold_range(), and operator_bitwise_and::op1_range().
Implements vrange.
References gcc_checking_assert, get_bitmask_from_range(), ggc_alloc(), wi::gt_p(), irange_bitmask::intersect(), lower_bound(), m_bitmask, m_max, m_min, m_type, wi::max(), wi::min(), r, range_compatible_p(), set_undefined(), set_varying(), vrange::undefined_p(), UNSIGNED, upper_bound(), varying_compatible_p(), vrange::varying_p(), and verify_range().
void prange::invert | ( | ) |
References wi::add(), gcc_checking_assert, ggc_alloc(), lower_bound(), wi::max_value(), set(), set_varying(), wi::sub(), TYPE_PRECISION, vrange::undefined_p(), UNSIGNED, upper_bound(), vrange::varying_p(), and wi::zero().
Referenced by operator_not_equal::op1_range(), and operator_equal::op1_range().
|
finaloverridevirtual |
Implements vrange.
References m_min, and wide_int_to_tree().
|
inline |
References gcc_checking_assert, m_min, and vrange::undefined_p().
Referenced by build_ge(), build_gt(), contains_p(), operator_cast::fold_range(), operator_not_equal::fold_range(), operator_equal::fold_range(), operator_lt::fold_range(), operator_le::fold_range(), operator_gt::fold_range(), operator_ge::fold_range(), pointer_plus_operator::fold_range(), operator_cast::fold_range(), intersect(), invert(), operator_not_equal::op1_range(), operator_equal::op1_range(), singleton_p(), and union_().
|
inlinefinaloverridevirtual |
Implements vrange.
References vrange::m_kind, m_max, m_min, and VR_RANGE.
Referenced by find_what_p_points_to().
References ggc_alloc(), m_bitmask, vrange::m_kind, m_max, m_min, m_type, and verify_range().
References m_bitmask, vrange::m_kind, m_max, m_min, type(), types_compatible_p(), vrange::undefined_p(), and vrange::varying_p().
References gcc_unreachable, ggc_alloc(), is_a< frange >(), is_a< irange >(), and is_a< prange >().
|
finaloverridevirtual |
Implements vrange.
References set(), wi::to_wide(), and TREE_TYPE.
Referenced by invert(), prange(), set(), set_nonnegative(), and update_bitmask().
Implements vrange.
References wi::max_value(), set(), TYPE_PRECISION, UNSIGNED, and wi::zero().
Implements vrange.
References ggc_alloc(), m_bitmask, vrange::m_kind, m_max, m_min, m_type, wi::max_value(), wi::one(), irange_bitmask::set_unknown(), type(), TYPE_PRECISION, UNSIGNED, verify_range(), and VR_RANGE.
Referenced by set().
References gcc_checking_assert, TYPE_PRECISION, vrange::undefined_p(), vrange::update_bitmask(), and wi::zero().
|
inlinefinaloverridevirtual |
Implements vrange.
References vrange::m_kind, and VR_UNDEFINED.
Referenced by intersect(), prange(), and set().
Implements vrange.
References ggc_alloc(), m_bitmask, vrange::m_kind, m_max, m_min, m_type, wi::max_value(), irange_bitmask::set_unknown(), type(), TYPE_PRECISION, UNSIGNED, verify_range(), VR_VARYING, and wi::zero().
Referenced by intersect(), invert(), prange(), set(), and union_().
Implements vrange.
References ggc_alloc(), m_bitmask, vrange::m_kind, m_max, m_min, m_type, type(), TYPE_PRECISION, verify_range(), VR_RANGE, and wi::zero().
Implements vrange.
References lower_bound(), vrange::m_kind, m_min, upper_bound(), VR_RANGE, and wide_int_to_tree().
Referenced by operator_cast::op1_range(), and operator_cast::op1_range().
|
inlinestatic |
References POINTER_TYPE_P.
Referenced by vrange_allocator::clone_undefined(), vrange_allocator::clone_varying(), Value_Range::init(), ipa_supports_p(), Value_Range::supports_type_p(), and verify_range().
|
inlinefinaloverridevirtual |
Implements vrange.
References POINTER_TYPE_P.
|
inlinefinaloverridevirtual |
Implements vrange.
References gcc_checking_assert, m_type, and vrange::undefined_p().
Referenced by operator_cast::fold_range(), operator_lt::fold_range(), operator_le::fold_range(), operator_gt::fold_range(), operator_ge::fold_range(), operator_cast::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_cast::op1_range(), operator_cast::op1_range(), operator_cast::op1_range(), operator==(), set(), set_nonzero(), set_varying(), and set_zero().
|
finaloverridevirtual |
Implements vrange.
References m_max, and wide_int_to_tree().
|
inlineinherited |
References vrange::m_kind, and VR_UNDEFINED.
Referenced by inchash::add_vrange(), adjust_equivalence_range(), array_bounds_checker::check_array_ref(), frange::clear_nan(), frange::combine_zeros(), compare_nonzero_chars(), gori_compute::compute_operand_range(), gori_compute::compute_operand_range_switch(), frange::contains_p(), irange::contains_p(), 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_ranges(), find_range_for_lhs(), frange::flush_denormals_to_zero(), operator_lshift::fold_range(), operator_rshift::fold_range(), irange::get_bitmask(), get_bool_state(), vrange::get_nonzero_bits(), get_range_strlen_dynamic(), get_ref_base_and_extent(), get_shift_range(), get_size_range(), handle_printf_call(), irange::intersect(), frange::intersect(), unsupported_range::intersect(), intersect(), irange::intersect(), irange::intersect_bitmask(), irange::invert(), invert(), irange::irange_contains_p(), irange::irange_single_pair_union(), frange::known_isfinite(), operator_identity::lhs_op1_relation(), operator_plus::lhs_op1_relation(), operator_minus::lhs_op1_relation(), operator_rshift::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_bitwise_and::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_cast::lhs_op1_relation(), operator_identity::lhs_op1_relation(), operator_cast::lhs_op1_relation(), lower_bound(), frange::lower_bound(), frange::maybe_isinf(), frange::maybe_isnan(), frange::maybe_isnan(), frange::nan_signbit_p(), irange::nonzero_p(), operator_equal::op1_op2_relation(), operator_not_equal::op1_op2_relation(), operator_lt::op1_op2_relation(), operator_le::op1_op2_relation(), operator_gt::op1_op2_relation(), operator_ge::op1_op2_relation(), operator_equal::op1_op2_relation(), operator_not_equal::op1_op2_relation(), operator_lt::op1_op2_relation(), operator_le::op1_op2_relation(), operator_gt::op1_op2_relation(), operator_ge::op1_op2_relation(), operator_equal::op1_op2_relation(), operator_not_equal::op1_op2_relation(), operator_lt::op1_op2_relation(), operator_le::op1_op2_relation(), operator_gt::op1_op2_relation(), operator_ge::op1_op2_relation(), foperator_div::op1_range(), operator_plus::op1_range(), operator_minus::op1_range(), operator_mult::op1_range(), operator_le::op1_range(), foperator_unordered_lt::op1_range(), foperator_unordered_le::op1_range(), foperator_unordered_gt::op1_range(), foperator_unordered_ge::op1_range(), operator_lt::op1_range(), operator_gt::op1_range(), operator_ge::op1_range(), operator_rshift::op1_range(), pointer_or_operator::op1_range(), operator_cast::op1_range(), operator_addr_expr::op1_range(), operator_bitwise_not::op1_range(), operator_bitwise_xor::op1_range(), operator_lshift::op1_range(), operator_bitwise_and::op1_range(), operator_bitwise_or::op1_range(), operator_exact_divide::op1_range(), operator_trunc_mod::op1_range(), operator_plus::op1_range(), operator_minus::op1_range(), operator_mult::op1_range(), operator_not_equal::op1_range(), operator_lt::op1_range(), operator_le::op1_range(), operator_gt::op1_range(), operator_ge::op1_range(), operator_equal::op1_range(), operator_cast::op1_range(), operator_cast::op1_range(), operator_not_equal::op1_range(), operator_lt::op1_range(), operator_le::op1_range(), operator_gt::op1_range(), operator_ge::op1_range(), operator_equal::op1_range(), operator_cast::op1_range(), operator_addr_expr::op1_range(), foperator_div::op2_range(), operator_minus::op2_range(), operator_le::op2_range(), foperator_unordered_lt::op2_range(), foperator_unordered_le::op2_range(), foperator_unordered_gt::op2_range(), foperator_unordered_ge::op2_range(), operator_lt::op2_range(), operator_gt::op2_range(), operator_ge::op2_range(), operator_trunc_mod::op2_range(), operator_minus::op2_range(), operator_lt::op2_range(), operator_le::op2_range(), operator_gt::op2_range(), operator_ge::op2_range(), operator_lt::op2_range(), operator_le::op2_range(), operator_gt::op2_range(), operator_ge::op2_range(), range_op_handler::op2_range(), frange::operator==(), operator==(), range_fits_type_p(), range_includes_zero_p(), vrange::set_nonzero_bits(), set_nonzero_range_from_mask(), irange::set_range_from_bitmask(), set_switch_stmt_execution_predicate(), frange::signbit_p(), simplify_using_ranges::simplify(), 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(), simplify_using_ranges::two_valued_val_range_p(), type(), frange::type(), Value_Range::undefined_p(), irange::union_(), frange::union_(), unsupported_range::union_(), union_(), irange::union_bitmask(), unswitch_predicate::unswitch_predicate(), irange::update_bitmask(), update_bitmask(), operator_equal::update_bitmask(), frange::update_nan(), frange::update_nan(), frange::update_nan(), upper_bound(), frange::upper_bound(), relation_oracle::validate_relation(), varying_compatible_p(), vect_get_range_info(), frange::verify_range(), and vr_set_zero_nonzero_bits().
Implements vrange.
References ggc_alloc(), lower_bound(), m_bitmask, wi::max(), wi::min(), r, set_varying(), vrange::undefined_p(), UNSIGNED, upper_bound(), vrange::varying_p(), and verify_range().
|
virtualinherited |
Reimplemented in irange.
Referenced by vrange::set_nonzero_bits(), and Value_Range::update_bitmask().
|
finaloverride |
|
inline |
References gcc_checking_assert, m_max, and vrange::undefined_p().
Referenced by build_le(), contains_p(), operator_cast::fold_range(), operator_not_equal::fold_range(), operator_equal::fold_range(), operator_lt::fold_range(), operator_le::fold_range(), operator_gt::fold_range(), operator_ge::fold_range(), pointer_plus_operator::fold_range(), operator_cast::fold_range(), intersect(), invert(), operator_not_equal::op1_range(), operator_equal::op1_range(), singleton_p(), and union_().
|
inlineprotected |
References get_bitmask(), m_max, m_min, and vrange::undefined_p().
Referenced by intersect(), update_bitmask(), and verify_range().
|
inlineinherited |
References vrange::m_kind, and VR_VARYING.
Referenced by array_bounds_checker::check_array_ref(), compare_nonzero_chars(), gori_compute::compute_operand_range(), frange::contains_p(), contains_p(), unsupported_range::contains_p(), strlen_pass::count_nonzero_bytes_addr(), determine_value_range(), expr_to_aff_combination(), find_case_label_ranges(), operator_cast::fold_range(), get_range_strlen_dynamic(), get_ref_base_and_extent(), irange::intersect(), frange::intersect(), unsupported_range::intersect(), intersect(), irange::invert(), invert(), irange::irange_contains_p(), irange::irange_single_pair_union(), frange::known_isfinite(), frange::maybe_isinf(), operator_cast::op1_range(), operator_bitwise_xor::op1_range(), frange::operator==(), operator==(), range_fits_type_p(), range_includes_zero_p(), 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(), irange::union_(), frange::union_(), unsupported_range::union_(), union_(), unswitch_predicate::unswitch_predicate(), Value_Range::varying_p(), and vr_set_zero_nonzero_bits().
void prange::verify_range | ( | ) | const |
References gcc_checking_assert, vrange::m_discriminator, vrange::m_kind, supports_p(), varying_compatible_p(), VR_PRANGE, VR_RANGE, VR_UNDEFINED, and VR_VARYING.
Referenced by intersect(), operator=(), set(), set_nonzero(), set_varying(), set_zero(), union_(), and update_bitmask().
|
inlinefinaloverridevirtual |
Implements vrange.
References vrange::m_kind, m_max, m_min, and VR_RANGE.
Referenced by operator_lt::fold_range(), operator_bitwise_and::fold_range(), operator_min::fold_range(), and operator_max::fold_range().
|
friend |
|
friend |
|
protected |
Referenced by get_bitmask(), intersect(), operator=(), operator==(), set(), set_nonzero(), set_varying(), set_zero(), union_(), and update_bitmask().
|
protectedinherited |
|
protectedinherited |
Referenced by frange::combine_zeros(), frange::contains_p(), frange::internal_singleton_p(), irange::intersect(), frange::intersect(), irange::intersect(), frange::intersect_nans(), irange::invert(), frange::known_isfinite(), frange::known_isinf(), frange::known_isnan(), frange::maybe_isinf(), nonzero_p(), irange::normalize_kind(), frange::normalize_kind(), frange::operator=(), irange::operator=(), operator=(), vrange::operator=(), frange::operator==(), operator==(), frange::set(), irange::set(), set(), frange::set_nan(), set_nonzero(), irange::set_nonzero(), set_undefined(), unsupported_range::set_undefined(), irange::set_undefined(), frange::set_undefined(), set_varying(), irange::set_varying(), frange::set_varying(), unsupported_range::set_varying(), set_zero(), singleton_p(), vrange::undefined_p(), irange::union_(), frange::union_nans(), irange::update_bitmask(), update_bitmask(), irange::varying_compatible_p(), vrange::varying_p(), irange::verify_range(), frange::verify_range(), verify_range(), zero_p(), irange::zero_p(), and frange::zero_p().
|
protected |
Referenced by intersect(), nonzero_p(), operator=(), operator==(), set(), set_nonzero(), set_varying(), set_zero(), ubound(), upper_bound(), varying_compatible_p(), and zero_p().
|
protected |
Referenced by intersect(), lbound(), lower_bound(), nonzero_p(), operator=(), operator==(), set(), set_nonzero(), set_varying(), set_zero(), singleton_p(), varying_compatible_p(), and zero_p().
|
protected |
Referenced by intersect(), operator=(), set(), set_nonzero(), set_varying(), set_zero(), and type().