diff options
author | Michael Matz <matz@suse.de> | 2009-10-29 16:41:10 +0000 |
---|---|---|
committer | Michael Matz <matz@gcc.gnu.org> | 2009-10-29 16:41:10 +0000 |
commit | 44e824996b295fb81976a35028097fea1b89c809 (patch) | |
tree | 78477739bb15b85a322a94a9a30767583a0fc1cf /gcc/testsuite | |
parent | 64ba093a7ab56b482eca1ac6bf3c09454325e144 (diff) | |
download | gcc-44e824996b295fb81976a35028097fea1b89c809.zip gcc-44e824996b295fb81976a35028097fea1b89c809.tar.gz gcc-44e824996b295fb81976a35028097fea1b89c809.tar.bz2 |
tree-ssa-math-opts.c (execute_convert_to_rsqrt): Remove.
* tree-ssa-math-opts.c (execute_convert_to_rsqrt): Remove.
(gate_convert_to_rsqrt): Ditto.
(pass_convert_to_rsqrt): Ditto.
* tree-pass.h (pass_convert_to_rsqrt): Don't declare.
* passes.c (init_optimization_passes): Don't add pass_convert_to_rsqrt
to pass list.
* config/i386/i386.c (ix86_emit_swdivsf): Change evaluation order.
testsuite/
* gcc.target/i386/sse-recip.c: Use fabsf instead of != .
* gcc.target/i386/sse-recip-vec.c: Ditto.
* gcc.target/i386/brokensqrt.c: New test.
From-SVN: r153713
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/brokensqrt.c | 29 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/sse-recip-vec.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/sse-recip.c | 3 |
4 files changed, 39 insertions, 2 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1255e8f..e382b96 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-10-29 Michael Matz <matz@suse.de> + + * gcc.target/i386/sse-recip.c: Use fabsf instead of != . + * gcc.target/i386/sse-recip-vec.c: Ditto. + * gcc.target/i386/brokensqrt.c: New test. + 2009-10-29 Tobias Burnus <burnus@net-b.de> PR fortran/41777 diff --git a/gcc/testsuite/gcc.target/i386/brokensqrt.c b/gcc/testsuite/gcc.target/i386/brokensqrt.c new file mode 100644 index 0000000..19a59d8 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/brokensqrt.c @@ -0,0 +1,29 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -ffast-math -msse -mfpmath=sse -mrecip" } */ +#include "sse-check.h" + +extern float sqrtf (float); +float __attribute__((noinline)) broken (float a, float b) +{ + return sqrtf (a / b); +} + +extern void abort (void); +extern void *memcpy (void *, const void *, __SIZE_TYPE__); +static void +sse_test (void) +{ + int i; + float x; + char buf[sizeof (float)]; + x = broken (0.0f, 10000.0f); + /* A convoluted way to check for the correct result (zero) for all + floating point formats. + We can't use ==, !=, or range checks, or isinf/isnan/isunordered, + because all of these will not do the right thing under -ffast-math, + as they can assume that neither nan nor inf are returned. */ + memcpy (&buf, &x, sizeof (float)); + for (i = 0; i < sizeof (float); i++) + if (buf[i] != 0) + abort (); +} diff --git a/gcc/testsuite/gcc.target/i386/sse-recip-vec.c b/gcc/testsuite/gcc.target/i386/sse-recip-vec.c index 2f90ec8..202351d 100644 --- a/gcc/testsuite/gcc.target/i386/sse-recip-vec.c +++ b/gcc/testsuite/gcc.target/i386/sse-recip-vec.c @@ -4,6 +4,7 @@ #include "sse-check.h" extern float sqrtf (float); +extern float fabsf (float); #define N 8 @@ -26,7 +27,7 @@ sse_test (void) /* check results: */ for (i = 0; i < N; i++) { - if (r[i] != rc[i]) + if (fabsf (r[i] - rc[i]) > 0.0001) abort(); } } diff --git a/gcc/testsuite/gcc.target/i386/sse-recip.c b/gcc/testsuite/gcc.target/i386/sse-recip.c index b673f40..d88eb7f 100644 --- a/gcc/testsuite/gcc.target/i386/sse-recip.c +++ b/gcc/testsuite/gcc.target/i386/sse-recip.c @@ -4,6 +4,7 @@ #include "sse-check.h" extern float sqrtf (float); +extern float fabsf (float); #define N 8 @@ -26,7 +27,7 @@ sse_test (void) /* check results: */ for (i = 0; i < N; i++) { - if (r[i] != rc[i]) + if (fabsf (r[i] - rc[i]) > 0.0001) abort(); } } |