diff options
author | Kaveh R. Ghazi <ghazi@caip.rutgers.edu> | 2007-07-18 17:51:13 +0000 |
---|---|---|
committer | Kaveh Ghazi <ghazi@gcc.gnu.org> | 2007-07-18 17:51:13 +0000 |
commit | 8a91c45bbfb3d5c99560ab89dc1dc55a1add8719 (patch) | |
tree | 9ffecaf26eda365c1b062b84581aba0966791c13 /gcc/testsuite | |
parent | 0c8d3c2b0852bf0eca1413c311fc3d2a9d3c1ade (diff) | |
download | gcc-8a91c45bbfb3d5c99560ab89dc1dc55a1add8719.zip gcc-8a91c45bbfb3d5c99560ab89dc1dc55a1add8719.tar.gz gcc-8a91c45bbfb3d5c99560ab89dc1dc55a1add8719.tar.bz2 |
re PR target/30652 (SSE expansion is missing for isinf() and other fpclassify functions)
PR target/30652
* builtins.c (expand_builtin_interclass_mathfn): Provide a generic
transformation for builtin ISNORMAL.
(expand_builtin): Handle BUILT_IN_ISNORMAL.
* builtins.def (BUILT_IN_ISNORMAL): New.
* doc/extend.texi: Document isnormal.
testsuite:
* gcc.dg/pr28796-2.c: Add more cases.
From-SVN: r126726
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr28796-2.c | 37 |
2 files changed, 32 insertions, 9 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 64a5d01..ab18376 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2007-07-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + * gcc.dg/pr28796-2.c: Add more cases. + +2007-07-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + * gcc.dg/pr28796-1.c: Add more cases. * gcc.dg/pr28796-2.c: Likewise. diff --git a/gcc/testsuite/gcc.dg/pr28796-2.c b/gcc/testsuite/gcc.dg/pr28796-2.c index 6f929a8..c69a60e 100644 --- a/gcc/testsuite/gcc.dg/pr28796-2.c +++ b/gcc/testsuite/gcc.dg/pr28796-2.c @@ -6,7 +6,8 @@ extern void abort (void); void __attribute__ ((__noinline__)) foo_1 (float f, double d, long double ld, - int res_unord, int res_isnan, int res_isinf, int res_isfin) + int res_unord, int res_isnan, int res_isinf, + int res_isfin, int res_isnorm) { if (__builtin_isunordered (f, 0) != res_unord) abort (); @@ -43,6 +44,13 @@ foo_1 (float f, double d, long double ld, if (__builtin_isinfl (ld) != res_isinf) abort (); + if (__builtin_isnormal (f) != res_isnorm) + abort (); + if (__builtin_isnormal (d) != res_isnorm) + abort (); + if (__builtin_isnormal (ld) != res_isnorm) + abort (); + if (__builtin_isfinite (f) != res_isfin) abort (); if (__builtin_isfinite (d) != res_isfin) @@ -64,10 +72,12 @@ foo_1 (float f, double d, long double ld, void __attribute__ ((__noinline__)) foo (float f, double d, long double ld, - int res_unord, int res_isnan, int res_isinf, int res_isfin) + int res_unord, int res_isnan, int res_isinf, + int res_isfin, int res_isnorm) { - 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); + foo_1 (f, d, ld, res_unord, res_isnan, res_isinf, res_isfin, res_isnorm); + /* Try all values negative as well. */ + foo_1 (-f, -d, -ld, res_unord, res_isnan, res_isinf, res_isfin, res_isnorm); } int main() @@ -77,19 +87,28 @@ int main() long double ld; f = __builtin_nanf(""); d = __builtin_nan(""); ld = __builtin_nanl(""); - foo(f, d, ld, /*unord=*/ 1, /*isnan=*/ 1, /*isinf=*/ 0, /*isfin=*/ 0); + foo(f, d, ld, /*unord=*/ 1, /*isnan=*/ 1, /*isinf=*/ 0, /*isfin=*/ 0, /*isnorm=*/ 0); f = __builtin_inff(); d = __builtin_inf(); ld = __builtin_infl(); - foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 1, /*isfin=*/ 0); + foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 1, /*isfin=*/ 0, /*isnorm=*/ 0); f = 0; d = 0; ld = 0; - foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1); + foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1, /*isnorm=*/ 0); + + f = 1; d = 1; ld = 1; + foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1, /*isnorm=*/ 1); f = __FLT_MIN__; d = __DBL_MIN__; ld = __LDBL_MIN__; - foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1); + foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1, /*isnorm=*/ 1); + + f = __FLT_MIN__/2; d = __DBL_MIN__/2; ld = __LDBL_MIN__/2; + foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1, /*isnorm=*/ 0); f = __FLT_MAX__; d = __DBL_MAX__; ld = __LDBL_MAX__; - foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1); + foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 0, /*isfin=*/ 1, /*isnorm=*/ 1); + + f = __FLT_MAX__*2; d = __DBL_MAX__*2; ld = __LDBL_MAX__*2; + foo(f, d, ld, /*unord=*/ 0, /*isnan=*/ 0, /*isinf=*/ 1, /*isfin=*/ 0, /*isnorm=*/ 0); return 0; } |