]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
convert.c (convert_to_integer): Fix nearbyint/rint -> *lrint conversion.
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>
Mon, 5 Mar 2007 23:30:04 +0000 (23:30 +0000)
committerKaveh Ghazi <ghazi@gcc.gnu.org>
Mon, 5 Mar 2007 23:30:04 +0000 (23:30 +0000)
* convert.c (convert_to_integer): Fix nearbyint/rint -> *lrint
conversion.

testsuite:
* gcc.dg/torture/builtin-convert-4.c: New test.

From-SVN: r122581

gcc/ChangeLog
gcc/convert.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/builtin-convert-4.c [new file with mode: 0644]

index a27533fedfe28a979edf273aac9fb5b42f7f3214..f6a9af9a8541966b6ba9b0576e1880ad79dbc81f 100644 (file)
@@ -1,3 +1,8 @@
+2007-03-05  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * convert.c (convert_to_integer): Fix nearbyint/rint -> *lrint
+       conversion.
+
 2007-03-05  Ian Lance Taylor  <iant@google.com>
 
        * c.opt (fgnu89-inline): New option.
index b6c6d0fcf750c85c29195cc1032e36ef2e4422b4..82b40bad0a7465f4c9a7b62657b80aa4fc26d358 100644 (file)
@@ -413,12 +413,12 @@ convert_to_integer (tree type, tree expr)
            fn = mathfn_built_in (s_intype, BUILT_IN_LLROUND);
          break;
 
-       CASE_FLT_FN (BUILT_IN_RINT):
-         /* Only convert rint* if we can ignore math exceptions.  */
+       CASE_FLT_FN (BUILT_IN_NEARBYINT):
+         /* Only convert nearbyint* if we can ignore math exceptions.  */
          if (flag_trapping_math)
            break;
          /* ... Fall through ...  */
-       CASE_FLT_FN (BUILT_IN_NEARBYINT):
+       CASE_FLT_FN (BUILT_IN_RINT):
          if (outprec < TYPE_PRECISION (long_integer_type_node)
              || (outprec == TYPE_PRECISION (long_integer_type_node)
                  && !TYPE_UNSIGNED (type)))
index c3205c6140fe10f36f2fcae2fbe4a5be1acf574f..7753a04e5aea63dfe185014cd0e690d593dd913d 100644 (file)
@@ -1,3 +1,7 @@
+2007-03-05  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * gcc.dg/torture/builtin-convert-4.c: New test.
+
 2007-03-05  Ian Lance Taylor  <iant@google.com>
 
        * gcc.c-torture/compile/pr31034.c: New test.
diff --git a/gcc/testsuite/gcc.dg/torture/builtin-convert-4.c b/gcc/testsuite/gcc.dg/torture/builtin-convert-4.c
new file mode 100644 (file)
index 0000000..c37bd5e
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright (C) 2007  Free Software Foundation.
+
+   Verify that nearbyint isn't transformed into e.g. rint or lrint
+   when -ftrapping-math is set.
+
+   Written by Kaveh ghazi, 2007-03-04.  */
+
+/* { dg-do compile } */
+/* { dg-options "-ftrapping-math -fdump-tree-original" } */
+/* { dg-options "-ftrapping-math -fdump-tree-original -mmacosx-version-min=10.3" { target powerpc-*-darwin* } } */
+/* { dg-options "-ftrapping-math -fdump-tree-original -std=c99" { target *-*-solaris2* } } */
+
+#include "../builtins-config.h"
+
+extern void bar (long);
+
+#define TESTIT(FUNC) do { \
+  bar (__builtin_##FUNC(d)); \
+  bar (__builtin_##FUNC##f(f)); \
+  bar (__builtin_##FUNC##l(ld)); \
+} while (0)
+
+void __attribute__ ((__noinline__)) foo (double d, float f, long double ld)
+{
+  TESTIT(nearbyint);
+}
+
+int main()
+{
+  foo (1.0, 2.0, 3.0);
+  return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "nearbyint " 1 "original" } } */
+/* { dg-final { scan-tree-dump-times "nearbyintf" 1 "original" } } */
+/* { dg-final { scan-tree-dump-times "nearbyintl" 1 "original" } } */
+/* { dg-final { cleanup-tree-dump "original" } } */