GCC Middle and Back End API Reference
|
Data Fields | |
remove_unreachable | m_unreachable |
bool | fold_all_stmts |
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 Member Functions | |
DISABLE_COPY_AND_ASSIGN (rvrp_folder) | |
Private Attributes | |
gimple_ranger * | m_ranger |
simplify_using_ranges | m_simplifier |
pointer_equiv_analyzer * | m_pta |
gimple * | m_last_bb_stmt |
|
inline |
References m_last_bb_stmt, m_pta, m_ranger, NULL, and r.
|
inline |
References m_pta.
|
private |
Reimplemented in path_range_query, assume_query, ranger_cache, gimple_ranger, and ssa_cache.
|
inlineoverridevirtual |
Reimplemented from substitute_and_fold_engine.
References gimple_ranger::fold_stmt(), follow_single_use_edges(), ggc_alloc(), gsi_stmt(), m_ranger, m_simplifier, gimple_ranger::register_inferred_ranges(), and simplify_using_ranges::simplify().
|
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(), ranger_cache::range_of_expr(), gimple_ranger::range_of_stmt(), ranger_cache::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 |
|
inlineoverridevirtual |
Reimplemented from substitute_and_fold_engine.
References pointer_equiv_analyzer::leave(), and m_pta.
Referenced by substitute_and_fold_dom_walker::foreach_new_stmt_in_bb().
|
inlineoverridevirtual |
Reimplemented from substitute_and_fold_engine.
References pointer_equiv_analyzer::enter(), gsi_end_p(), gsi_next(), gsi_start_phis(), last_nondebug_stmt(), m_last_bb_stmt, m_pta, m_ranger, and gimple_ranger::register_inferred_ranges().
Reimplemented from substitute_and_fold_engine.
References cfun, ggc_alloc(), gimple_bb(), m_last_bb_stmt, m_pta, m_ranger, m_unreachable, remove_unreachable::maybe_register(), gimple_ranger::register_transitive_inferred_ranges(), and pointer_equiv_analyzer::visit_stmt().
|
inherited |
References FOR_EACH_EDGE, ggc_alloc(), gsi_end_p(), gsi_next(), gsi_start_phis(), is_gimple_min_invariant(), may_propagate_copy(), PHI_ARG_DEF_PTR_FROM_EDGE, propagate_value(), basic_block_def::succs, TREE_CODE, USE_FROM_PTR, substitute_and_fold_engine::value_on_edge(), and virtual_operand_p().
Referenced by substitute_and_fold_dom_walker::before_dom_children().
|
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().
|
virtualinherited |
Implements range_query.
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 in ranger_cache, dom_ranger, and gimple_ranger.
References r, and range_query::range_of_expr().
Referenced by fur_edge::get_operand(), fur_source::get_phi_operand(), fur_edge::get_phi_operand(), phi_analyzer::process_phi(), range_query::query_relation(), and range_query::value_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().
Replace propagated values into all the arguments for PHI using the values from PROP_VALUE.
References dump_file, dump_flags, gcc_checking_assert, ggc_alloc(), gimple_phi_arg_def(), gimple_phi_arg_edge(), gimple_phi_num_args(), i, may_propagate_copy(), prop_stats_d::num_const_prop, prop_stats_d::num_copy_prop, PHI_ARG_DEF_PTR, print_gimple_stmt(), prop_stats, propagate_value(), SSA_NAME_OCCURS_IN_ABNORMAL_PHI, TDF_DETAILS, TDF_SLIM, TREE_CODE, substitute_and_fold_engine::value_on_edge(), and virtual_operand_p().
Referenced by substitute_and_fold_dom_walker::before_dom_children().
Replace USE references in statement STMT with the values stored in PROP_VALUE. Return true if at least one reference was replaced.
References FOR_EACH_SSA_USE_OPERAND, ggc_alloc(), may_propagate_copy(), may_propagate_copy_into_asm(), NULL_TREE, prop_stats_d::num_const_prop, prop_stats_d::num_copy_prop, prop_stats, propagate_value(), SSA_OP_USE, TREE_CODE, USE_FROM_PTR, and substitute_and_fold_engine::value_of_expr().
Referenced by substitute_and_fold_dom_walker::before_dom_children().
|
inherited |
Perform final substitution and folding of propagated values. Process the whole function if BLOCK is null, otherwise only process the blocks that BLOCK dominates. In the latter case, it is the caller's responsibility to ensure that dominator information is available and up-to-date. PROP_VALUE[I] contains the single value that should be substituted at every use of SSA name N_I. If PROP_VALUE is NULL, no values are substituted. If FOLD_FN is non-NULL the function will be invoked on all statements before propagating values for pass specific simplification. DO_DCE is true if trivially dead stmts can be removed. If DO_DCE is true, the statements within a BB are walked from last to first element. Otherwise we scan from first to last element. Return TRUE when something changed.
References bitmap_empty_p(), calculate_dominance_info(), CDI_DOMINATORS, cfun, dom_info_state(), dump_file, dump_flags, ENTRY_BLOCK_PTR_FOR_FN, fixup_noreturn_call(), gcc_assert, ggc_alloc(), gimple_purge_all_dead_abnormal_call_edges(), gimple_purge_all_dead_eh_edges(), prop_stats_d::num_const_prop, prop_stats_d::num_copy_prop, prop_stats_d::num_stmts_folded, print_gimple_stmt(), prop_stats, simple_dce_from_worklist(), statistics_counter_event(), and TDF_DETAILS.
Referenced by ccp_finalize(), and fini_copy_prop().
Reimplemented from substitute_and_fold_engine.
References m_ranger, NULL, SSA_NAME_OCCURS_IN_ABNORMAL_PHI, TREE_CODE, and range_query::value_of_stmt().
Reimplemented from substitute_and_fold_engine.
References pointer_equiv_analyzer::get_equiv(), ggc_alloc(), m_pta, m_ranger, NULL, SSA_NAME_OCCURS_IN_ABNORMAL_PHI, supported_pointer_equiv_p(), TREE_CODE, and range_query::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.
|
inherited |
Referenced by substitute_and_fold_dom_walker::before_dom_children().
|
private |
Referenced by pre_fold_bb(), pre_fold_stmt(), and rvrp_folder().
|
protectedinherited |
Referenced by ranger_cache::dump_bb(), ranger_cache::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::ranger_cache(), path_range_query::~path_range_query(), and ranger_cache::~ranger_cache().
|
private |
Referenced by post_fold_bb(), pre_fold_bb(), pre_fold_stmt(), rvrp_folder(), value_of_expr(), value_on_edge(), and ~rvrp_folder().
|
private |
Referenced by fold_stmt(), pre_fold_bb(), pre_fold_stmt(), rvrp_folder(), value_of_expr(), value_of_stmt(), and value_on_edge().
|
private |
Referenced by fold_stmt().
remove_unreachable rvrp_folder::m_unreachable |
Referenced by pre_fold_stmt().