GCC Middle and Back End API Reference
|
Go to the source code of this file.
Data Structures | |
class | operator_equal |
class | operator_not_equal |
class | operator_lt |
class | operator_le |
class | operator_gt |
class | operator_ge |
class | operator_identity |
class | operator_cst |
class | operator_cast |
class | operator_plus |
class | operator_abs |
class | operator_minus |
class | operator_negate |
class | cross_product_operator |
class | operator_mult |
class | operator_addr_expr |
class | operator_bitwise_not |
class | operator_bitwise_xor |
class | operator_bitwise_and |
class | operator_bitwise_or |
class | operator_min |
class | operator_max |
Enumerations | |
enum | bool_range_state { BRS_FALSE , BRS_TRUE , BRS_EMPTY , BRS_FULL } |
Functions | |
void | update_known_bitmask (vrange &, tree_code, const vrange &, const vrange &) |
bool | minus_op1_op2_relation_effect (irange &lhs_range, tree type, const irange &, const irange &, relation_kind rel) |
bool | wi_includes_zero_p (tree type, const wide_int &wmin, const wide_int &wmax) |
bool | wi_zero_p (tree type, const wide_int &wmin, const wide_int &wmax) |
bool_range_state | get_bool_state (vrange &r, const vrange &lhs, tree val_type) |
bool | empty_range_varying (vrange &r, tree type, const vrange &op1, const vrange &op2) |
bool | relop_early_resolve (irange &r, tree type, const vrange &op1, const vrange &op2, relation_trio trio, relation_kind my_rel) |
enum bool_range_state |
References r, and vrange::undefined_p().
Referenced by operator_abs::fold_range(), operator_addr_expr::fold_range(), operator_bitwise_not::fold_range(), operator_cast::fold_range(), operator_cast::fold_range(), operator_cast::fold_range(), operator_cast::fold_range(), operator_logical_and::fold_range(), operator_logical_not::fold_range(), operator_logical_or::fold_range(), operator_negate::fold_range(), operator_negate::fold_range(), pointer_plus_operator::fold_range(), range_operator::fold_range(), range_operator::fold_range(), frelop_early_resolve(), operator_abs::op1_range(), operator_abs::op1_range(), operator_addr_expr::op1_range(), operator_addr_expr::op1_range(), and relop_early_resolve().
bool_range_state get_bool_state | ( | vrange & | r, |
const vrange & | lhs, | ||
tree | val_type ) |
References BRS_EMPTY, BRS_FALSE, BRS_FULL, BRS_TRUE, build_zero_cst(), and r.
Referenced by foperator_ltgt::op1_range(), foperator_ordered::op1_range(), foperator_unordered::op1_range(), foperator_unordered_equal::op1_range(), foperator_unordered_ge::op1_range(), foperator_unordered_gt::op1_range(), foperator_unordered_le::op1_range(), foperator_unordered_lt::op1_range(), operator_bitwise_xor::op1_range(), operator_equal::op1_range(), operator_equal::op1_range(), operator_equal::op1_range(), operator_ge::op1_range(), operator_ge::op1_range(), operator_ge::op1_range(), operator_gt::op1_range(), operator_gt::op1_range(), operator_gt::op1_range(), operator_le::op1_range(), operator_le::op1_range(), operator_le::op1_range(), operator_logical_and::op1_range(), operator_logical_or::op1_range(), operator_lt::op1_range(), operator_lt::op1_range(), operator_lt::op1_range(), operator_not_equal::op1_range(), operator_not_equal::op1_range(), operator_not_equal::op1_range(), foperator_unordered_ge::op2_range(), foperator_unordered_gt::op2_range(), foperator_unordered_le::op2_range(), foperator_unordered_lt::op2_range(), operator_ge::op2_range(), operator_ge::op2_range(), operator_ge::op2_range(), operator_gt::op2_range(), operator_gt::op2_range(), operator_gt::op2_range(), operator_le::op2_range(), operator_le::op2_range(), operator_le::op2_range(), operator_lt::op2_range(), operator_lt::op2_range(), and operator_lt::op2_range().
bool minus_op1_op2_relation_effect | ( | irange & | lhs_range, |
tree | type, | ||
const irange & | op1_range, | ||
const irange & | op2_range, | ||
relation_kind | rel ) |
References irange::intersect(), wi::max_value(), wi::min_value(), wi::minus_one(), wi::one(), TYPE_OVERFLOW_WRAPS, TYPE_PRECISION, TYPE_SIGN, VR_ANTI_RANGE, VREL_EQ, VREL_GE, VREL_GT, VREL_LE, VREL_LT, VREL_NE, VREL_VARYING, and wi::zero().
Referenced by operator_minus::op1_op2_relation_effect(), and operator_pointer_diff::op1_op2_relation_effect().
|
inline |
References empty_range_varying(), relation_trio::op1_op2(), r, range_false(), range_true(), relation_intersect(), relation_union(), and VREL_UNDEFINED.
Referenced by operator_equal::fold_range(), operator_equal::fold_range(), operator_ge::fold_range(), operator_ge::fold_range(), operator_gt::fold_range(), operator_gt::fold_range(), operator_le::fold_range(), operator_le::fold_range(), operator_lt::fold_range(), operator_lt::fold_range(), operator_not_equal::fold_range(), and operator_not_equal::fold_range().
Header file for mixed range operator class. Copyright (C) 2017-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 bit_value_binop(), bit_value_unop(), wide_int_storage::from(), gcc_unreachable, vrange::get_bitmask(), get_gimple_rhs_class(), GIMPLE_BINARY_RHS, GIMPLE_UNARY_RHS, irange_bitmask::mask(), r, vrange::type(), TYPE_PRECISION, TYPE_SIGN, vrange::undefined_p(), and irange_bitmask::value().
Referenced by operator_bitwise_and::fold_range(), operator_bitwise_or::fold_range(), operator_max::fold_range(), operator_min::fold_range(), pointer_plus_operator::fold_range(), operator_abs::update_bitmask(), operator_absu::update_bitmask(), operator_bitwise_and::update_bitmask(), operator_bitwise_not::update_bitmask(), operator_bitwise_or::update_bitmask(), operator_bitwise_xor::update_bitmask(), operator_cast::update_bitmask(), operator_div::update_bitmask(), operator_equal::update_bitmask(), operator_ge::update_bitmask(), operator_gt::update_bitmask(), operator_le::update_bitmask(), operator_lshift::update_bitmask(), operator_lt::update_bitmask(), operator_max::update_bitmask(), operator_min::update_bitmask(), operator_minus::update_bitmask(), operator_mult::update_bitmask(), operator_not_equal::update_bitmask(), operator_plus::update_bitmask(), operator_pointer_diff::update_bitmask(), operator_rshift::update_bitmask(), operator_trunc_mod::update_bitmask(), and pointer_plus_operator::update_bitmask().
References wi::ge_p(), wi::le_p(), and TYPE_SIGN.
Referenced by pointer_plus_operator::fold_range(), and operator_div::wi_fold().
References wi::eq_p(), TYPE_PRECISION, and wi::zero().
Referenced by operator_div::wi_fold(), and operator_trunc_mod::wi_fold().