optimize tanh(x) / sinh (x) to 1/ cosh (x)
gcc/ * match.pd (tanh/sinh -> 1/cosh): New simplification. gcc/testsuite * gcc.dg/tanhbysinh.c: New testcase.
This commit is contained in:
parent
817738fdf1
commit
29e304fd5f
@ -5229,6 +5229,11 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|
||||
(rdiv (SINH:s @0) (COSH:s @0))
|
||||
(TANH @0))
|
||||
|
||||
/* Simplify tanh (x) / sinh (x) -> 1.0 / cosh (x). */
|
||||
(simplify
|
||||
(rdiv (TANH:s @0) (SINH:s @0))
|
||||
(rdiv {build_one_cst (type);} (COSH @0)))
|
||||
|
||||
/* Simplify cos(x) / sin(x) -> 1 / tan(x). */
|
||||
(simplify
|
||||
(rdiv (COS:s @0) (SIN:s @0))
|
||||
|
40
gcc/testsuite/gcc.dg/tanhbysinh.c
Normal file
40
gcc/testsuite/gcc.dg/tanhbysinh.c
Normal file
@ -0,0 +1,40 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Ofast -fdump-tree-optimized" } */
|
||||
|
||||
extern float sinhf (float);
|
||||
extern float tanhf (float);
|
||||
extern double sinh (double);
|
||||
extern double tanh (double);
|
||||
extern long double sinhl (long double);
|
||||
extern long double tanhl (long double);
|
||||
|
||||
double __attribute__ ((noinline))
|
||||
tanhbysinh_ (double x)
|
||||
{
|
||||
return tanh (x) / sinh (x);
|
||||
}
|
||||
|
||||
float __attribute__ ((noinline))
|
||||
tanhbysinhf_ (float x)
|
||||
{
|
||||
return tanhf (x) / sinhf (x);
|
||||
}
|
||||
|
||||
long double __attribute__ ((noinline))
|
||||
tanhbysinhl_ (long double x)
|
||||
{
|
||||
return tanhl (x) / sinhl (x);
|
||||
}
|
||||
|
||||
|
||||
/* There must be no calls to sinh or atanh */
|
||||
/* There must be calls to cosh */
|
||||
/* {dg-final { scan-tree-dump-not "sinh " "optimized" } } */
|
||||
/* {dg-final { scan-tree-dump-not "tanh " "optimized" }} */
|
||||
/* {dg-final { scan-tree-dump-not "sinhf " "optimized" } } */
|
||||
/* {dg-final { scan-tree-dump-not "tanhf " "optimized" }} */
|
||||
/* {dg-final { scan-tree-dump-not "sinhl " "optimized" } } */
|
||||
/* {dg-final { scan-tree-dump-not "tanhl " "optimized" }} */
|
||||
/* { dg-final { scan-tree-dump "cosh " "optimized" } } */
|
||||
/* { dg-final { scan-tree-dump "coshf " "optimized" } } */
|
||||
/* { dg-final { scan-tree-dump "coshl " "optimized" } } */
|
Loading…
Reference in New Issue
Block a user