fold-const.c (negate_mathfn_p): Add BUILT_IN_ERF.

* fold-const.c (negate_mathfn_p): Add BUILT_IN_ERF.

testsuite:
	* gcc.dg/torture/builtin-symmetric-1.c: New test.

From-SVN: r118682
This commit is contained in:
Kaveh R. Ghazi 2006-11-11 04:01:42 +00:00 committed by Kaveh Ghazi
parent b8b7f1621f
commit 345768ef3f
4 changed files with 63 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2006-11-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* fold-const.c (negate_mathfn_p): Add BUILT_IN_ERF.
2006-11-10 Roger Sayle <roger@eyesopen.com>
* tree.c (build_int_cst_wide): Add an assertion (gcc_unreachable)

View File

@ -894,6 +894,7 @@ negate_mathfn_p (enum built_in_function code)
CASE_FLT_FN (BUILT_IN_SINH):
CASE_FLT_FN (BUILT_IN_TAN):
CASE_FLT_FN (BUILT_IN_TANH):
CASE_FLT_FN (BUILT_IN_ERF):
return true;
default:

View File

@ -1,3 +1,7 @@
2006-11-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.dg/torture/builtin-symmetric-1.c: New test.
2006-11-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/29758

View File

@ -0,0 +1,54 @@
/* Copyright (C) 2006 Free Software Foundation.
Verify that built-in math function folding of symmetric even and
odd functions is correctly performed by the compiler.
Origin: Kaveh R. Ghazi, November 09, 2006. */
/* { dg-do link } */
/* { dg-options "-ffast-math" } */
/* All references to link_error should go away at compile-time. */
extern void link_error(int);
/* Test that FUNC(-ARG) == FUNC(ARG). */
#define TESTIT_EVEN(FUNC) do { \
if (__builtin_##FUNC##f(-xf) != __builtin_##FUNC##f(xf)) \
link_error(__LINE__); \
if (__builtin_##FUNC(-x) != __builtin_##FUNC(x)) \
link_error(__LINE__); \
if (__builtin_##FUNC##l(-xl) != __builtin_##FUNC##l(xl)) \
link_error(__LINE__); \
} while (0)
/* Test that -FUNC(ARG) == FUNC(-ARG). */
#define TESTIT_ODD(FUNC) do { \
if (-__builtin_##FUNC##f(-xf) != __builtin_##FUNC##f(xf)) \
link_error(__LINE__); \
if (-__builtin_##FUNC(-x) != __builtin_##FUNC(x)) \
link_error(__LINE__); \
if (-__builtin_##FUNC##l(-xl) != __builtin_##FUNC##l(xl)) \
link_error(__LINE__); \
} while (0)
void foo (float xf, double x, long double xl)
{
TESTIT_EVEN(cos);
TESTIT_ODD(asin);
TESTIT_ODD(asinh);
TESTIT_ODD(atan);
TESTIT_ODD(atanh);
TESTIT_ODD(cbrt);
TESTIT_ODD(sin);
TESTIT_ODD(sinh);
TESTIT_ODD(tan);
TESTIT_ODD(tanh);
TESTIT_ODD(erf);
}
int main()
{
foo (1,1,1);
return 0;
}