This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH]: PR29335 use MPFR for more trigonometric transcendentals
- From: "Kaveh R. GHAZI" <ghazi at caip dot rutgers dot edu>
- To: gcc-patches at gcc dot gnu dot org
- Cc: roger at eyesopen dot com
- Date: Tue, 24 Oct 2006 21:31:34 -0400 (EDT)
- Subject: Re: [PATCH]: PR29335 use MPFR for more trigonometric transcendentals
- References: <Pine.GSO.4.58.0610240841470.11903@caipclassic.rutgers.edu>
On Tue, 24 Oct 2006, Kaveh R. GHAZI wrote:
> Tested on sparc-sun-solaris2.10, no regressions, the new test
> builtin-math-3.c also passes. I also had another "notdone" test, but
> since we've agreed not to use that name, I'll update that as a separate
> patch, testing should be done later today. It did pass in its "notdone"
> form so I don't expect any problems...
As promised...
Tested via "make check" on Solaris 10 and installed on mainline.
--Kaveh
2006-10-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.dg/torture/builtin-math-2.c: Add checks for asin, acos,
acosh and atanh.
* gcc.dg/torture/builtin-math-3.c (TESTIT): Append 'F' and 'L'
floating point modifiers to arguments passed to float and long
double functions respectively. Update all callers to use floating
point numbers, not integers. Add tests for exp, exp2 and
exp10/pow10.
diff -rup orig/egcc-SVN20061024/gcc/testsuite/gcc.dg/torture/builtin-math-2.c egcc-SVN20061024/gcc/testsuite/gcc.dg/torture/builtin-math-2.c
--- orig/egcc-SVN20061024/gcc/testsuite/gcc.dg/torture/builtin-math-2.c 2006-10-24 13:50:51.000000000 -0400
+++ egcc-SVN20061024/gcc/testsuite/gcc.dg/torture/builtin-math-2.c 2006-10-24 16:50:00.361671870 -0400
@@ -1,7 +1,9 @@
-/* Test things that should block GCC from optimizing compile-time
+/* Copyright (C) 2006 Free Software Foundation.
+
+ Test things that should block GCC from optimizing compile-time
constants passed to a builtin transcendental function.
- Origin: Kaveh R. Ghazi 10/22/2006. */
+ Origin: Kaveh R. Ghazi, October 22, 2006. */
/* { dg-do compile } */
/* { dg-options "-fdump-tree-original" } */
@@ -59,9 +61,50 @@ void bar()
foof (__builtin_exp2f (-1.5F));
foo (__builtin_exp2 (-1.5));
fool (__builtin_exp2l (-1.5L));
+
+ /* The asin arg must be [-1 ... 1] inclusive. */
+ foof (__builtin_asinf (-1.5F));
+ foof (__builtin_asinf (1.5F));
+ foo (__builtin_asin (-1.5));
+ foo (__builtin_asin (1.5));
+ fool (__builtin_asinl (-1.5L));
+ fool (__builtin_asinl (1.5L));
+
+ /* The acos arg must be [-1 ... 1] inclusive. */
+ foof (__builtin_acosf (-1.5F));
+ foof (__builtin_acosf (1.5F));
+ foo (__builtin_acos (-1.5));
+ foo (__builtin_acos (1.5));
+ fool (__builtin_acosl (-1.5L));
+ fool (__builtin_acosl (1.5L));
+
+ /* The acosh arg must be [1 ... Inf] inclusive. */
+ foof (__builtin_acoshf (0.5F));
+ foo (__builtin_acosh (0.5));
+ fool (__builtin_acoshl (0.5L));
+
+ /* The atanh arg must be [-1 ... 1] exclusive. */
+ foof (__builtin_atanhf (-1.0F));
+ foof (__builtin_atanhf (1.0F));
+ foo (__builtin_atanh (-1.0));
+ foo (__builtin_atanh (1.0));
+ fool (__builtin_atanhl (-1.0L));
+ fool (__builtin_atanhl (1.0L));
}
/* { dg-final { scan-tree-dump-times "exp2 " 9 "original" } } */
/* { dg-final { scan-tree-dump-times "exp2f" 9 "original" } } */
/* { dg-final { scan-tree-dump-times "exp2l" 9 "original" } } */
+/* { dg-final { scan-tree-dump-times "asin " 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "asinf" 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "asinl" 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "acos " 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "acosf" 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "acosl" 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "acosh " 1 "original" } } */
+/* { dg-final { scan-tree-dump-times "acoshf" 1 "original" } } */
+/* { dg-final { scan-tree-dump-times "acoshl" 1 "original" } } */
+/* { dg-final { scan-tree-dump-times "atanh " 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "atanhf" 2 "original" } } */
+/* { dg-final { scan-tree-dump-times "atanhl" 2 "original" } } */
/* { dg-final { cleanup-tree-dump "original" } } */
diff -rup orig/egcc-SVN20061024/gcc/testsuite/gcc.dg/torture/builtin-math-3.c egcc-SVN20061024/gcc/testsuite/gcc.dg/torture/builtin-math-3.c
--- orig/egcc-SVN20061024/gcc/testsuite/gcc.dg/torture/builtin-math-3.c 2006-10-24 13:50:51.000000000 -0400
+++ egcc-SVN20061024/gcc/testsuite/gcc.dg/torture/builtin-math-3.c 2006-10-24 17:39:37.479487054 -0400
@@ -3,7 +3,7 @@
Verify that built-in math function constant folding of constant
arguments is correctly performed by the compiler.
- Origin: Kaveh R. Ghazi, October 23, 2006. */
+ Origin: Kaveh R. Ghazi, October 23, 2006. */
/* { dg-do link } */
@@ -12,11 +12,11 @@ extern void link_error(int);
/* Test that FUNC(ARG) == (RES). */
#define TESTIT(FUNC,ARG,RES) do { \
- if (__builtin_##FUNC##f(ARG) != RES) \
+ if (__builtin_##FUNC##f(ARG##F) != RES##F) \
link_error(__LINE__); \
if (__builtin_##FUNC(ARG) != RES) \
link_error(__LINE__); \
- if (__builtin_##FUNC##l(ARG) != RES) \
+ if (__builtin_##FUNC##l(ARG##L) != RES##L) \
link_error(__LINE__); \
} while (0);
@@ -32,40 +32,68 @@ extern void link_error(int);
int main (void)
{
- TESTIT2 (asin, -1, -3.15/2, -3.14/2); /* asin(-1) == -pi/2 */
- TESTIT (asin, 0, 0); /* asin(0) == 0 */
- TESTIT2 (asin, 1, 3.14/2, 3.15/2); /* asin(1) == pi/2 */
-
- TESTIT2 (acos, -1, 3.14, 3.15); /* acos(-1) == pi */
- TESTIT2 (acos, 0, 3.14/2, 3.15/2); /* acos(0) == pi/2 */
- TESTIT (acos, 1, 0); /* acos(1) == 0 */
-
- TESTIT2 (atan, -1, -3.15/4, -3.14/4); /* atan(-1) == -pi/4 */
- TESTIT (atan, 0, 0); /* atan(0) == 0 */
- TESTIT2 (atan, 1, 3.14/4, 3.15/4); /* atan(1) == pi/4 */
-
- TESTIT2 (asinh, -1, -0.89, -0.88); /* asinh(-1) == -0.881... */
- TESTIT (asinh, 0, 0); /* asinh(0) == 0 */
- TESTIT2 (asinh, 1, 0.88, 0.89); /* asinh(1) == 0.881... */
+ TESTIT2 (asin, -1.0, -3.15/2.0, -3.14/2.0); /* asin(-1) == -pi/2 */
+ TESTIT (asin, 0.0, 0.0); /* asin(0) == 0 */
+ TESTIT2 (asin, 1.0, 3.14/2.0, 3.15/2.0); /* asin(1) == pi/2 */
+
+ TESTIT2 (acos, -1.0, 3.14, 3.15); /* acos(-1) == pi */
+ TESTIT2 (acos, 0.0, 3.14/2.0, 3.15/2.0); /* acos(0) == pi/2 */
+ TESTIT (acos, 1.0, 0.0); /* acos(1) == 0 */
+
+ TESTIT2 (atan, -1.0, -3.15/4.0, -3.14/4.0); /* atan(-1) == -pi/4 */
+ TESTIT (atan, 0.0, 0.0); /* atan(0) == 0 */
+ TESTIT2 (atan, 1.0, 3.14/4.0, 3.15/4.0); /* atan(1) == pi/4 */
+
+ TESTIT2 (asinh, -1.0, -0.89, -0.88); /* asinh(-1) == -0.881... */
+ TESTIT (asinh, 0.0, 0.0); /* asinh(0) == 0 */
+ TESTIT2 (asinh, 1.0, 0.88, 0.89); /* asinh(1) == 0.881... */
- TESTIT (acosh, 1, 0); /* acosh(1) == 0. */
- TESTIT2 (acosh, 2, 1.31, 1.32); /* acosh(2) == 1.316... */
+ TESTIT (acosh, 1.0, 0.0); /* acosh(1) == 0. */
+ TESTIT2 (acosh, 2.0, 1.31, 1.32); /* acosh(2) == 1.316... */
TESTIT2 (atanh, -0.5, -0.55, -0.54); /* atanh(-0.5) == -0.549... */
- TESTIT (atanh, 0, 0); /* atanh(0) == 0 */
+ TESTIT (atanh, 0.0, 0.0); /* atanh(0) == 0 */
TESTIT2 (atanh, 0.5, 0.54, 0.55); /* atanh(0.5) == 0.549... */
- TESTIT2 (sinh, -1, -1.18, -1.17); /* sinh(-1) == -1.175... */
- TESTIT (sinh, 0, 0); /* sinh(0) == 0 */
- TESTIT2 (sinh, 1, 1.17, 1.18); /* sinh(1) == 1.175... */
-
- TESTIT2 (cosh, -1, 1.54, 1.55); /* cosh(-1) == 1.543... */
- TESTIT (cosh, 0, 1); /* cosh(0) == 1 */
- TESTIT2 (cosh, 1, 1.54, 1.55); /* cosh(1) == 1.543... */
-
- TESTIT2 (tanh, -1, -0.77, -0.76); /* tanh(-1) == -0.761... */
- TESTIT (tanh, 0, 0); /* tanh(0) == 0 */
- TESTIT2 (tanh, 1, 0.76, 0.77); /* tanh(1) == 0.761... */
+ TESTIT2 (sin, -1.0, -0.85, -0.84); /* sin(-1) == -0.841... */
+ TESTIT (sin, 0.0, 0.0); /* sin(0) == 0 */
+ TESTIT2 (sin, 1.0, 0.84, 0.85); /* sin(1) == 0.841... */
+
+ TESTIT2 (cos, -1.0, 0.54, 0.55); /* cos(-1) == 0.5403... */
+ TESTIT (cos, 0.0, 1.0); /* cos(0) == 1 */
+ TESTIT2 (cos, 1.0, 0.54, 0.55); /* cos(1) == 0.5403... */
+
+ TESTIT2 (tan, -1.0, -1.56, 1.55); /* tan(-1) == -1.557... */
+ TESTIT (tan, 0.0, 0.0); /* tan(0) == 0 */
+ TESTIT2 (tan, 1.0, 1.55, 1.56); /* tan(1) == 1.557... */
+
+ TESTIT2 (sinh, -1.0, -1.18, -1.17); /* sinh(-1) == -1.175... */
+ TESTIT (sinh, 0.0, 0.0); /* sinh(0) == 0 */
+ TESTIT2 (sinh, 1.0, 1.17, 1.18); /* sinh(1) == 1.175... */
+
+ TESTIT2 (cosh, -1.0, 1.54, 1.55); /* cosh(-1) == 1.543... */
+ TESTIT (cosh, 0.0, 1.0); /* cosh(0) == 1 */
+ TESTIT2 (cosh, 1.0, 1.54, 1.55); /* cosh(1) == 1.543... */
+
+ TESTIT2 (tanh, -1.0, -0.77, -0.76); /* tanh(-1) == -0.761... */
+ TESTIT (tanh, 0.0, 0.0); /* tanh(0) == 0 */
+ TESTIT2 (tanh, 1.0, 0.76, 0.77); /* tanh(1) == 0.761... */
+
+ TESTIT2 (exp, -1.0, 0.36, 0.37); /* exp(-1) == 1/e */
+ TESTIT (exp, 0.0, 1.0); /* exp(0) == 1 */
+ TESTIT2 (exp, 1.0, 2.71, 2.72); /* exp(1) == e */
+
+ TESTIT (exp2, -1.0, 0.5); /* exp2(-1) == 1/2 */
+ TESTIT (exp2, 0.0, 1.0); /* exp2(0) == 1 */
+ TESTIT (exp2, 1.0, 2.0); /* exp2(1) == 2 */
+
+ TESTIT (exp10, -1.0, 0.1); /* exp10(-1) == 1/10 */
+ TESTIT (exp10, 0.0, 1.0); /* exp10(0) == 1 */
+ TESTIT (exp10, 1.0, 10.0); /* exp10(1) == 10 */
+
+ TESTIT (pow10, -1.0, 0.1); /* pow10(-1) == 1/10 */
+ TESTIT (pow10, 0.0, 1.0); /* pow10(0) == 1 */
+ TESTIT (pow10, 1.0, 10.0); /* pow10(1) == 10 */
return 0;
}