aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2022-09-05 15:41:39 +0200
committerAldy Hernandez <aldyh@redhat.com>2022-09-05 17:57:25 +0200
commitb4d8a56a4c62ba8bca55469ae2b841fb4e1334a4 (patch)
tree22733b97adc15a7a01817f4d5dfe987c6dd6ed45 /gcc
parentba0db24386107ffa237a2af0d1fdef9030460157 (diff)
downloadgcc-b4d8a56a4c62ba8bca55469ae2b841fb4e1334a4.zip
gcc-b4d8a56a4c62ba8bca55469ae2b841fb4e1334a4.tar.gz
gcc-b4d8a56a4c62ba8bca55469ae2b841fb4e1334a4.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/range-op-float.cc10
-rw-r--r--gcc/value-range.h5
2 files changed, 4 insertions, 11 deletions
diff --git a/gcc/range-op-float.cc b/gcc/range-op-float.cc
index 7301e5a..050f07a 100644
--- a/gcc/range-op-float.cc
+++ b/gcc/range-op-float.cc
@@ -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 ());
diff --git a/gcc/value-range.h b/gcc/value-range.h
index bc00f3d..645dc76 100644
--- a/gcc/value-range.h
+++ b/gcc/value-range.h
@@ -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;