From f060a26123884c98f69ced61aea93dea895ea9eb Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Mon, 9 Feb 2009 09:35:22 +0000 Subject: re PR tree-optimization/35202 (exp->expf transformation incorrect with -fmath-errno) 2009-02-09 Richard Guenther PR middle-end/35202 * convert.c (convert_to_real): Disable (float)fn((double)x) to fnf(x) conversion if errno differences may occur and -fmath-errno is set. From-SVN: r144030 --- gcc/convert.c | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) (limited to 'gcc/convert.c') diff --git a/gcc/convert.c b/gcc/convert.c index 77907ba..278305d 100644 --- a/gcc/convert.c +++ b/gcc/convert.c @@ -139,40 +139,45 @@ convert_to_real (tree type, tree expr) switch (fcode) { #define CASE_MATHFN(FN) case BUILT_IN_##FN: case BUILT_IN_##FN##L: - CASE_MATHFN (ACOS) - CASE_MATHFN (ACOSH) - CASE_MATHFN (ASIN) - CASE_MATHFN (ASINH) - CASE_MATHFN (ATAN) - CASE_MATHFN (ATANH) - CASE_MATHFN (CBRT) - CASE_MATHFN (COS) CASE_MATHFN (COSH) - CASE_MATHFN (ERF) - CASE_MATHFN (ERFC) CASE_MATHFN (EXP) CASE_MATHFN (EXP10) CASE_MATHFN (EXP2) - CASE_MATHFN (EXPM1) - CASE_MATHFN (FABS) + CASE_MATHFN (EXPM1) CASE_MATHFN (GAMMA) CASE_MATHFN (J0) CASE_MATHFN (J1) CASE_MATHFN (LGAMMA) - CASE_MATHFN (LOG) - CASE_MATHFN (LOG10) - CASE_MATHFN (LOG1P) - CASE_MATHFN (LOG2) - CASE_MATHFN (LOGB) CASE_MATHFN (POW10) - CASE_MATHFN (SIN) CASE_MATHFN (SINH) - CASE_MATHFN (SQRT) - CASE_MATHFN (TAN) - CASE_MATHFN (TANH) CASE_MATHFN (TGAMMA) CASE_MATHFN (Y0) CASE_MATHFN (Y1) + /* The above functions may set errno differently with float + input or output so this transformation is not safe with + -fmath-errno. */ + if (flag_errno_math) + break; + CASE_MATHFN (ACOS) + CASE_MATHFN (ACOSH) + CASE_MATHFN (ASIN) + CASE_MATHFN (ASINH) + CASE_MATHFN (ATAN) + CASE_MATHFN (ATANH) + CASE_MATHFN (CBRT) + CASE_MATHFN (COS) + CASE_MATHFN (ERF) + CASE_MATHFN (ERFC) + CASE_MATHFN (FABS) + CASE_MATHFN (LOG) + CASE_MATHFN (LOG10) + CASE_MATHFN (LOG2) + CASE_MATHFN (LOG1P) + CASE_MATHFN (LOGB) + CASE_MATHFN (SIN) + CASE_MATHFN (SQRT) + CASE_MATHFN (TAN) + CASE_MATHFN (TANH) #undef CASE_MATHFN { tree arg0 = strip_float_extensions (CALL_EXPR_ARG (expr, 0)); -- cgit v1.1