/* Copyright (C) 2002 Free Software Foundation. Verify that built-in math function constant folding doesn't cause any problems for the compiler. Written by Roger Sayle, 16th August 2002. */ /* { dg-do compile } */ /* { dg-options "-O2 -ffast-math" } */ extern double atan (double); extern float atanf (float); extern long double atanl (long double); extern double exp (double); extern float expf (float); extern long double expl (long double); extern double fabs (double); extern float fabsf (float); extern long double fabsl (long double); extern double log (double); extern float logf (float); extern long double logl (long double); extern double pow (double, double); extern float powf (float, float); extern long double powl (long double, long double); extern double sqrt (double); extern float sqrtf (float); extern long double sqrtl (long double); extern double tan (double); extern float tanf (float); extern long double tanl (long double); double test1(double x) { return log(exp(x)); } double test2(double x) { return exp(log(x)); } double test3(double x) { return sqrt(exp(x)); } double test4(double x) { return log(sqrt(x)); } double test5(double x, double y) { return sqrt(x)*sqrt(y); } double test6(double x, double y) { return exp(x)*exp(y); } double test7(double x, double y) { return x/exp(y); } double test8(double x) { return fabs(sqrt(x)); } double test9(double x) { return fabs(exp(x)); } double test10(double x) { return tan(atan(x)); } double test11(double x) { return fabs(fabs(x)); } double test12(double x) { return fabs(atan(x)); } double test13(double x) { return fabs(pow(2.0,x)); } float test1f(float x) { return logf(expf(x)); } float test2f(float x) { return expf(logf(x)); } float test3f(float x) { return sqrtf(expf(x)); } float test4f(float x) { return logf(sqrtf(x)); } float test5f(float x, float y) { return sqrtf(x)*sqrtf(y); } float test6f(float x, float y) { return expf(x)*expf(y); } float test7f(float x, float y) { return x/expf(y); } float test8f(float x) { return fabsf(sqrtf(x)); } float test9f(float x) { return fabsf(expf(x)); } float test10f(float x) { return tanf(atanf(x)); } float test11f(float x) { return fabsf(fabsf(x)); } float test12f(float x) { return fabsf(atanf(x)); } float test13f(float x) { return fabsf(powf(2.0f,x)); } long double test1l(long double x) { return logl(expl(x)); } long double test2l(long double x) { return expl(logl(x)); } long double test3l(long double x) { return sqrtl(expl(x)); } long double test4l(long double x) { return logl(sqrtl(x)); } long double test5l(long double x, long double y) { return sqrtl(x)*sqrtl(y); } long double test6l(long double x, long double y) { return expl(x)*expl(y); } long double test7l(long double x, long double y) { return x/expl(y); } long double test8l(long double x) { return fabsl(sqrtl(x)); } long double test9l(long double x) { return fabsl(expl(x)); } long double test10l(long double x) { return tanl(atanl(x)); } long double test11l(long double x) { return fabsl(fabsl(x)); } long double test12l(long double x) { return fabsl(atanl(x)); } long double test13l(long double x) { return fabsl(powl(2.0l,x)); }