Message ID | 20191118203450.8277-2-blomqvist.janne@gmail.com |
---|---|
State | New |
Headers | show |
Series | [1/2] PR 92463 MPFR modernization in GFortran | expand |
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);
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);