GCC Middle and Back End API Reference
|
#include <range-op.h>
Public Member Functions | |
range_op_handler () | |
range_op_handler (unsigned) | |
operator bool () const | |
range_operator * | range_op () const |
bool | fold_range (vrange &r, tree type, const vrange &lh, const vrange &rh, relation_trio=TRIO_VARYING) const |
bool | op1_range (vrange &r, tree type, const vrange &lhs, const vrange &op2, relation_trio=TRIO_VARYING) const |
bool | op2_range (vrange &r, tree type, const vrange &lhs, const vrange &op1, relation_trio=TRIO_VARYING) const |
relation_kind | lhs_op1_relation (const vrange &lhs, const vrange &op1, const vrange &op2, relation_kind=VREL_VARYING) const |
relation_kind | lhs_op2_relation (const vrange &lhs, const vrange &op1, const vrange &op2, relation_kind=VREL_VARYING) const |
relation_kind | op1_op2_relation (const vrange &lhs, const vrange &op1, const vrange &op2) const |
bool | overflow_free_p (const vrange &lh, const vrange &rh, relation_trio=TRIO_VARYING) const |
bool | operand_check_p (tree, tree, tree) const |
Protected Member Functions | |
unsigned | dispatch_kind (const vrange &lhs, const vrange &op1, const vrange &op2) const |
void | discriminator_fail (const vrange &, const vrange &, const vrange &) const |
Protected Attributes | |
range_operator * | m_operator |
range_op_handler::range_op_handler | ( | ) |
range_op_handler::range_op_handler | ( | unsigned | code | ) |
References default_operator, m_operator, and operator_table.
|
protected |
References gcc_checking_assert, gcc_unreachable, and vrange::m_discriminator.
|
protected |
References dispatch_trio(), and vrange::m_discriminator.
Referenced by fold_range(), lhs_op1_relation(), lhs_op2_relation(), op1_op2_relation(), op1_range(), op2_range(), and overflow_free_p().
bool range_op_handler::fold_range | ( | vrange & | r, |
tree | type, | ||
const vrange & | lh, | ||
const vrange & | rh, | ||
relation_trio | rel = TRIO_VARYING ) const |
References as_a(), dispatch_kind(), range_operator::fold_range(), gcc_assert, gcc_checking_assert, m_operator, range_operator::operand_check_p(), r, RO_FFF, RO_FII, RO_IFF, RO_IFI, RO_III, RO_IPI, RO_IPP, RO_PIP, RO_PPI, RO_PPP, vrange::type(), and vrange::undefined_p().
Referenced by compute_distributive_range(), evaluate_conditions_for_known_args(), simplify_using_ranges::fold_cond_with_ops(), cfn_ubsan::fold_range(), operator_bitwise_not::fold_range(), operator_negate::fold_range(), range_query::get_tree_range(), ipa_value_range_from_jfunc(), ipa_vr_operation_and_type_effects(), operator_pointer_diff::op1_op2_relation_effect(), foperator_div::op1_range(), operator_cast::op1_range(), operator_exact_divide::op1_range(), operator_minus::op1_range(), operator_mult::op1_range(), operator_mult::op1_range(), operator_plus::op1_range(), operator_plus::op1_range(), propagate_vr_across_jump_function(), fold_using_range::range_of_range_op(), range_of_var_in_loop(), and gori_compute::refine_using_relation().
relation_kind range_op_handler::lhs_op1_relation | ( | const vrange & | lhs, |
const vrange & | op1, | ||
const vrange & | op2, | ||
relation_kind | rel = VREL_VARYING ) const |
References as_a(), dispatch_kind(), gcc_checking_assert, range_operator::lhs_op1_relation(), m_operator, RO_FFF, RO_IFF, RO_III, RO_IPP, RO_PII, RO_PPP, and VREL_VARYING.
Referenced by fold_using_range::range_of_range_op().
relation_kind range_op_handler::lhs_op2_relation | ( | const vrange & | lhs, |
const vrange & | op1, | ||
const vrange & | op2, | ||
relation_kind | rel = VREL_VARYING ) const |
References as_a(), dispatch_kind(), gcc_checking_assert, range_operator::lhs_op2_relation(), m_operator, RO_FFF, RO_IFF, RO_III, and VREL_VARYING.
Referenced by fold_using_range::range_of_range_op().
relation_kind range_op_handler::op1_op2_relation | ( | const vrange & | lhs, |
const vrange & | op1, | ||
const vrange & | op2 ) const |
bool range_op_handler::op1_range | ( | vrange & | r, |
tree | type, | ||
const vrange & | lhs, | ||
const vrange & | op2, | ||
relation_trio | rel = TRIO_VARYING ) const |
References as_a(), dispatch_kind(), gcc_assert, gcc_checking_assert, m_operator, range_operator::op1_range(), range_operator::operand_check_p(), r, RO_FFF, RO_FIF, RO_III, RO_IPI, RO_PIP, RO_PPI, RO_PPP, vrange::type(), and vrange::undefined_p().
Referenced by gimple_range_op_handler::calc_op1(), fold_using_range::condexpr_adjust(), and gori_compute::refine_using_relation().
bool range_op_handler::op2_range | ( | vrange & | r, |
tree | type, | ||
const vrange & | lhs, | ||
const vrange & | op1, | ||
relation_trio | rel = TRIO_VARYING ) const |
References as_a(), dispatch_kind(), gcc_assert, gcc_checking_assert, m_operator, range_operator::op2_range(), range_operator::operand_check_p(), r, RO_FFF, RO_FIF, RO_III, RO_IPP, RO_PIP, vrange::type(), and vrange::undefined_p().
Referenced by gimple_range_op_handler::calc_op1(), gimple_range_op_handler::calc_op2(), fold_using_range::condexpr_adjust(), and gori_compute::refine_using_relation().
References gcc_checking_assert, m_operator, and range_operator::operand_check_p().
Referenced by ipa_value_range_from_jfunc(), ipa_vr_operation_and_type_effects(), and propagate_vr_across_jump_function().
range_op_handler::operator bool | ( | ) | const |
References default_operator.
bool range_op_handler::overflow_free_p | ( | const vrange & | lh, |
const vrange & | rh, | ||
relation_trio | rel = TRIO_VARYING ) const |
References as_a(), dispatch_kind(), gcc_checking_assert, m_operator, range_operator::overflow_free_p(), and RO_III.
range_operator * range_op_handler::range_op | ( | ) | const |
References default_operator, and m_operator.
Referenced by gimple_range_op_handler::maybe_non_standard(), and op1_range().
|
protected |
Referenced by fold_range(), lhs_op1_relation(), lhs_op2_relation(), gimple_range_op_handler::maybe_builtin_call(), gimple_range_op_handler::maybe_non_standard(), op1_op2_relation(), cfn_signbit::op1_range(), op1_range(), op1_range(), op2_range(), gimple_range_op_handler::operand1(), gimple_range_op_handler::operand2(), operand_check_p(), overflow_free_p(), range_op(), and range_op_handler().