On February 21, 2019 4:55:57 PM GMT+01:00, Wilco Dijkstra 
<wilco.dijks...@arm.com> wrote:
>Fix PR89437. Fix the sinatan-1.c testcase to not run without
>a C99 target system.  Use nextafterl for long double initialization.

OK. 

>Fix an issue with sinl (atanl (sqrtl (LDBL_MAX)) returning 0.0
>instead of 1.0 by using x < sqrtl (LDBL_MAX) in match.pd.

Wasn't that a intermediate problem with the mpfr exponent range limiting? 
Please check whether that's still needed. 

Richard. 

>OK for commit?
>
>ChangeLog:
>2019-02-21  Wilco Dijkstra  <wdijk...@arm.com>
>
>    gcc/
>       * match.pd: Use lt in sin(atan(x)) and cos(atan(x)) simplifications.
>
>    testsuite/
>       * gcc.dg/sinatan-1.c: Fix testcase.
>--
>diff --git a/gcc/match.pd b/gcc/match.pd
>index
>bccf4df05a2f94785446719b3097b3f912fafe96..c9af2e59441c4fe19e88d94c9d138ae35dfe673f
>100644
>--- a/gcc/match.pd
>+++ b/gcc/match.pd
>@@ -4407,7 +4407,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
>       tree t_one = build_one_cst (type);
>      }
>     (if (SCALAR_FLOAT_TYPE_P (type))
>-     (cond (le (abs @0) { t_cst; })
>+     (cond (lt (abs @0) { t_cst; })
>       (rdiv @0 (sqrts (plus (mult @0 @0) { t_one; })))
>       (copysigns { t_one; } @0))))))
> 
>@@ -4427,7 +4427,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
>       tree t_zero = build_zero_cst (type);
>      }
>     (if (SCALAR_FLOAT_TYPE_P (type))
>-     (cond (le (abs @0) { t_cst; })
>+     (cond (lt (abs @0) { t_cst; })
>       (rdiv { t_one; } (sqrts (plus (mult @0 @0) { t_one; })))
>       (copysigns { t_zero; } @0))))))
> 
>diff --git a/gcc/testsuite/gcc.dg/sinatan-1.c
>b/gcc/testsuite/gcc.dg/sinatan-1.c
>index
>6a3995ae07949a423e416592276171b6e6f8c816..cfbb771a018d3175c680dce88e0121e469716edc
>100644
>--- a/gcc/testsuite/gcc.dg/sinatan-1.c
>+++ b/gcc/testsuite/gcc.dg/sinatan-1.c
>@@ -1,4 +1,4 @@
>-/* { dg-do run } */
>+/* { dg-do run { target c99_runtime } } */
> /* { dg-options "-Ofast" } */
> /* { dg-add-options ieee } */
> 
>@@ -62,7 +62,7 @@ main()
>     /* Get first x such that 1 + x*x will overflow */
>     float fc = nextafterf (sqrtf (__FLT_MAX__ - 1), __FLT_MAX__);
>     double c = nextafter (sqrt (__DBL_MAX__ - 1), __DBL_MAX__);
>-    long double lc = nextafter (sqrtl (__LDBL_MAX__ - 1),
>__LDBL_MAX__);
>+    long double lc = nextafterl (sqrtl (__LDBL_MAX__ - 1),
>__LDBL_MAX__);
> 
>     /*  Force move from FPU to memory, otherwise comparison may
>         fail due to possible more accurate registers (see 387)  */

Reply via email to