aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>2007-07-18 17:30:38 +0000
committerKaveh Ghazi <ghazi@gcc.gnu.org>2007-07-18 17:30:38 +0000
commit7faa1bbb5d0206cc83f20c1145f612f7754fdcf3 (patch)
treeeb2db58c64bbaba8f0181d8d24ef99a386911de5 /gcc/testsuite
parentb5d32c25372d1e0604bbd8471d735e46215dbe03 (diff)
downloadgcc-7faa1bbb5d0206cc83f20c1145f612f7754fdcf3.zip
gcc-7faa1bbb5d0206cc83f20c1145f612f7754fdcf3.tar.gz
gcc-7faa1bbb5d0206cc83f20c1145f612f7754fdcf3.tar.bz2
re PR target/30652 (SSE expansion is missing for isinf() and other fpclassify functions)
PR target/30652 PR middle-end/20558 * builtins.c (expand_builtin_interclass_mathfn): Provide a generic fallback for isinf. * c-cppbuiltin.c (builtin_define_float_constants): Move FP max calculation code ... * real.c (get_max_float): ... to here. * real.h (get_max_float): New. testsuite: * gcc.dg/pr28796-1.c: Add more cases. * gcc.dg/pr28796-2.c: Likewise. From-SVN: r126724
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr28796-1.c31
-rw-r--r--gcc/testsuite/gcc.dg/pr28796-2.c72
3 files changed, 102 insertions, 6 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e1a8f1f..1c48519 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-07-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/pr28796-1.c: Add more cases.
+ * gcc.dg/pr28796-2.c: Likewise.
+
2007-07-17 Janus Weil <jaydub66@gmail.com>
PR fortran/32535
diff --git a/gcc/testsuite/gcc.dg/pr28796-1.c b/gcc/testsuite/gcc.dg/pr28796-1.c
index a762bec..d200b1a 100644
--- a/gcc/testsuite/gcc.dg/pr28796-1.c
+++ b/gcc/testsuite/gcc.dg/pr28796-1.c
@@ -1,17 +1,48 @@
/* { dg-do link } */
/* { dg-options "-ffinite-math-only" } */
+extern void link_error(void);
+
float f;
+double d;
+long double ld;
int main()
{
if (__builtin_isunordered (f, f) != 0)
link_error ();
+ if (__builtin_isunordered (d, d) != 0)
+ link_error ();
+ if (__builtin_isunordered (ld, ld) != 0)
+ link_error ();
+
if (__builtin_isnan (f) != 0)
link_error ();
+ if (__builtin_isnan (d) != 0)
+ link_error ();
+ if (__builtin_isnan (ld) != 0)
+ link_error ();
+ if (__builtin_isnanf (f) != 0)
+ link_error ();
+ if (__builtin_isnanl (ld) != 0)
+ link_error ();
+
if (__builtin_finite (f) != 1)
link_error ();
+ if (__builtin_finite (d) != 1)
+ link_error ();
+ if (__builtin_finite (ld) != 1)
+ link_error ();
+ if (__builtin_finitef (f) != 1)
+ link_error ();
+ if (__builtin_finitel (ld) != 1)
+ link_error ();
+
if (f != f)
link_error ();
+ if (d != d)
+ link_error ();
+ if (ld != ld)
+ link_error ();
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/pr28796-2.c b/gcc/testsuite/gcc.dg/pr28796-2.c
index f76bfed..2545484 100644
--- a/gcc/testsuite/gcc.dg/pr28796-2.c
+++ b/gcc/testsuite/gcc.dg/pr28796-2.c
@@ -4,19 +4,79 @@
extern void abort (void);
-void foo(float f)
+void __attribute__ ((__noinline__))
+foo_1 (float f, double d, long double ld,
+ int res_unord, int res_isnan, int res_isinf, int res_isfin)
{
- if (__builtin_isunordered (f, f) != 1)
+ if (__builtin_isunordered (f, 0) != res_unord)
abort ();
- if (__builtin_isnan (f) != 1)
+ if (__builtin_isunordered (0, f) != res_unord)
abort ();
- if (__builtin_finite (f) != 0)
+ if (__builtin_isunordered (d, 0) != res_unord)
+ abort ();
+ if (__builtin_isunordered (0, d) != res_unord)
+ abort ();
+ if (__builtin_isunordered (ld, 0) != res_unord)
+ abort ();
+ if (__builtin_isunordered (0, ld) != res_unord)
+ abort ();
+
+ if (__builtin_isnan (f) != res_isnan)
+ abort ();
+ if (__builtin_isnan (d) != res_isnan)
+ abort ();
+ if (__builtin_isnan (ld) != res_isnan)
+ abort ();
+ if (__builtin_isnanf (f) != res_isnan)
+ abort ();
+ if (__builtin_isnanl (ld) != res_isnan)
+ abort ();
+
+ if (__builtin_isinf (f) != res_isinf)
+ abort ();
+ if (__builtin_isinf (d) != res_isinf)
+ abort ();
+ if (__builtin_isinf (ld) != res_isinf)
+ abort ();
+ if (__builtin_isinff (f) != res_isinf)
+ abort ();
+ if (__builtin_isinfl (ld) != res_isinf)
+ abort ();
+
+ if (__builtin_finite (f) != res_isfin)
+ abort ();
+ if (__builtin_finite (d) != res_isfin)
abort ();
}
+void __attribute__ ((__noinline__))
+foo (float f, double d, long double ld,
+ int res_unord, int res_isnan, int res_isinf, int res_isfin)
+{
+ foo_1 (f, d, ld, res_unord, res_isnan, res_isinf, res_isfin);
+ foo_1 (-f, -d, -ld, res_unord, res_isnan, res_isinf, res_isfin);
+}
+
int main()
{
- float f = __builtin_nanf("");
- foo(f);
+ float f;
+ double d;
+ long double ld;
+
+ f = __builtin_nanf(""); d = __builtin_nan(""); ld = __builtin_nanl("");
+ foo(f, d, ld, /*unord=*/ 1, /*isnan=*/ 1, /*isinf=*/ 0, /*isfin=*/ 0);
+
+ f = __builtin_inff(); d = __builtin_inf(); ld = __builtin_infl();
+ foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 1, /*isfin=*/ 0);
+
+ f = 0; d = 0; ld = 0;
+ foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1);
+
+ f = __FLT_MIN__; d = __DBL_MIN__; ld = __LDBL_MIN__;
+ foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1);
+
+ f = __FLT_MAX__; d = __DBL_MAX__; ld = __LDBL_MAX__;
+ foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1);
+
return 0;
}