GCC Middle and Back End API Reference
|
#include <gimple-range.h>
Data Fields | |
auto_edge_flag | non_executable_edge_flag |
Protected Member Functions | |
bool | fold_range_internal (vrange &r, gimple *s, tree name) |
void | prefill_name (vrange &r, tree name) |
void | prefill_stmt_dependencies (tree ssa) |
bool | get_tree_range (vrange &v, tree expr, gimple *stmt, basic_block bbentry=NULL, basic_block bbexit=NULL) |
bool | invoke_range_of_expr (vrange &v, tree expr, gimple *stmt, basic_block bbentry, basic_block bbexit) |
bool | get_arith_expr_range (vrange &r, tree expr, gimple *stmt) |
Protected Attributes | |
ranger_cache | m_cache |
range_tracer | tracer |
basic_block | current_bb |
vec< tree > | m_stmt_list |
relation_oracle * | m_oracle |
Friends | |
class | path_range_query |
Header file for the GIMPLE range interface. Copyright (C) 2019-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/>.
Code for GIMPLE range related routines. Copyright (C) 2019-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/>.
References cfun, dump_file, range_tracer::enable_trace(), FOR_ALL_BB_FN, FOR_EACH_EDGE, gcc_checking_assert, ggc_alloc(), m_cache, range_query::m_oracle, m_stmt_list, non_executable_edge_flag, num_ssa_names, range_query::oracle(), RANGER_DEBUG_TRACE, basic_block_def::succs, and tracer.
gimple_ranger::~gimple_ranger | ( | ) |
References m_stmt_list.
range_query & gimple_ranger::const_query | ( | ) |
References ranger_cache::const_query(), and m_cache.
Referenced by execute_ranger_vrp().
void gimple_ranger::debug | ( | ) |
References dump(), and ggc_alloc().
Reimplemented from range_query.
References cfun, ranger_cache::dump(), dump_bb(), FOR_EACH_BB_FN, and m_cache.
Referenced by debug(), dump_ranger(), and execute_ranger_vrp().
void gimple_ranger::dump_bb | ( | FILE * | f, |
basic_block | bb ) |
References ranger_cache::block_range(), Value_Range::dump(), ranger_cache::dump_bb(), dump_bb(), FOR_EACH_EDGE, ranger_cache::get_global_range(), ggc_alloc(), gimple_bb(), gimple_range_ssa_p(), gori(), basic_block_def::index, m_cache, num_ssa_names, print_generic_expr(), ranger_cache::range_on_edge(), ssa_name, SSA_NAME_DEF_STMT, basic_block_def::succs, TDF_NONE, TDF_SLIM, TREE_TYPE, and Value_Range::varying_p().
Referenced by dump(), dump_bb(), and dump_ranger().
void gimple_ranger::export_global_ranges | ( | ) |
References fold_using_range::fold_stmt(), gori(), and r.
Referenced by prefill_stmt_dependencies(), and range_of_stmt().
bool gimple_ranger::fold_stmt | ( | gimple_stmt_iterator * | gsi, |
tree(*)(tree) | valueize ) |
References current_bb, fold_stmt(), ggc_alloc(), gimple_bb(), gsi_stmt(), and NULL.
Referenced by rvrp_folder::fold_stmt(), and fold_stmt().
|
protectedinherited |
References BINARY_CLASS_P, COMPARISON_CLASS_P, drop_tree_overflow(), expr, range_op_handler::fold_range(), ggc_alloc(), gimple_range_global(), gimple_range_ssa_p(), range_query::invoke_range_of_expr(), r, real_isnan(), real_isneg(), REAL_VALUE_TYPE, frange::set(), frange::set_nan(), Value_Range::supports_type_p(), TREE_CODE, TREE_OPERAND, TREE_OVERFLOW_P, TREE_REAL_CST_PTR, tree_single_nonzero_warnv_p(), TREE_TYPE, type(), TYPE_P, and UNARY_CLASS_P.
Referenced by assume_query::calculate_phi(), assume_query::range_of_expr(), global_range_query::range_of_expr(), dom_ranger::range_of_expr(), ssa_cache::range_of_expr(), range_of_expr(), ranger_cache::range_of_expr(), range_of_stmt(), ranger_cache::range_on_edge(), dom_ranger::range_on_edge(), range_on_edge(), range_on_entry(), and range_on_exit().
|
inline |
References m_cache, and ranger_cache::m_gori.
Referenced by hybrid_jt_simplifier::compute_exit_dependencies(), path_range_query::compute_exit_dependencies(), path_range_query::compute_outgoing_relations(), path_range_query::compute_ranges_in_block(), dump_bb(), evaluate_control_stmt_using_entry_checks(), fold_range_internal(), remove_unreachable::handle_early(), path_range_query::range_of_stmt(), register_transitive_inferred_ranges(), remove_unreachable::remove_and_update_globals(), and dom_opt_dom_walker::set_global_ranges_from_unreachable_edges().
|
protectedinherited |
References gcc_checking_assert, ggc_alloc(), r, range_query::range_of_expr(), range_query::range_on_entry(), and range_query::range_on_exit().
Referenced by range_query::get_tree_range().
|
inlineinherited |
References ranger_cache::get_global_range(), ggc_alloc(), gimple_range_ssa_p(), m_cache, m_stmt_list, r, SSA_NAME_DEF_STMT, and gimple_range_op_handler::supported_p().
Referenced by prefill_stmt_dependencies().
References changed, dump_file, fold_range_internal(), gcc_checking_assert, ranger_cache::get_global_range(), ggc_alloc(), gimple_bb(), gimple_phi_arg_def(), gimple_phi_num_args(), gimple_phi_result(), range_tracer::header(), m_cache, m_stmt_list, NULL_TREE, gimple_range_op_handler::operand1(), gimple_range_op_handler::operand2(), prefill_name(), range_tracer::print(), print_generic_expr(), print_gimple_stmt(), r, ranger_cache::set_global_range(), SSA_NAME_DEF_STMT, SSA_NAME_IS_DEFAULT_DEF, gimple_range_op_handler::supported_p(), TDF_SLIM, tracer, range_tracer::trailer(), and TREE_TYPE.
Referenced by range_of_stmt().
|
inherited |
References get_range(), ggc_alloc(), gimple_bb(), range_query::m_oracle, relation_oracle::query_relation(), range_query::range_of_expr(), TREE_CODE, TREE_TYPE, and VREL_VARYING.
Referenced by fur_stmt::query_relation(), and fold_using_range::range_of_phi().
Implements range_query.
References ranger_cache::block_range(), current_bb, dump_file, ranger_cache::get_global_range(), range_query::get_tree_range(), ggc_alloc(), gimple_bb(), gimple_get_lhs(), gimple_range_ssa_p(), range_tracer::header(), basic_block_def::index, is_gimple_debug(), m_cache, range_tracer::print(), print_generic_expr(), print_gimple_stmt(), r, ranger_cache::range_of_expr(), range_of_stmt(), range_on_entry(), SSA_NAME_DEF_STMT, TDF_SLIM, tracer, range_tracer::trailer(), and TREE_TYPE.
Referenced by execute_ranger_vrp(), range_on_exit(), register_transitive_inferred_ranges(), remove_unreachable::remove_and_update_globals(), path_range_query::ssa_range_in_phi(), and vect_recog_divmod_pattern().
Reimplemented from range_query.
References changed, dump_file, exp(), fold_range_internal(), FOR_EACH_GORI_EXPORT_NAME, ranger_cache::get_global_range(), range_query::get_tree_range(), ggc_alloc(), gimple_bb(), gimple_get_lhs(), gimple_range_ssa_p(), range_tracer::header(), m_cache, ranger_cache::m_gori, NULL, NULL_TREE, prefill_stmt_dependencies(), print_generic_expr(), print_gimple_stmt(), ranger_cache::propagate_updated_value(), r, ranger_cache::set_global_range(), TDF_SLIM, tracer, range_tracer::trailer(), and TREE_TYPE.
Referenced by debug_seed_ranger(), range_of_expr(), range_on_entry(), and register_inferred_ranges().
Support routines for value queries. Copyright (C) 2020-2024 Free Software Foundation, Inc. Contributed by Aldy Hernandez <aldyh@redhat.com> and Andrew MacLeod <amacleod@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/>.
Reimplemented from range_query.
References dump_file, gcc_checking_assert, range_query::get_tree_range(), ggc_alloc(), gimple_range_ssa_p(), range_tracer::header(), m_cache, ranger_cache::m_exit, infer_range_manager::maybe_adjust_range(), non_executable_edge_flag, NULL, print_generic_expr(), r, range_compatible_p(), ranger_cache::range_on_edge(), range_on_exit(), TDF_SLIM, tracer, range_tracer::trailer(), and TREE_TYPE.
Referenced by dom_opt_dom_walker::set_global_ranges_from_unreachable_edges(), and path_range_query::ssa_range_in_phi().
|
overridevirtual |
Reimplemented from range_query.
References ranger_cache::block_range(), dump_file, range_query::get_tree_range(), ggc_alloc(), gimple_range_ssa_p(), range_tracer::header(), basic_block_def::index, m_cache, NULL, print_generic_expr(), r, range_of_stmt(), SSA_NAME_DEF_STMT, TDF_SLIM, tracer, range_tracer::trailer(), and TREE_TYPE.
Referenced by remove_unreachable::handle_early(), range_of_expr(), range_on_exit(), path_range_query::range_on_path_entry(), and remove_unreachable::remove_and_update_globals().
|
overridevirtual |
Reimplemented from range_query.
References dump_file, gcc_checking_assert, range_query::get_tree_range(), ggc_alloc(), gimple_bb(), gimple_range_ssa_p(), range_tracer::header(), basic_block_def::index, last_nondebug_stmt(), NULL, print_generic_expr(), r, range_compatible_p(), range_of_expr(), range_on_entry(), SSA_NAME_DEF_STMT, TDF_SLIM, tracer, range_tracer::trailer(), and TREE_TYPE.
Referenced by range_on_edge().
References ranger_cache::apply_inferred_ranges(), dump_file, fputc(), ggc_alloc(), gimple_get_lhs(), m_cache, print_generic_expr(), range_of_stmt(), set_range_info(), TDF_SLIM, and TREE_TYPE.
Referenced by rvrp_folder::fold_stmt(), and rvrp_folder::pre_fold_bb().
void gimple_ranger::register_transitive_inferred_ranges | ( | basic_block | bb | ) |
References range_def_chain::depend1(), range_def_chain::depend2(), dump_file, dump_flags, g, ggc_alloc(), gimple_get_lhs(), gimple_range_ssa_p(), gori(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_stmt(), basic_block_def::index, m_cache, ranger_cache::m_exit, r, range_of_expr(), ranger_cache::register_inferred_value(), si, TDF_DETAILS, and TREE_TYPE.
Referenced by rvrp_folder::pre_fold_stmt().
Reimplemented in substitute_and_fold_engine, copy_folder, rvrp_folder, fvrp_folder, and ccp_folder.
References NULL_TREE, r, range_query::range_of_expr(), Value_Range::supports_type_p(), and TREE_TYPE.
Referenced by rvrp_folder::value_of_expr(), and fvrp_folder::value_of_expr().
Reimplemented in substitute_and_fold_engine, rvrp_folder, and fvrp_folder.
References gcc_checking_assert, gimple_get_lhs(), NULL_TREE, r, range_query::range_of_stmt(), Value_Range::supports_type_p(), and TREE_TYPE.
Referenced by rvrp_folder::value_of_stmt(), and fvrp_folder::value_of_stmt().
Reimplemented in rvrp_folder, fvrp_folder, and substitute_and_fold_engine.
References NULL_TREE, r, range_query::range_of_expr(), range_query::range_on_edge(), Value_Range::supports_type_p(), and TREE_TYPE.
Referenced by rvrp_folder::value_on_edge(), and fvrp_folder::value_on_edge().
|
virtualinherited |
References gcc_checking_assert, NULL_TREE, r, range_query::range_on_entry(), Value_Range::supports_type_p(), and TREE_TYPE.
|
virtualinherited |
References gcc_checking_assert, NULL_TREE, r, range_query::range_on_exit(), Value_Range::supports_type_p(), and TREE_TYPE.
|
friend |
|
protected |
Referenced by fold_stmt(), and range_of_expr().
|
protected |
Referenced by path_range_query::adjust_for_non_null_uses(), const_query(), dump(), dump_bb(), export_global_ranges(), gimple_ranger(), gori(), prefill_name(), prefill_stmt_dependencies(), path_range_query::range_defined_in_block(), range_of_expr(), range_of_stmt(), range_on_edge(), range_on_entry(), register_inferred_ranges(), and register_transitive_inferred_ranges().
|
protectedinherited |
Referenced by ranger_cache::dump_bb(), ranger_cache::fill_block_cache(), path_range_query::get_path_oracle(), gimple_ranger(), path_range_query::maybe_register_phi_relation(), range_query::oracle(), path_range_query::path_range_query(), path_range_query::path_range_query(), range_query::query_relation(), range_query::query_relation(), range_query::range_query(), ranger_cache::ranger_cache(), path_range_query::~path_range_query(), and ranger_cache::~ranger_cache().
Referenced by gimple_ranger(), prefill_name(), prefill_stmt_dependencies(), and ~gimple_ranger().
auto_edge_flag gimple_ranger::non_executable_edge_flag |
Referenced by execute_ranger_vrp(), gimple_ranger(), and range_on_edge().
|
protected |
Referenced by gimple_ranger(), prefill_stmt_dependencies(), range_of_expr(), range_of_stmt(), range_on_edge(), range_on_entry(), and range_on_exit().