diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2023-12-01 11:15:33 -0500 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2023-12-01 14:13:19 -0500 |
commit | c6bb413eeb9d13412e8101e3029099d7fd746708 (patch) | |
tree | 97000d3f829dccb6a7f65c63ca5a133f4b0c1ed6 /gcc/value-range.h | |
parent | b8edb812ff4934c609fdfafe2e1c7f932bc18305 (diff) | |
download | gcc-c6bb413eeb9d13412e8101e3029099d7fd746708.zip gcc-c6bb413eeb9d13412e8101e3029099d7fd746708.tar.gz gcc-c6bb413eeb9d13412e8101e3029099d7fd746708.tar.bz2 |
Use range_compatible_p in check_operands_p.
Instead of directly checking type precision, check_operands_p should
invoke range_compatible_p to keep the range checking centralized.
* gimple-range-fold.h (range_compatible_p): Relocate.
* value-range.h (range_compatible_p): Here.
* range-op-mixed.h (operand_equal::operand_check_p): Call
range_compatible_p rather than comparing precision.
(operand_not_equal::operand_check_p): Ditto.
(operand_not_lt::operand_check_p): Ditto.
(operand_not_le::operand_check_p): Ditto.
(operand_not_gt::operand_check_p): Ditto.
(operand_not_ge::operand_check_p): Ditto.
(operand_plus::operand_check_p): Ditto.
(operand_abs::operand_check_p): Ditto.
(operand_minus::operand_check_p): Ditto.
(operand_negate::operand_check_p): Ditto.
(operand_mult::operand_check_p): Ditto.
(operand_bitwise_not::operand_check_p): Ditto.
(operand_bitwise_xor::operand_check_p): Ditto.
(operand_bitwise_and::operand_check_p): Ditto.
(operand_bitwise_or::operand_check_p): Ditto.
(operand_min::operand_check_p): Ditto.
(operand_max::operand_check_p): Ditto.
* range-op.cc (operand_lshift::operand_check_p): Ditto.
(operand_rshift::operand_check_p): Ditto.
(operand_logical_and::operand_check_p): Ditto.
(operand_logical_or::operand_check_p): Ditto.
(operand_logical_not::operand_check_p): Ditto.
Diffstat (limited to 'gcc/value-range.h')
-rw-r--r-- | gcc/value-range.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/value-range.h b/gcc/value-range.h index 330e6f7..33f204a 100644 --- a/gcc/value-range.h +++ b/gcc/value-range.h @@ -1550,4 +1550,15 @@ void frange_arithmetic (enum tree_code, tree, REAL_VALUE_TYPE &, const REAL_VALUE_TYPE &, const REAL_VALUE_TYPE &, const REAL_VALUE_TYPE &); +// Return true if TYPE1 and TYPE2 are compatible range types. + +inline bool +range_compatible_p (tree type1, tree type2) +{ + // types_compatible_p requires conversion in both directions to be useless. + // GIMPLE only requires a cast one way in order to be compatible. + // Ranges really only need the sign and precision to be the same. + return (TYPE_PRECISION (type1) == TYPE_PRECISION (type2) + && TYPE_SIGN (type1) == TYPE_SIGN (type2)); +} #endif // GCC_VALUE_RANGE_H |