diff options
author | Kaveh R. Ghazi <ghazi@caip.rutgers.edu> | 2007-03-05 23:30:04 +0000 |
---|---|---|
committer | Kaveh Ghazi <ghazi@gcc.gnu.org> | 2007-03-05 23:30:04 +0000 |
commit | 65bda21f7fd8143d8e7211b3ee91c61596b3d21d (patch) | |
tree | 7565b48cdb356b8efb4e7cca01d3b79f02077194 | |
parent | 6f36e61ddaaf11b532e81bfb711f4b51214d8bfd (diff) | |
download | gcc-65bda21f7fd8143d8e7211b3ee91c61596b3d21d.zip gcc-65bda21f7fd8143d8e7211b3ee91c61596b3d21d.tar.gz gcc-65bda21f7fd8143d8e7211b3ee91c61596b3d21d.tar.bz2 |
convert.c (convert_to_integer): Fix nearbyint/rint -> *lrint conversion.
* convert.c (convert_to_integer): Fix nearbyint/rint -> *lrint
conversion.
testsuite:
* gcc.dg/torture/builtin-convert-4.c: New test.
From-SVN: r122581
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/convert.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/builtin-convert-4.c | 37 |
4 files changed, 49 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a27533f..f6a9af9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/convert.c b/gcc/convert.c index b6c6d0f..82b40ba 100644 --- a/gcc/convert.c +++ b/gcc/convert.c @@ -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))) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c3205c6..7753a04 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..c37bd5e --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/builtin-convert-4.c @@ -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" } } */ |