From fe27b7cc414a7b57ef801872157b596f4f39c1f6 Mon Sep 17 00:00:00 2001 From: "Kaveh R. Ghazi" Date: Thu, 11 Sep 2003 22:51:20 +0000 Subject: [PATCH] builtins.c (fold_builtin_logarithm): if N can't be truncated to MODE exactly... * builtins.c (fold_builtin_logarithm): if N can't be truncated to MODE exactly, then only convert logN(N) -> 1.0 if flag_unsafe_math_optimizations is set. From-SVN: r71322 --- gcc/ChangeLog | 4 ++++ gcc/builtins.c | 15 ++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d6d762417e8a..df66b3e2640b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2003-09-11 Kaveh R. Ghazi + * builtins.c (fold_builtin_logarithm): if N can't be truncated to + MODE exactly, then only convert logN(N) -> 1.0 if + flag_unsafe_math_optimizations is set. + * builtins.c (builtin_dconsts_init, dconstpi, dconste, init_builtin_dconsts): Delete. * emit-rtl.c (dconstpi, dconste): Define. diff --git a/gcc/builtins.c b/gcc/builtins.c index 4df0e95b7f6a..2e8189d106cd 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -5949,16 +5949,21 @@ fold_builtin_logarithm (tree exp, const REAL_VALUE_TYPE *value) tree type = TREE_TYPE (TREE_TYPE (fndecl)); tree arg = TREE_VALUE (arglist); const enum built_in_function fcode = builtin_mathfn_code (arg); - const REAL_VALUE_TYPE value_mode = - real_value_truncate (TYPE_MODE (type), *value); /* Optimize log*(1.0) = 0.0. */ if (real_onep (arg)) return build_real (type, dconst0); - /* Optimize logN(N) = 1.0. */ - if (real_dconstp (arg, &value_mode)) - return build_real (type, dconst1); + /* Optimize logN(N) = 1.0. If N can't be truncated to MODE + exactly, then only do this if flag_unsafe_math_optimizations. */ + if (exact_real_truncate (TYPE_MODE (type), value) + || flag_unsafe_math_optimizations) + { + const REAL_VALUE_TYPE value_truncate = + real_value_truncate (TYPE_MODE (type), *value); + if (real_dconstp (arg, &value_truncate)) + return build_real (type, dconst1); + } /* Special case, optimize logN(expN(x)) = x. */ if (flag_unsafe_math_optimizations