* builtins.c (real_dconstp): Delete.
authorghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 Mar 2009 21:55:20 +0000 (21:55 +0000)
committerghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 Mar 2009 21:55:20 +0000 (21:55 +0000)
(fold_builtin_logarithm): Remove inaccurate log(e) special case.

testsuite:
* gcc.dg/torture/builtin-explog-1.c: Remove tests that aren't true
for low precision (i.e. float).

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145130 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/builtins.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/builtin-explog-1.c

index d7a6635..3c58c26 100644 (file)
@@ -1,3 +1,8 @@
+2009-03-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * builtins.c (real_dconstp): Delete.
+       (fold_builtin_logarithm): Remove inaccurate log(e) special case.
+
 2009-03-27  Dodji Seketeli  <dodji@redhat.com>
            Jakub Jelinek  <jakub@redhat.com>
 
index 83ce8eb..fab8a4c 100644 (file)
@@ -8331,21 +8331,6 @@ fold_builtin_bswap (tree fndecl, tree arg)
   return NULL_TREE;
 }
 
-/* Return true if EXPR is the real constant contained in VALUE.  */
-
-static bool
-real_dconstp (tree expr, const REAL_VALUE_TYPE *value)
-{
-  STRIP_NOPS (expr);
-
-  return ((TREE_CODE (expr) == REAL_CST
-          && !TREE_OVERFLOW (expr)
-          && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), *value))
-         || (TREE_CODE (expr) == COMPLEX_CST
-             && real_dconstp (TREE_REALPART (expr), value)
-             && real_zerop (TREE_IMAGPART (expr))));
-}
-
 /* A subroutine of fold_builtin to fold the various logarithmic
    functions.  Return NULL_TREE if no simplification can me made.
    FUNC is the corresponding MPFR logarithm function.  */
@@ -8360,17 +8345,6 @@ fold_builtin_logarithm (tree fndecl, tree arg,
       tree res;
       const enum built_in_function fcode = builtin_mathfn_code (arg);
 
-      /* Optimize log(e) = 1.0.  We're never passed an exact 'e',
-        instead we'll look for 'e' truncated to MODE.  So only do
-        this if flag_unsafe_math_optimizations is set.  */
-      if (flag_unsafe_math_optimizations && func == mpfr_log)
-        {
-         const REAL_VALUE_TYPE e_truncated =
-           real_value_truncate (TYPE_MODE (type), dconst_e ());
-         if (real_dconstp (arg, &e_truncated))
-           return build_real (type, dconst1);
-       }
-
       /* Calculate the result when the argument is a constant.  */
       if ((res = do_mpfr_arg1 (arg, type, func, &dconst0, NULL, false)))
        return res;
index 6898d86..2f1903a 100644 (file)
@@ -1,3 +1,8 @@
+2009-03-27  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * gcc.dg/torture/builtin-explog-1.c: Remove tests that aren't true
+       for low precision (i.e. float).
+
 2009-03-27  Dodji Seketeli  <dodji@redhat.com>
            Jakub Jelinek  <jakub@redhat.com>
 
index 4d7de84..7402061 100644 (file)
@@ -53,7 +53,6 @@ void test(double d1, double d2, float f1, float f2,
  if (LOG(BASE) != 1.0 || LOG##f(BASE##F) != 1.0F || LOG##l(BASE##L) != 1.0L) \
     link_failure_##LOG##_N()
 
-  LOG_N(log, M_E);
   LOG_N(log2, 2.0);
   LOG_N(log10, 10.0);
 
@@ -74,7 +73,6 @@ void test(double d1, double d2, float f1, float f2,
  if (LOG(EXP(d1)) != d1*LOG(BASE) || LOG##f(EXP##f(f1)) != f1*LOG##f(BASE##F) \
   || LOG##l(EXP##l(ld1)) != ld1*LOG##l(BASE##L)) link_failure_##LOG##_##EXP()
 
-  LOGEXP(log,exp,M_E);
   LOGEXP(log,exp2,2.0);
   LOGEXP(log,exp10,10.0);
   LOGEXP(log,pow10,10.0);