aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-range.h
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2023-05-31 13:10:31 -0400
committerAndrew MacLeod <amacleod@redhat.com>2023-06-08 14:52:04 -0400
commitcd9c7f898d6e6313465f78227e566f27dce5e5a3 (patch)
tree3908d7eb60f52defe89c0afc99b42e9cee80261a /gcc/value-range.h
parent9c0fed507f059d54c6753f86a2a10a0c743a7f95 (diff)
downloadgcc-cd9c7f898d6e6313465f78227e566f27dce5e5a3.zip
gcc-cd9c7f898d6e6313465f78227e566f27dce5e5a3.tar.gz
gcc-cd9c7f898d6e6313465f78227e566f27dce5e5a3.tar.bz2
Provide a new dispatch mechanism for range-ops.
Simplify range_op_handler to have a single range_operator pointer and provide a more flexible dispatch mechanism for calls via generic vrange classes. This is more extensible for adding new classes of range support. Any unsupported dispatch patterns will simply return FALSE now rather than generating compile time exceptions, aleviating the need to constantly check for supoprted types. * gimple-range-op.cc (gimple_range_op_handler::gimple_range_op_handler): Adjust. (gimple_range_op_handler::maybe_builtin_call): Adjust. * gimple-range-op.h (operand1, operand2): Use m_operator. * range-op.cc (integral_table, pointer_table): Relocate. (get_op_handler): Rename from get_handler and handle all types. (range_op_handler::range_op_handler): Relocate. (range_op_handler::set_op_handler): Relocate and adjust. (range_op_handler::range_op_handler): Relocate. (dispatch_trio): New. (RO_III, RO_IFI, RO_IFF, RO_FFF, RO_FIF, RO_FII): New consts. (range_op_handler::dispatch_kind): New. (range_op_handler::fold_range): Relocate and Use new dispatch value. (range_op_handler::op1_range): Ditto. (range_op_handler::op2_range): Ditto. (range_op_handler::lhs_op1_relation): Ditto. (range_op_handler::lhs_op2_relation): Ditto. (range_op_handler::op1_op2_relation): Ditto. (range_op_handler::set_op_handler): Use m_operator member. * range-op.h (range_op_handler::operator bool): Use m_operator. (range_op_handler::dispatch_kind): New. (range_op_handler::m_valid): Delete. (range_op_handler::m_int): Delete (range_op_handler::m_float): Delete (range_op_handler::m_operator): New. (range_op_table::operator[]): Relocate from .cc file. (range_op_table::set): Ditto. * value-range.h (class vrange): Make range_op_handler a friend.
Diffstat (limited to 'gcc/value-range.h')
-rw-r--r--gcc/value-range.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/value-range.h b/gcc/value-range.h
index 2b4ebab..9103e9c 100644
--- a/gcc/value-range.h
+++ b/gcc/value-range.h
@@ -77,6 +77,7 @@ class GTY((user)) vrange
template <typename T> friend bool is_a (vrange &);
friend class Value_Range;
friend void streamer_write_vrange (struct output_block *, const vrange &);
+ friend class range_op_handler;
public:
virtual void accept (const class vrange_visitor &v) const = 0;
virtual void set (tree, tree, value_range_kind = VR_RANGE);