Disable decimal floating point in frange.

As Jakub mentioned in the PR, because many numbers have multiple
possible representations, we can't reliably return true for singleton_p.
For that matter, we may not be capable of modeling them just yet.
Disabling them until someone with DFP knowledge can opine or extend
frange.

	PR middle-end/106831

gcc/ChangeLog:

	* value-range.h (frange::supports_p): Disable decimal floats.
	* range-op-float.cc (frange_drop_inf): Remove DECIMAL_FLOAT_MODE_P
	check.
	(frange_drop_ninf): Same.
This commit is contained in:
Aldy Hernandez 2022-09-05 15:41:39 +02:00
parent ba0db24386
commit b4d8a56a4c
2 changed files with 4 additions and 11 deletions

View file

@ -204,11 +204,6 @@ frelop_early_resolve (irange &r, tree type,
static inline void
frange_drop_inf (frange &r, tree type)
{
// FIXME: build_real() bails on decimal float modes when called with
// a max representable endpoint.
if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
return;
REAL_VALUE_TYPE max;
real_max_representable (&max, type);
frange tmp (type, r.lower_bound (), max);
@ -221,11 +216,6 @@ frange_drop_inf (frange &r, tree type)
static inline void
frange_drop_ninf (frange &r, tree type)
{
// FIXME: build_real() bails on decimal float modes when called with
// a max representable endpoint.
if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
return;
REAL_VALUE_TYPE min;
real_min_representable (&min, type);
frange tmp (type, min, r.upper_bound ());

View file

@ -338,7 +338,10 @@ public:
value_range_kind = VR_RANGE);
static bool supports_p (const_tree type)
{
return SCALAR_FLOAT_TYPE_P (type);
// ?? Decimal floats can have multiple representations for the
// same number. Supporting them may be as simple as just
// disabling them in singleton_p. No clue.
return SCALAR_FLOAT_TYPE_P (type) && !DECIMAL_FLOAT_TYPE_P (type);
}
virtual tree type () const override;
virtual void set (tree, tree, value_range_kind = VR_RANGE) override;