GCC Middle and Back End API Reference
|
#include <gimple-range-op.h>
Static Public Member Functions | |
static bool | supported_p (gimple *s) |
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 |
Private Member Functions | |
void | maybe_builtin_call () |
void | maybe_non_standard () |
Private Attributes | |
gimple * | m_stmt |
tree | m_op1 |
tree | m_op2 |
Header file for the GIMPLE range-op interface. Copyright (C) 2022-2024 Free Software Foundation, Inc. Contributed by Andrew MacLeod <amacleod@redhat.com> and Aldy Hernandez <aldyh@redhat.com>. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
gimple_range_op_handler::gimple_range_op_handler | ( | gimple * | s | ) |
References get_code(), and m_stmt.
Referenced by gori_compute::compute_operand1_range(), gori_name_helper(), and op1_range().
bool gimple_range_op_handler::calc_op1 | ( | vrange & | r, |
const vrange & | lhs_range, | ||
const vrange & | op2_range, | ||
relation_trio | k = TRIO_VARYING ) |
bool gimple_range_op_handler::calc_op2 | ( | vrange & | r, |
const vrange & | lhs_range, | ||
const vrange & | op1_range, | ||
relation_trio | k = TRIO_VARYING ) |
References range_op_handler::op2_range(), operand1(), operand2(), r, value_range::set_varying(), TREE_TYPE, and vrange::undefined_p().
Referenced by gori_compute::compute_operand2_range(), and op2_range().
|
protectedinherited |
References gcc_checking_assert, gcc_unreachable, and vrange::m_discriminator.
|
protectedinherited |
References dispatch_trio(), and vrange::m_discriminator.
Referenced by range_op_handler::fold_range(), range_op_handler::lhs_op1_relation(), range_op_handler::lhs_op2_relation(), range_op_handler::op1_op2_relation(), range_op_handler::op2_range(), range_op_handler::overflow_free_p(), and pointer_plus_operator::update_bitmask().
|
inherited |
References as_a(), range_op_handler::dispatch_kind(), range_operator::fold_range(), gcc_assert, gcc_checking_assert, range_op_handler::m_operator, range_operator::operand_check_p(), r, RO_IFF, RO_IFI, RO_III, 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_vr_intersect_with_arith_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(), fold_using_range::range_of_range_op(), range_of_var_in_loop(), and gori_compute::refine_using_relation().
|
inline |
References gimple_get_lhs(), and m_stmt.
Referenced by gori_compute::compute_logical_operands(), gori_compute::compute_operand_range(), gori_calc_operands(), gori_name_helper(), gori_name_on_edge(), gori_on_edge(), gori_stmt_info::gori_stmt_info(), maybe_builtin_call(), fold_using_range::range_of_range_op(), and fold_using_range::relation_fold_and_or().
|
inherited |
References as_a(), range_op_handler::dispatch_kind(), gcc_checking_assert, range_operator::lhs_op1_relation(), range_op_handler::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().
|
inherited |
References as_a(), range_op_handler::dispatch_kind(), gcc_checking_assert, range_operator::lhs_op2_relation(), range_op_handler::m_operator, RO_FFF, RO_IFF, RO_III, and VREL_VARYING.
Referenced by fold_using_range::range_of_range_op().
|
private |
References as_a(), CASE_FLT_FN, gcc_checking_assert, gimple_call_arg(), gimple_call_combined_fn(), gimple_call_fnspec(), gimple_call_internal_p(), gimple_call_lhs(), gimple_call_num_args(), gimple_range_type(), is_a(), lhs(), m_op1, m_op2, range_op_handler::m_operator, m_stmt, oacc_get_ifn_dim_arg(), op_cfn_clrsb, op_cfn_clz(), op_cfn_clz_internal(), op_cfn_constant_float_p, op_cfn_constant_p, op_cfn_copysign, op_cfn_cos(), op_cfn_ctz(), op_cfn_ctz_internal(), op_cfn_ffs, op_cfn_goacc_dim_pos(), op_cfn_goacc_dim_size(), op_cfn_isfinite, op_cfn_isinf, op_cfn_isnormal, op_cfn_parity, op_cfn_pass_through_arg1, op_cfn_popcount, op_cfn_signbit, op_cfn_sin(), op_cfn_sqrt, op_cfn_strlen, op_cfn_tolower(), op_cfn_toupper(), op_cfn_ubsan_add, op_cfn_ubsan_mul, op_cfn_ubsan_sub, ptrdiff_type_node, range_compatible_p(), frange::supports_p(), irange::supports_p(), value_range::supports_type_p(), TREE_TYPE, and TYPE_PRECISION.
|
private |
|
inherited |
References as_a(), range_op_handler::dispatch_kind(), gcc_checking_assert, range_op_handler::m_operator, range_operator::op1_op2_relation(), RO_FFF, RO_IFF, RO_III, RO_IPP, and VREL_VARYING.
Referenced by gori_compute::compute_operand_range(), fur_source::register_outgoing_edges(), and fold_using_range::relation_fold_and_or().
|
inherited |
Referenced by calc_op1(), fold_using_range::condexpr_adjust(), and gori_compute::refine_using_relation().
|
inherited |
References as_a(), range_op_handler::dispatch_kind(), gcc_assert, gcc_checking_assert, range_op_handler::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 calc_op1(), calc_op2(), fold_using_range::condexpr_adjust(), and gori_compute::refine_using_relation().
|
inline |
References gcc_checking_assert, m_op1, and range_op_handler::m_operator.
Referenced by calc_op1(), calc_op2(), assume_query::calculate_stmt(), gori_compute::compute_operand1_and_operand2_range(), gori_compute::compute_operand1_range(), gori_compute::compute_operand2_range(), gori_compute::compute_operand_range(), gimple_infer_range::gimple_infer_range(), gimple_range_ssa_names(), gori_stmt_info::gori_stmt_info(), phi_group::is_modifier_p(), op2_range(), gimple_ranger::prefill_stmt_dependencies(), fold_using_range::range_of_range_op(), gori_compute::refine_using_relation(), fur_source::register_outgoing_edges(), and fold_using_range::relation_fold_and_or().
|
inline |
References gcc_checking_assert, m_op2, and range_op_handler::m_operator.
Referenced by calc_op1(), calc_op2(), assume_query::calculate_stmt(), gori_compute::compute_operand1_and_operand2_range(), gori_compute::compute_operand1_range(), gori_compute::compute_operand2_range(), gori_compute::compute_operand_range(), gimple_infer_range::gimple_infer_range(), gimple_range_ssa_names(), gori_stmt_info::gori_stmt_info(), phi_group::is_modifier_p(), op1_range(), gimple_ranger::prefill_stmt_dependencies(), fold_using_range::range_of_range_op(), gori_compute::refine_using_relation(), fur_source::register_outgoing_edges(), and fold_using_range::relation_fold_and_or().
References gcc_checking_assert, range_op_handler::m_operator, and range_operator::operand_check_p().
Referenced by ipa_vr_intersect_with_arith_jfunc(), and ipa_vr_operation_and_type_effects().
|
inherited |
References default_operator.
|
inherited |
|
inherited |
References default_operator, and range_op_handler::m_operator.
Referenced by maybe_non_standard(), and op1_range().
|
inline |
References m_stmt.
Referenced by gori_compute::compute_logical_operands(), gori_compute::compute_operand1_range(), gori_compute::compute_operand2_range(), gori_calc_operands(), gori_name_helper(), gori_name_on_edge(), gori_on_edge(), gori_stmt_info::gori_stmt_info(), and fold_using_range::range_of_range_op().
References get_code(), and is_a().
Referenced by gimple_outgoing_range_stmt_p(), gimple_ranger::prefill_name(), and gimple_ranger::prefill_stmt_dependencies().
|
private |
Referenced by maybe_builtin_call(), maybe_non_standard(), op1_range(), and operand1().
|
private |
Referenced by maybe_builtin_call(), maybe_non_standard(), op1_range(), and operand2().
|
protectedinherited |
Referenced by range_op_handler::fold_range(), range_op_handler::lhs_op1_relation(), range_op_handler::lhs_op2_relation(), maybe_builtin_call(), maybe_non_standard(), range_op_handler::op1_op2_relation(), cfn_signbit::op1_range(), op1_range(), range_op_handler::op2_range(), operand1(), operand2(), range_op_handler::operand_check_p(), range_op_handler::overflow_free_p(), range_op_handler::range_op(), range_op_handler::range_op_handler(), and pointer_plus_operator::update_bitmask().
|
private |
Referenced by calc_op1(), gimple_range_op_handler(), lhs(), maybe_builtin_call(), maybe_non_standard(), op1_range(), and stmt().