GCC Middle and Back End API Reference
vrange Class Referenceabstract

#include <value-range.h>

Inheritance diagram for vrange:

Public Member Functions

virtual void accept (const class vrange_visitor &v) const =0
 
virtual void set (tree, tree, value_range_kind=VR_RANGE)=0
 
virtual tree type () const =0
 
virtual bool supports_type_p (const_tree type) const =0
 
virtual void set_varying (tree type)=0
 
virtual void set_undefined ()=0
 
virtual bool union_ (const vrange &)=0
 
virtual bool intersect (const vrange &)=0
 
virtual bool singleton_p (tree *result=NULL) const =0
 
virtual bool contains_p (tree cst) const =0
 
virtual bool zero_p () const =0
 
virtual bool nonzero_p () const =0
 
virtual void set_nonzero (tree type)=0
 
virtual void set_zero (tree type)=0
 
virtual void set_nonnegative (tree type)=0
 
virtual bool fits_p (const vrange &r) const =0
 
virtual ~vrange ()
 
virtual tree lbound () const =0
 
virtual tree ubound () const =0
 
virtual void update_bitmask (const class irange_bitmask &)
 
virtual irange_bitmask get_bitmask () const
 
wide_int get_nonzero_bits () const
 
void set_nonzero_bits (const wide_int &bits)
 
bool varying_p () const
 
bool undefined_p () const
 
vrangeoperator= (const vrange &)
 
bool operator== (const vrange &) const
 
bool operator!= (const vrange &r) const
 
void dump (FILE *) const
 

Protected Member Functions

 vrange (enum value_range_discriminator d)
 

Protected Attributes

enum value_range_kind m_kind: 8
 
enum value_range_discriminator m_discriminator: 4
 

Friends

class Value_Range
 
class range_op_handler
 
template<typename T >
bool is_a (vrange &)
 
void streamer_write_vrange (struct output_block *ob, const vrange &v)
 

Constructor & Destructor Documentation

◆ ~vrange()

virtual vrange::~vrange ( )
inlinevirtual

◆ vrange()

vrange::vrange ( enum value_range_discriminator d)
inlineprotected

Member Function Documentation

◆ accept()

virtual void vrange::accept ( const class vrange_visitor & v) const
pure virtual

Referenced by Value_Range::accept(), and dump().

◆ contains_p()

virtual bool vrange::contains_p ( tree cst) const
pure virtual

◆ dump()

◆ fits_p()

virtual bool vrange::fits_p ( const vrange & r) const
pure virtual

Implemented in frange, irange, prange, and unsupported_range.

◆ get_bitmask()

irange_bitmask vrange::get_bitmask ( ) const
virtual

Reimplemented in irange, and prange.

References TYPE_PRECISION.

Referenced by Value_Range::get_bitmask(), get_nonzero_bits(), and update_known_bitmask().

◆ get_nonzero_bits()

◆ intersect()

◆ lbound()

virtual tree vrange::lbound ( ) const
pure virtual

Implemented in frange, irange, prange, and unsupported_range.

Referenced by Value_Range::lbound().

◆ nonzero_p()

virtual bool vrange::nonzero_p ( ) const
pure virtual

Implemented in frange, irange, prange, and unsupported_range.

Referenced by Value_Range::nonzero_p().

◆ operator!=()

bool vrange::operator!= ( const vrange & r) const
inline

References r.

◆ operator=()

◆ operator==()

bool vrange::operator== ( const vrange & src) const

◆ set()

virtual void vrange::set ( tree ,
tree ,
value_range_kind = VR_RANGE )
pure virtual

Implemented in frange, irange, prange, and unsupported_range.

Referenced by Value_Range::Value_Range().

◆ set_nonnegative()

virtual void vrange::set_nonnegative ( tree type)
pure virtual

Implemented in frange, irange, prange, and unsupported_range.

◆ set_nonzero()

virtual void vrange::set_nonzero ( tree type)
pure virtual

Implemented in frange, irange, prange, and unsupported_range.

Referenced by Value_Range::set_nonzero().

◆ set_nonzero_bits()

void vrange::set_nonzero_bits ( const wide_int & bits)

◆ set_undefined()

virtual void vrange::set_undefined ( )
pure virtual

◆ set_varying()

virtual void vrange::set_varying ( tree type)
pure virtual

Implemented in frange, irange, prange, and unsupported_range.

Referenced by Value_Range::set_varying().

◆ set_zero()

virtual void vrange::set_zero ( tree type)
pure virtual

Implemented in frange, irange, prange, and unsupported_range.

Referenced by Value_Range::set_zero().

◆ singleton_p()

virtual bool vrange::singleton_p ( tree * result = NULL) const
pure virtual

◆ supports_type_p()

virtual bool vrange::supports_type_p ( const_tree type) const
pure virtual

Implemented in frange, irange, prange, and unsupported_range.

◆ type()

◆ ubound()

virtual tree vrange::ubound ( ) const
pure virtual

Implemented in frange, irange, prange, and unsupported_range.

Referenced by Value_Range::ubound().

◆ undefined_p()

bool vrange::undefined_p ( ) const
inline

References m_kind, and VR_UNDEFINED.

Referenced by inchash::add_vrange(), 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(), gori_compute::compute_operand_range(), gori_compute::compute_operand_range_switch(), 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_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_bool_state(), 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_identity::lhs_op1_relation(), operator_identity::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(), operator_equal::op1_op2_relation(), operator_equal::op1_op2_relation(), operator_equal::op1_op2_relation(), operator_ge::op1_op2_relation(), operator_ge::op1_op2_relation(), operator_ge::op1_op2_relation(), operator_gt::op1_op2_relation(), operator_gt::op1_op2_relation(), operator_gt::op1_op2_relation(), operator_le::op1_op2_relation(), operator_le::op1_op2_relation(), operator_le::op1_op2_relation(), operator_lt::op1_op2_relation(), operator_lt::op1_op2_relation(), operator_lt::op1_op2_relation(), operator_not_equal::op1_op2_relation(), operator_not_equal::op1_op2_relation(), operator_not_equal::op1_op2_relation(), 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_addr_expr::op1_range(), operator_addr_expr::op1_range(), operator_bitwise_and::op1_range(), operator_bitwise_not::op1_range(), operator_bitwise_or::op1_range(), operator_bitwise_xor::op1_range(), operator_cast::op1_range(), operator_cast::op1_range(), operator_cast::op1_range(), operator_cast::op1_range(), operator_equal::op1_range(), operator_equal::op1_range(), operator_exact_divide::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_lshift::op1_range(), operator_lt::op1_range(), operator_lt::op1_range(), operator_lt::op1_range(), operator_minus::op1_range(), operator_minus::op1_range(), operator_mult::op1_range(), operator_mult::op1_range(), operator_not_equal::op1_range(), operator_not_equal::op1_range(), operator_plus::op1_range(), operator_plus::op1_range(), operator_rshift::op1_range(), operator_trunc_mod::op1_range(), pointer_or_operator::op1_range(), range_op_handler::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(), operator_minus::op2_range(), operator_minus::op2_range(), operator_trunc_mod::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(), 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_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(), simplify_using_ranges::two_valued_val_range_p(), frange::type(), prange::type(), Value_Range::undefined_p(), frange::union_(), irange::union_(), prange::union_(), unsupported_range::union_(), irange::union_bitmask(), unswitch_predicate::unswitch_predicate(), irange::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().

◆ union_()

virtual bool vrange::union_ ( const vrange & )
pure virtual

◆ update_bitmask()

void vrange::update_bitmask ( const class irange_bitmask & )
virtual

Reimplemented in irange.

Referenced by set_nonzero_bits(), and Value_Range::update_bitmask().

◆ varying_p()

bool vrange::varying_p ( ) const
inline

References m_kind, and VR_VARYING.

Referenced by gimple_infer_range::add_range(), phi_group::calculate_using_modifier(), array_bounds_checker::check_array_ref(), compare_nonzero_chars(), compute_distributive_range(), gori_compute::compute_operand_range(), frange::contains_p(), prange::contains_p(), unsupported_range::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(), operator_cast::op1_range(), frange::operator==(), prange::operator==(), phi_group::phi_group(), phi_analyzer::process_phi(), 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(), frange::union_(), irange::union_(), prange::union_(), unsupported_range::union_(), unswitch_predicate::unswitch_predicate(), Value_Range::varying_p(), and vr_set_zero_nonzero_bits().

◆ zero_p()

virtual bool vrange::zero_p ( ) const
pure virtual

Implemented in frange, irange, prange, and unsupported_range.

Referenced by get_bool_state(), and Value_Range::zero_p().

Friends And Related Symbol Documentation

◆ is_a

template<typename T >
bool is_a ( vrange & )
friend

Referenced by as_a(), as_a(), and is_a().

◆ range_op_handler

friend class range_op_handler
friend

◆ streamer_write_vrange

void streamer_write_vrange ( struct output_block * ob,
const vrange & v )
friend

◆ Value_Range

friend class Value_Range
friend

Field Documentation

◆ m_discriminator

◆ m_kind


The documentation for this class was generated from the following files: