GCC Middle and Back End API Reference
|
#include <value-query.h>
Public Member Functions | |
range_query () | |
virtual | ~range_query () |
virtual tree | value_of_expr (tree expr, gimple *=NULL) |
virtual tree | value_on_edge (edge, tree expr) |
virtual tree | value_of_stmt (gimple *, tree name=NULL) |
virtual tree | value_on_entry (basic_block, tree expr) |
virtual tree | value_on_exit (basic_block, tree expr) |
virtual bool | range_of_expr (vrange &r, tree expr, gimple *=NULL)=0 |
virtual bool | range_on_edge (vrange &r, edge, tree expr) |
virtual bool | range_of_stmt (vrange &r, gimple *, tree name=NULL) |
virtual bool | range_on_entry (vrange &r, basic_block bb, tree expr) |
virtual bool | range_on_exit (vrange &r, basic_block bb, tree expr) |
relation_kind | query_relation (gimple *s, tree ssa1, tree ssa2, bool get_range=true) |
relation_kind | query_relation (edge e, tree ssa1, tree ssa2, bool get_range=true) |
relation_oracle * | oracle () const |
virtual void | dump (FILE *) |
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 |
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/>.
|
virtual |
Reimplemented in path_range_query, assume_query, ranger_cache, gimple_ranger, and ssa_cache.
|
protected |
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(), 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().
|
protected |
References gcc_checking_assert, ggc_alloc(), r, range_of_expr(), range_on_entry(), and range_on_exit().
Referenced by get_tree_range().
|
inline |
References get_range(), ggc_alloc(), m_oracle, relation_oracle::query_relation(), range_on_edge(), single_pred_p(), TREE_CODE, TREE_TYPE, and VREL_VARYING.
relation_kind range_query::query_relation | ( | gimple * | s, |
tree | ssa1, | ||
tree | ssa2, | ||
bool | get_range = true ) |
References get_range(), ggc_alloc(), gimple_bb(), m_oracle, relation_oracle::query_relation(), range_of_expr(), TREE_CODE, TREE_TYPE, and VREL_VARYING.
Referenced by fur_stmt::query_relation(), and fold_using_range::range_of_phi().
Implemented in assume_query, substitute_and_fold_engine, global_range_query, dom_ranger, ssa_cache, path_range_query, gimple_ranger, and ranger_cache.
Referenced by check_for_binary_op_overflow(), compare_nonzero_chars(), strlen_pass::count_nonzero_bytes_addr(), cprop_operand(), determine_block_size(), dump_ssaname_info(), dump_strlen_info(), expand_builtin_strnlen(), simplify_using_ranges::fold_cond_with_ops(), path_range_query::get_cache(), get_min_precision(), fur_source::get_operand(), fur_list::get_operand(), fur_stmt::get_operand(), get_range(), get_range_strlen_dynamic(), get_ref_base_and_extent(), get_size_range(), array_bounds_checker::get_value_range(), handle_printf_call(), invoke_range_of_expr(), simplify_using_ranges::legacy_fold_cond(), simplify_using_ranges::legacy_fold_cond_overflow(), simplify_using_ranges::op_with_boolean_value_range_p(), query_relation(), range_of_stmt(), range_of_var_in_loop(), range_on_edge(), range_on_entry(), range_on_exit(), simplify_using_ranges::simplify(), simplify_using_ranges::simplify_bit_ops_using_ranges(), simplify_using_ranges::simplify_casted_compare(), simplify_using_ranges::simplify_compare_using_ranges_1(), simplify_using_ranges::simplify_div_or_mod_using_ranges(), simplify_using_ranges::simplify_float_conversion_using_ranges(), simplify_rotate(), simplify_using_ranges::simplify_switch_using_ranges(), split_at_bb_p(), simplify_using_ranges::two_valued_val_range_p(), value_of_expr(), and value_on_edge().
Reimplemented in path_range_query, gimple_ranger, and dom_ranger.
References gcc_checking_assert, gimple_get_lhs(), r, and range_of_expr().
Referenced by simplify_using_ranges::fold_cond(), and 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_of_expr().
Referenced by fur_edge::get_operand(), fur_source::get_phi_operand(), fur_edge::get_phi_operand(), phi_analyzer::process_phi(), query_relation(), and value_on_edge().
|
virtual |
Reimplemented in gimple_ranger.
References r, and range_of_expr().
Referenced by invoke_range_of_expr(), and value_on_entry().
|
virtual |
Reimplemented in gimple_ranger.
References r, and range_of_expr().
Referenced by invoke_range_of_expr(), and value_on_exit().
Reimplemented in substitute_and_fold_engine, copy_folder, rvrp_folder, fvrp_folder, and ccp_folder.
References NULL_TREE, r, 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_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_of_expr(), range_on_edge(), Value_Range::supports_type_p(), and TREE_TYPE.
Referenced by rvrp_folder::value_on_edge(), and fvrp_folder::value_on_edge().
|
virtual |
References gcc_checking_assert, NULL_TREE, r, range_on_entry(), Value_Range::supports_type_p(), and TREE_TYPE.
|
virtual |
References gcc_checking_assert, NULL_TREE, r, range_on_exit(), Value_Range::supports_type_p(), and TREE_TYPE.
|
protected |
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(), oracle(), path_range_query::path_range_query(), path_range_query::path_range_query(), query_relation(), query_relation(), range_query(), ranger_cache::ranger_cache(), path_range_query::~path_range_query(), and ranger_cache::~ranger_cache().