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/gimple-range-op.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/gimple-range-op.h')
-rw-r--r-- | gcc/gimple-range-op.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/gimple-range-op.h b/gcc/gimple-range-op.h index 1bf63c5..e7bb009 100644 --- a/gcc/gimple-range-op.h +++ b/gcc/gimple-range-op.h @@ -32,8 +32,8 @@ public: gimple_range_op_handler (gimple *s); inline gimple *stmt () const { return m_stmt; } inline tree lhs () const { return gimple_get_lhs (m_stmt); } - tree operand1 () const { gcc_checking_assert (m_valid); return m_op1; } - tree operand2 () const { gcc_checking_assert (m_valid); return m_op2; } + tree operand1 () const { gcc_checking_assert (m_operator); return m_op1; } + tree operand2 () const { gcc_checking_assert (m_operator); return m_op2; } bool calc_op1 (vrange &r, const vrange &lhs_range); bool calc_op1 (vrange &r, const vrange &lhs_range, const vrange &op2_range, relation_trio = TRIO_VARYING); |