[2/2] PR 92463 MPFR modernization: Revert r269139
diff mbox series

Message ID 20191118203450.8277-2-blomqvist.janne@gmail.com
State New
Headers show
Series
  • [1/2] PR 92463 MPFR modernization in GFortran
Related show

Commit Message

Janne Blomqvist Nov. 18, 2019, 8:34 p.m. UTC
Commit r269139 fixed an accidental dependency on MPFR 3.0. As we now
require at least MPFR 3.1.0+ we can revert it and instead use the
simpler MPFR 3.0+ code.

ChangeLog entry of the original commit was:

2019-02-23  David Malcolm  <dmalcolm@redhat.com>
            Jakub Jelinek  <jakub@redhat.com>

        PR middle-end/88074
        * simplify.c (norm2_do_sqrt, gfc_simplify_norm2): Use
        mpfr_number_p && !mpfr_zero_p instead of mpfr_regular_p.
        (norm2_add_squared): Likewise.  Use mp_exp_t rather than mpfr_exp_t.
---
 gcc/fortran/simplify.c | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

Comments

Tobias Burnus Nov. 20, 2019, 3:59 p.m. UTC | #1
LGTM.

Thanks,

Tobias

PS: For reference, mpfr_regular_p was added in MPFR 3.0.0 (as stated); 
acting as follows:
mpfr_number_p = returns nonzero if ordinary number (i.e., neither NaN 
nor an infinity),
mpfr_regular_p = returns nonzero if regular number (i.e., neither NaN, 
nor an infinity nor zero)

On 11/18/19 9:34 PM, Janne Blomqvist wrote:
> Commit r269139 fixed an accidental dependency on MPFR 3.0. As we now
> require at least MPFR 3.1.0+ we can revert it and instead use the
> simpler MPFR 3.0+ code.
>
> ChangeLog entry of the original commit was:
>
> 2019-02-23  David Malcolm  <dmalcolm@redhat.com>
>              Jakub Jelinek  <jakub@redhat.com>
>
>          PR middle-end/88074
>          * simplify.c (norm2_do_sqrt, gfc_simplify_norm2): Use
>          mpfr_number_p && !mpfr_zero_p instead of mpfr_regular_p.
>          (norm2_add_squared): Likewise.  Use mp_exp_t rather than mpfr_exp_t.
> ---
>   gcc/fortran/simplify.c | 14 +++++---------
>   1 file changed, 5 insertions(+), 9 deletions(-)
>
> diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
> index a5c940ca2d5..b48bf014121 100644
> --- a/gcc/fortran/simplify.c
> +++ b/gcc/fortran/simplify.c
> @@ -6023,8 +6023,8 @@ norm2_add_squared (gfc_expr *result, gfc_expr *e)
>   
>     gfc_set_model_kind (result->ts.kind);
>     int index = gfc_validate_kind (BT_REAL, result->ts.kind, false);
> -  mp_exp_t exp;
> -  if (mpfr_number_p (result->value.real) && !mpfr_zero_p (result->value.real))
> +  mpfr_exp_t exp;
> +  if (mpfr_regular_p (result->value.real))
>       {
>         exp = mpfr_get_exp (result->value.real);
>         /* If result is getting close to overflowing, scale down.  */
> @@ -6038,7 +6038,7 @@ norm2_add_squared (gfc_expr *result, gfc_expr *e)
>       }
>   
>     mpfr_init (tmp);
> -  if (mpfr_number_p (e->value.real) && !mpfr_zero_p (e->value.real))
> +  if (mpfr_regular_p (e->value.real))
>       {
>         exp = mpfr_get_exp (e->value.real);
>         /* If e**2 would overflow or close to overflowing, scale down.  */
> @@ -6079,9 +6079,7 @@ norm2_do_sqrt (gfc_expr *result, gfc_expr *e)
>     if (result != e)
>       mpfr_set (result->value.real, e->value.real, GFC_RND_MODE);
>     mpfr_sqrt (result->value.real, result->value.real, GFC_RND_MODE);
> -  if (norm2_scale
> -      && mpfr_number_p (result->value.real)
> -      && !mpfr_zero_p (result->value.real))
> +  if (norm2_scale && mpfr_regular_p (result->value.real))
>       {
>         mpfr_t tmp;
>         mpfr_init (tmp);
> @@ -6120,9 +6118,7 @@ gfc_simplify_norm2 (gfc_expr *e, gfc_expr *dim)
>         result = simplify_transformation_to_scalar (result, e, NULL,
>   						  norm2_add_squared);
>         mpfr_sqrt (result->value.real, result->value.real, GFC_RND_MODE);
> -      if (norm2_scale
> -	  && mpfr_number_p (result->value.real)
> -	  && !mpfr_zero_p (result->value.real))
> +      if (norm2_scale && mpfr_regular_p (result->value.real))
>   	{
>   	  mpfr_t tmp;
>   	  mpfr_init (tmp);

Patch
diff mbox series

diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index a5c940ca2d5..b48bf014121 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -6023,8 +6023,8 @@  norm2_add_squared (gfc_expr *result, gfc_expr *e)
 
   gfc_set_model_kind (result->ts.kind);
   int index = gfc_validate_kind (BT_REAL, result->ts.kind, false);
-  mp_exp_t exp;
-  if (mpfr_number_p (result->value.real) && !mpfr_zero_p (result->value.real))
+  mpfr_exp_t exp;
+  if (mpfr_regular_p (result->value.real))
     {
       exp = mpfr_get_exp (result->value.real);
       /* If result is getting close to overflowing, scale down.  */
@@ -6038,7 +6038,7 @@  norm2_add_squared (gfc_expr *result, gfc_expr *e)
     }
 
   mpfr_init (tmp);
-  if (mpfr_number_p (e->value.real) && !mpfr_zero_p (e->value.real))
+  if (mpfr_regular_p (e->value.real))
     {
       exp = mpfr_get_exp (e->value.real);
       /* If e**2 would overflow or close to overflowing, scale down.  */
@@ -6079,9 +6079,7 @@  norm2_do_sqrt (gfc_expr *result, gfc_expr *e)
   if (result != e)
     mpfr_set (result->value.real, e->value.real, GFC_RND_MODE);
   mpfr_sqrt (result->value.real, result->value.real, GFC_RND_MODE);
-  if (norm2_scale
-      && mpfr_number_p (result->value.real)
-      && !mpfr_zero_p (result->value.real))
+  if (norm2_scale && mpfr_regular_p (result->value.real))
     {
       mpfr_t tmp;
       mpfr_init (tmp);
@@ -6120,9 +6118,7 @@  gfc_simplify_norm2 (gfc_expr *e, gfc_expr *dim)
       result = simplify_transformation_to_scalar (result, e, NULL,
 						  norm2_add_squared);
       mpfr_sqrt (result->value.real, result->value.real, GFC_RND_MODE);
-      if (norm2_scale
-	  && mpfr_number_p (result->value.real)
-	  && !mpfr_zero_p (result->value.real))
+      if (norm2_scale && mpfr_regular_p (result->value.real))
 	{
 	  mpfr_t tmp;
 	  mpfr_init (tmp);