GCC Middle and Back End API Reference
prange Class Referenceabstract

#include <value-range.h>

Inheritance diagram for prange:
Collaboration diagram for prange:

Public Member Functions

 prange ()
 
 prange (const prange &)
 
 prange (tree type)
 
 prange (tree type, const wide_int &, const wide_int &, value_range_kind=VR_RANGE)
 
virtual bool supports_type_p (const_tree type) const final override
 
virtual void accept (const vrange_visitor &v) const final override
 
virtual void set_undefined () final override
 
virtual void set_varying (tree type) final override
 
virtual void set_nonzero (tree type) final override
 
virtual void set_zero (tree type) final override
 
virtual void set_nonnegative (tree type) final override
 
virtual bool contains_p (tree cst) const final override
 
virtual bool fits_p (const vrange &v) const final override
 
virtual bool singleton_p (tree *result=NULL) const final override
 
virtual bool zero_p () const final override
 
virtual bool nonzero_p () const final override
 
virtual void set (tree, tree, value_range_kind=VR_RANGE) final override
 
virtual tree type () const final override
 
virtual bool union_ (const vrange &v) final override
 
virtual bool intersect (const vrange &v) final override
 
virtual tree lbound () const final override
 
virtual tree ubound () const final override
 
prangeoperator= (const prange &)
 
bool operator== (const prange &) const
 
void set (tree type, const wide_int &, const wide_int &, value_range_kind=VR_RANGE)
 
void invert ()
 
bool contains_p (const wide_int &) const
 
wide_int lower_bound () const
 
wide_int upper_bound () const
 
void verify_range () const
 
irange_bitmask get_bitmask () const final override
 
void update_bitmask (const irange_bitmask &) final override
 
virtual void accept (const class vrange_visitor &v) const =0
 
virtual void update_bitmask (const class irange_bitmask &)
 
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

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
 

Constructor & Destructor Documentation

◆ prange() [1/4]

prange::prange ( )
inline

References set_undefined().

◆ prange() [2/4]

prange::prange ( const prange & r)
inline

References r.

◆ prange() [3/4]

prange::prange ( tree type)
inline

References set_varying().

◆ prange() [4/4]

prange::prange ( tree type,
const wide_int & lb,
const wide_int & ub,
value_range_kind kind = VR_RANGE )
inline

References set().

Member Function Documentation

◆ accept() [1/2]

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

◆ accept() [2/2]

void prange::accept ( const vrange_visitor & v) const
finaloverridevirtual

◆ contains_p() [1/2]

◆ contains_p() [2/2]

bool prange::contains_p ( tree cst) const
inlinefinaloverridevirtual

Implements vrange.

References contains_p(), ggc_alloc(), and wi::to_wide().

Referenced by contains_p().

◆ dump()

◆ fits_p()

bool prange::fits_p ( const vrange & v) const
inlinefinaloverridevirtual

Implements vrange.

◆ get_bitmask()

irange_bitmask prange::get_bitmask ( ) const
inlinefinaloverridevirtual

◆ get_nonzero_bits()

◆ intersect()

◆ invert()

◆ lbound()

tree prange::lbound ( ) const
finaloverridevirtual

Implements vrange.

References m_min, and wide_int_to_tree().

◆ lower_bound()

◆ nonzero_p()

bool prange::nonzero_p ( ) const
inlinefinaloverridevirtual

Implements vrange.

References vrange::m_kind, m_max, m_min, and VR_RANGE.

Referenced by find_what_p_points_to().

◆ operator!=()

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

References r.

◆ operator=()

prange & prange::operator= ( const prange & src)

◆ operator==() [1/2]

◆ operator==() [2/2]

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

◆ set() [1/2]

◆ set() [2/2]

void prange::set ( tree min,
tree max,
value_range_kind kind = VR_RANGE )
finaloverridevirtual

Implements vrange.

References set(), wi::to_wide(), and TREE_TYPE.

Referenced by invert(), prange(), set(), set_nonnegative(), and update_bitmask().

◆ set_nonnegative()

void prange::set_nonnegative ( tree type)
finaloverridevirtual

Implements vrange.

References wi::max_value(), set(), TYPE_PRECISION, UNSIGNED, and wi::zero().

◆ set_nonzero()

void prange::set_nonzero ( tree type)
inlinefinaloverridevirtual

◆ set_nonzero_bits()

void vrange::set_nonzero_bits ( const wide_int & bits)
inherited

◆ set_undefined()

void prange::set_undefined ( )
inlinefinaloverridevirtual

Implements vrange.

References vrange::m_kind, and VR_UNDEFINED.

Referenced by intersect(), prange(), and set().

◆ set_varying()

void prange::set_varying ( tree type)
inlinefinaloverridevirtual

◆ set_zero()

void prange::set_zero ( tree type)
inlinefinaloverridevirtual

◆ singleton_p()

bool prange::singleton_p ( tree * result = NULL) const
finaloverridevirtual

◆ supports_p()

◆ supports_type_p()

bool prange::supports_type_p ( const_tree type) const
inlinefinaloverridevirtual

Implements vrange.

References POINTER_TYPE_P.

◆ type()

◆ ubound()

tree prange::ubound ( ) const
finaloverridevirtual

Implements vrange.

References m_max, and wide_int_to_tree().

◆ undefined_p()

bool vrange::undefined_p ( ) const
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().

◆ union_()

◆ update_bitmask() [1/2]

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

Reimplemented in irange.

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

◆ update_bitmask() [2/2]

◆ upper_bound()

◆ varying_compatible_p()

bool prange::varying_compatible_p ( ) const
inlineprotected

◆ varying_p()

◆ verify_range()

◆ zero_p()

bool prange::zero_p ( ) const
inlinefinaloverridevirtual

Friends And Related Symbol Documentation

◆ prange_storage

◆ vrange_printer

Field Documentation

◆ m_bitmask

◆ m_discriminator

◆ m_kind

◆ m_max

◆ m_min

◆ m_type

tree prange::m_type
protected

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