| /* { dg-do compile } */ |
| /* { dg-options "-Ofast -fdump-tree-optimized" } */ |
| |
| extern float sinf (float); |
| extern float cosf (float); |
| extern float atanf (float); |
| extern double sin (double); |
| extern double cos (double); |
| extern double atan (double); |
| extern long double sinl (long double); |
| extern long double cosl (long double); |
| extern long double atanl (long double); |
| |
| float __attribute__ ((noinline)) |
| cosatanf_(float x) |
| { |
| float atg = atanf(x); |
| return cosf(atg) + atg; |
| } |
| |
| double __attribute__ ((noinline)) |
| cosatan_(double x) |
| { |
| double atg = atan(x); |
| return cos(atg) + atg; |
| } |
| |
| long double __attribute__ ((noinline)) |
| cosatanl_(long double x) |
| { |
| long double atg = atanl(x); |
| return cosl(atg) + atg; |
| } |
| |
| float __attribute__ ((noinline)) |
| sinatanf_(float x) |
| { |
| float atg = atanf(x); |
| return sinf(atg) + atg; |
| } |
| |
| double __attribute__ ((noinline)) |
| sinatan_(double x) |
| { |
| double atg = atan(x); |
| return sin(atg) + atg; |
| } |
| |
| long double __attribute__ ((noinline)) |
| sinatanl_(long double x) |
| { |
| long double atg = atanl(x); |
| return sinl(atg) + atg; |
| } |
| |
| /* There should be calls to both sin and atan */ |
| /* { dg-final { scan-tree-dump "cos " "optimized" } } */ |
| /* { dg-final { scan-tree-dump "sin " "optimized" } } */ |
| /* { dg-final { scan-tree-dump "atan " "optimized" } } */ |
| /* { dg-final { scan-tree-dump "cosf " "optimized" } } */ |
| /* { dg-final { scan-tree-dump "sinf " "optimized" } } */ |
| /* { dg-final { scan-tree-dump "atanf " "optimized" } } */ |
| /* { dg-final { scan-tree-dump "cosl " "optimized" } } */ |
| /* { dg-final { scan-tree-dump "sinl " "optimized" } } */ |
| /* { dg-final { scan-tree-dump "atanl " "optimized" } } */ |