diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2023-05-31 13:10:31 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2023-06-08 14:52:04 -0400 |
commit | cd9c7f898d6e6313465f78227e566f27dce5e5a3 (patch) | |
tree | 3908d7eb60f52defe89c0afc99b42e9cee80261a /gcc/value-range.h | |
parent | 9c0fed507f059d54c6753f86a2a10a0c743a7f95 (diff) | |
download | gcc-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.h | 1 |
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); |