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:
parent
ba0db24386
commit
b4d8a56a4c
2 changed files with 4 additions and 11 deletions
|
@ -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 ());
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue