GCC Middle and Back End API Reference
|
#include <gimple-range-cache.h>
Data Fields | |
gori_compute | m_gori |
infer_range_manager | m_exit |
Protected Member Functions | |
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 | |
relation_oracle * | m_oracle |
Private Types | |
enum | rfd_mode { RFD_NONE , RFD_READ_ONLY , RFD_FILL } |
Private Member Functions | |
void | fill_block_cache (tree name, basic_block bb, basic_block def_bb) |
void | propagate_cache (tree name) |
bool | range_from_dom (vrange &r, tree name, basic_block bb, enum rfd_mode) |
void | resolve_dom (vrange &r, tree name, basic_block bb) |
void | range_of_def (vrange &r, tree name, basic_block bb=NULL) |
void | entry_range (vrange &r, tree expr, basic_block bb, enum rfd_mode) |
void | exit_range (vrange &r, tree expr, basic_block bb, enum rfd_mode) |
bool | edge_range (vrange &r, edge e, tree name, enum rfd_mode) |
Private Attributes | |
ssa_cache | m_globals |
block_range_cache | m_on_entry |
class temporal_cache * | m_temporal |
vec< basic_block > | m_workback |
class update_list * | m_update |
|
private |
ranger_cache::ranger_cache | ( | int | not_executable_flag, |
bool | use_imm_uses ) |
ranger_cache::~ranger_cache | ( | ) |
References range_query::m_oracle, m_temporal, m_update, and m_workback.
References infer_range_manager::add_range(), FOR_EACH_EDGE, ggc_alloc(), gimple_bb(), m_exit, NULL, register_inferred_value(), and stmt_ends_bb_p().
Referenced by gimple_ranger::register_inferred_ranges().
References block_range_cache::bb_range_p(), cfun, ENTRY_BLOCK_PTR_FOR_FN, fill_block_cache(), gcc_checking_assert, block_range_cache::get_bb_range(), ggc_alloc(), gimple_bb(), gimple_range_ssa_p(), gori_compute::has_edge_range_p(), m_gori, m_on_entry, NULL, r, SSA_NAME_DEF_STMT, and SSA_NAME_IS_DEFAULT_DEF.
Referenced by gimple_ranger::dump_bb(), gimple_ranger::range_of_expr(), and gimple_ranger::range_on_entry().
|
inline |
References m_globals.
Referenced by gimple_ranger::const_query().
Reimplemented from range_query.
References ssa_cache::dump(), ggc_alloc(), and m_globals.
Referenced by gimple_ranger::dump().
void ranger_cache::dump_bb | ( | FILE * | f, |
basic_block | bb ) |
References relation_oracle::dump(), block_range_cache::dump(), m_gori, m_on_entry, and range_query::m_oracle.
Referenced by gimple_ranger::dump_bb().
References exit_range(), ggc_alloc(), m_exit, m_gori, infer_range_manager::maybe_adjust_range(), gori_compute::outgoing_edge_range_p(), r, and TREE_TYPE.
Referenced by propagate_cache(), range_on_edge(), and resolve_dom().
|
private |
References cfun, ENTRY_BLOCK_PTR_FOR_FN, block_range_cache::get_bb_range(), gimple_range_global(), m_on_entry, r, range_from_dom(), and range_of_def().
Referenced by exit_range(), and range_of_expr().
References cfun, ENTRY_BLOCK_PTR_FOR_FN, entry_range(), ggc_alloc(), gimple_bb(), gimple_range_global(), r, range_of_def(), and SSA_NAME_DEF_STMT.
Referenced by edge_range(), and register_inferred_value().
|
private |
References update_list::add(), adjust_equivalence_range(), block_range_cache::bb_range_p(), CDI_DOMINATORS, cfun, DEBUG_RANGE_CACHE, dominated_by_p(), dump_file, update_list::empty_p(), ENTRY_BLOCK_PTR_FOR_FN, FOR_EACH_EDGE, FOR_EACH_PARTIAL_AND_FULL_EQUIV, gcc_checking_assert, block_range_cache::get_bb_range(), ggc_alloc(), gimple_bb(), gori_compute::has_edge_range_p(), infer_range_manager::has_range_p(), basic_block_def::index, m_exit, m_gori, m_on_entry, range_query::m_oracle, m_update, m_workback, pe_to_bits(), basic_block_def::preds, print_generic_expr(), print_relation(), propagate_cache(), r, range_cast(), range_from_dom(), RFD_FILL, RFD_READ_ONLY, block_range_cache::set_bb_range(), SSA_NAME_DEF_STMT, TDF_SLIM, TREE_TYPE, TYPE_PRECISION, and VREL_EQ.
Referenced by block_range().
References ssa_cache::get_range(), gimple_range_global(), m_globals, and r.
Referenced by gimple_ranger::dump_bb(), gimple_ranger::export_global_ranges(), get_global_range(), gimple_ranger::prefill_name(), gimple_ranger::prefill_stmt_dependencies(), range_from_dom(), gimple_ranger::range_of_expr(), and gimple_ranger::range_of_stmt().
References cfun, temporal_cache::current_p(), range_def_chain::depend1(), range_def_chain::depend2(), get_global_range(), get_global_range_query(), ggc_alloc(), gimple_get_lhs(), gimple_range_global(), m_globals, m_gori, m_temporal, r, temporal_cache::set_always_current(), ssa_cache::set_range(), and SSA_NAME_DEF_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(), gimple_ranger::range_of_expr(), range_of_expr(), gimple_ranger::range_of_stmt(), range_on_edge(), dom_ranger::range_on_edge(), gimple_ranger::range_on_edge(), gimple_ranger::range_on_entry(), and gimple_ranger::range_on_exit().
|
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 update_list::add(), block_range_cache::bb_range_p(), update_list::clear_failures(), DEBUG_RANGE_CACHE, dump_file, edge_range(), update_list::empty_p(), FOR_EACH_EDGE, gcc_checking_assert, block_range_cache::get_bb_range(), ggc_alloc(), basic_block_def::index, m_on_entry, m_update, update_list::pop(), basic_block_def::preds, print_generic_expr(), update_list::propagation_failed(), RFD_READ_ONLY, block_range_cache::set_bb_range(), basic_block_def::succs, TDF_SLIM, and TREE_TYPE.
Referenced by fill_block_cache(), and propagate_updated_value().
void ranger_cache::propagate_updated_value | ( | tree | name, |
basic_block | bb ) |
References update_list::add(), block_range_cache::bb_range_p(), DEBUG_RANGE_CACHE, dump_file, update_list::empty_p(), FOR_EACH_EDGE, gcc_checking_assert, ggc_alloc(), basic_block_def::index, m_on_entry, m_update, print_generic_expr(), propagate_cache(), basic_block_def::succs, and TDF_SLIM.
Referenced by gimple_ranger::range_of_stmt(), and set_global_range().
|
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().
|
private |
References CDI_DOMINATORS, cfun, DEBUG_RANGE_CACHE, dom_info_available_p(), dominated_by_p(), dump_file, EDGE_COUNT, EDGE_PRED, ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK_PTR_FOR_FN, FOR_EACH_EDGE, gcc_checking_assert, block_range_cache::get_bb_range(), get_global_range(), get_immediate_dominator(), ggc_alloc(), gimple_bb(), has_abnormal_call_or_eh_pred_edge_p(), gori_compute::has_edge_range_p(), basic_block_def::index, m_exit, m_gori, m_on_entry, m_workback, infer_range_manager::maybe_adjust_range(), NULL, gori_compute::outgoing_edge_range_p(), basic_block_def::preds, print_generic_expr(), r, resolve_dom(), RFD_FILL, RFD_NONE, single_pred_edge(), single_pred_p(), SSA_NAME_DEF_STMT, TDF_SLIM, and TREE_TYPE.
Referenced by entry_range(), and fill_block_cache().
|
private |
References fold_range(), gcc_checking_assert, get_global_range_query(), ssa_cache::get_range(), gimple_bb(), gimple_get_lhs(), gimple_range_global(), gimple_range_ssa_p(), m_globals, r, and SSA_NAME_DEF_STMT.
Referenced by entry_range(), exit_range(), and range_of_expr().
Implements range_query.
References entry_range(), range_query::get_tree_range(), ggc_alloc(), gimple_bb(), gimple_range_ssa_p(), r, range_of_def(), RFD_NONE, and SSA_NAME_DEF_STMT.
Referenced by gimple_ranger::range_of_expr().
Reimplemented in path_range_query, gimple_ranger, and dom_ranger.
References gcc_checking_assert, gimple_get_lhs(), r, and range_query::range_of_expr().
Referenced by simplify_using_ranges::fold_cond(), and range_query::value_of_stmt().
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 edge_range(), range_query::get_tree_range(), gimple_range_ssa_p(), NULL, r, and RFD_NONE.
Referenced by gimple_ranger::dump_bb(), and gimple_ranger::range_on_edge().
|
virtualinherited |
Reimplemented in gimple_ranger.
References r, and range_query::range_of_expr().
Referenced by range_query::invoke_range_of_expr(), and range_query::value_on_entry().
|
virtualinherited |
Reimplemented in gimple_ranger.
References r, and range_query::range_of_expr().
Referenced by range_query::invoke_range_of_expr(), and range_query::value_on_exit().
void ranger_cache::register_inferred_value | ( | const vrange & | r, |
tree | name, | ||
basic_block | bb ) |
References exit_range(), block_range_cache::get_bb_range(), ggc_alloc(), gori_compute::has_edge_range_p(), m_gori, m_on_entry, r, RFD_READ_ONLY, block_range_cache::set_bb_range(), gori_map::set_range_invariant(), and TREE_TYPE.
Referenced by apply_inferred_ranges(), and gimple_ranger::register_transitive_inferred_ranges().
|
private |
References block_range_cache::bb_range_p(), CDI_DOMINATORS, dominated_by_p(), edge_range(), FOR_EACH_EDGE, get_immediate_dominator(), ggc_alloc(), gimple_bb(), m_on_entry, basic_block_def::preds, r, RFD_READ_ONLY, block_range_cache::set_bb_range(), SSA_NAME_DEF_STMT, and TREE_TYPE.
Referenced by range_from_dom().
References cfun, changed, temporal_cache::current_p(), DEBUG_RANGE_CACHE, range_def_chain::depend1(), range_def_chain::depend2(), dump_file, ENTRY_BLOCK_PTR_FOR_FN, ggc_alloc(), gimple_bb(), m_globals, m_gori, m_temporal, POINTER_TYPE_P, propagate_updated_value(), r, temporal_cache::set_always_current(), ssa_cache::set_range(), gori_map::set_range_invariant(), temporal_cache::set_timestamp(), SSA_NAME_DEF_STMT, and TREE_TYPE.
Referenced by gimple_ranger::prefill_stmt_dependencies(), and gimple_ranger::range_of_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.
infer_range_manager ranger_cache::m_exit |
|
private |
Referenced by const_query(), dump(), get_global_range(), get_global_range(), range_of_def(), and set_global_range().
gori_compute ranger_cache::m_gori |
|
private |
|
protectedinherited |
Referenced by dump_bb(), fill_block_cache(), path_range_query::get_path_oracle(), gimple_ranger::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(), path_range_query::~path_range_query(), and ~ranger_cache().
|
private |
Referenced by get_global_range(), ranger_cache(), set_global_range(), and ~ranger_cache().
|
private |
Referenced by fill_block_cache(), propagate_cache(), propagate_updated_value(), ranger_cache(), and ~ranger_cache().
|
private |
Referenced by fill_block_cache(), range_from_dom(), ranger_cache(), and ~ranger_cache().