aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2009-10-29 16:41:10 +0000
committerMichael Matz <matz@gcc.gnu.org>2009-10-29 16:41:10 +0000
commit44e824996b295fb81976a35028097fea1b89c809 (patch)
tree78477739bb15b85a322a94a9a30767583a0fc1cf /gcc/testsuite
parent64ba093a7ab56b482eca1ac6bf3c09454325e144 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/i386/brokensqrt.c29
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-recip-vec.c3
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-recip.c3
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();
}
}