* [PATCH] Declare dconstm0 to go along with dconst0 and friends.
@ 2023-04-18 12:59 Aldy Hernandez
2023-04-18 13:26 ` Jeff Law
0 siblings, 1 reply; 2+ messages in thread
From: Aldy Hernandez @ 2023-04-18 12:59 UTC (permalink / raw)
To: GCC patches; +Cc: Andrew MacLeod, Aldy Hernandez
Negating dconst0 is getting pretty old, and we will keep adding copies
of the same idiom. Fixed by adding a dconstm0 constant to go along
with dconst1, dconstm1, etc.
OK for trunk?
gcc/ChangeLog:
* emit-rtl.cc (init_emit_once): Initialize dconstm0.
* gimple-range-op.cc (class cfn_signbit): Remove dconstm0
declaration.
* range-op-float.cc (zero_range): Use dconstm0.
(zero_to_inf_range): Same.
* real.h (dconstm0): New.
* value-range.cc (frange::flush_denormals_to_zero): Use dconstm0.
(frange::set_zero): Do not declare dconstm0.
---
gcc/emit-rtl.cc | 4 ++++
gcc/gimple-range-op.cc | 2 --
gcc/range-op-float.cc | 6 +++---
gcc/real.h | 1 +
gcc/value-range.cc | 7 +++----
5 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/gcc/emit-rtl.cc b/gcc/emit-rtl.cc
index a11f72f606b..4036f4b64f7 100644
--- a/gcc/emit-rtl.cc
+++ b/gcc/emit-rtl.cc
@@ -105,6 +105,7 @@ rtx const_true_rtx;
REAL_VALUE_TYPE dconst0;
REAL_VALUE_TYPE dconst1;
REAL_VALUE_TYPE dconst2;
+REAL_VALUE_TYPE dconstm0;
REAL_VALUE_TYPE dconstm1;
REAL_VALUE_TYPE dconsthalf;
REAL_VALUE_TYPE dconstinf;
@@ -6206,6 +6207,9 @@ init_emit_once (void)
real_from_integer (&dconst1, double_mode, 1, SIGNED);
real_from_integer (&dconst2, double_mode, 2, SIGNED);
+ dconstm0 = dconst0;
+ dconstm0.sign = 1;
+
dconstm1 = dconst1;
dconstm1.sign = 1;
diff --git a/gcc/gimple-range-op.cc b/gcc/gimple-range-op.cc
index 4ca32a7b5d5..f7409e35a99 100644
--- a/gcc/gimple-range-op.cc
+++ b/gcc/gimple-range-op.cc
@@ -360,8 +360,6 @@ public:
}
if (!lhs.contains_p (build_zero_cst (lhs.type ())))
{
- REAL_VALUE_TYPE dconstm0 = dconst0;
- dconstm0.sign = 1;
r.set (type, frange_val_min (type), dconstm0);
r.update_nan (true);
return true;
diff --git a/gcc/range-op-float.cc b/gcc/range-op-float.cc
index e0e91bad44d..9d184611ae9 100644
--- a/gcc/range-op-float.cc
+++ b/gcc/range-op-float.cc
@@ -2263,7 +2263,7 @@ zero_range (REAL_VALUE_TYPE &lb, REAL_VALUE_TYPE &ub, int signbit_known)
{
ub = lb = dconst0;
if (signbit_known <= 0)
- lb = real_value_negate (&dconst0);
+ lb = dconstm0;
if (signbit_known < 0)
ub = lb;
}
@@ -2297,7 +2297,7 @@ zero_to_inf_range (REAL_VALUE_TYPE &lb, REAL_VALUE_TYPE &ub, int signbit_known)
else if (signbit_known < 0)
{
lb = dconstninf;
- ub = real_value_negate (&dconst0);
+ ub = dconstm0;
}
else
{
@@ -2634,7 +2634,7 @@ private:
if (real_isneg (&lh_lb) == real_isneg (&lh_ub))
cp[1] = dconst0;
else
- cp[1] = real_value_negate (&dconst0);
+ cp[1] = dconstm0;
}
else
cp[1] = cp[0];
diff --git a/gcc/real.h b/gcc/real.h
index dd41c65d786..9e02139ad63 100644
--- a/gcc/real.h
+++ b/gcc/real.h
@@ -468,6 +468,7 @@ extern void real_ldexp (REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *, int);
extern REAL_VALUE_TYPE dconst0;
extern REAL_VALUE_TYPE dconst1;
extern REAL_VALUE_TYPE dconst2;
+extern REAL_VALUE_TYPE dconstm0;
extern REAL_VALUE_TYPE dconstm1;
extern REAL_VALUE_TYPE dconsthalf;
extern REAL_VALUE_TYPE dconstinf;
diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index c14a27e23af..34817fc0159 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -322,9 +322,10 @@ frange::flush_denormals_to_zero ()
// Flush [x, -DENORMAL] to [x, -0.0].
if (real_isdenormal (&m_max, mode) && real_isneg (&m_max))
{
- m_max = dconst0;
if (HONOR_SIGNED_ZEROS (m_type))
- m_max.sign = 1;
+ m_max = dconstm0;
+ else
+ m_max = dconst0;
}
// Flush [+DENORMAL, x] to [+0.0, x].
if (real_isdenormal (&m_min, mode) && !real_isneg (&m_min))
@@ -840,8 +841,6 @@ frange::set_zero (tree type)
{
if (HONOR_SIGNED_ZEROS (type))
{
- REAL_VALUE_TYPE dconstm0 = dconst0;
- dconstm0.sign = 1;
set (type, dconstm0, dconst0);
clear_nan ();
}
--
2.39.2
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] Declare dconstm0 to go along with dconst0 and friends.
2023-04-18 12:59 [PATCH] Declare dconstm0 to go along with dconst0 and friends Aldy Hernandez
@ 2023-04-18 13:26 ` Jeff Law
0 siblings, 0 replies; 2+ messages in thread
From: Jeff Law @ 2023-04-18 13:26 UTC (permalink / raw)
To: Aldy Hernandez, GCC patches; +Cc: Andrew MacLeod
On 4/18/23 06:59, Aldy Hernandez via Gcc-patches wrote:
> Negating dconst0 is getting pretty old, and we will keep adding copies
> of the same idiom. Fixed by adding a dconstm0 constant to go along
> with dconst1, dconstm1, etc.
>
> OK for trunk?
>
> gcc/ChangeLog:
>
> * emit-rtl.cc (init_emit_once): Initialize dconstm0.
> * gimple-range-op.cc (class cfn_signbit): Remove dconstm0
> declaration.
> * range-op-float.cc (zero_range): Use dconstm0.
> (zero_to_inf_range): Same.
> * real.h (dconstm0): New.
> * value-range.cc (frange::flush_denormals_to_zero): Use dconstm0.
> (frange::set_zero): Do not declare dconstm0.
OK. I had a similar patch at a prior employer. We were covering powers
of two from -4 .. 3 as dconsts for a few "unique" instructions we had.
Jeff
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-04-18 13:26 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-18 12:59 [PATCH] Declare dconstm0 to go along with dconst0 and friends Aldy Hernandez
2023-04-18 13:26 ` Jeff Law
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).