This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: patch to solve PR39856
Jakub Jelinek wrote:
On Fri, May 22, 2009 at 03:25:08PM -0400, Vladimir Makarov wrote:
^^^ This isn't needed IMHO.
+/* { dg-options "-O3 -fomit-frame-pointer -m32 -msse3 -march=i586" } */
Why? The above option set will work on x86 and x86_64 without a problem.
Because the decision whether to test with -m32 or -m64 should be tester's
decision (how do you invoke make chec, e.g. with
make check RUNTESTFLAGS="--target_board=unix/\{-m32,-m64\}"
you want to test both, etc. Several people have been cleaning tests over
time not to have these...
Jakub, thanks for the explanation. It looks like I have no skills to
write the tests.
Taking you comments into account the new version of the patch looks like
2009-05-22 Vladimir Makarov <vmakarov@redhat.com>
* testsuite/gcc.target/i386/pr39856.c: New test.
Is it ok for the branch and trunk? I've checked it on x86 and x86_64.
Index: testsuite/gcc.target/i386/pr39856.c
===================================================================
--- testsuite/gcc.target/i386/pr39856.c (revision 0)
+++ testsuite/gcc.target/i386/pr39856.c (revision 0)
@@ -0,0 +1,31 @@
+/* PR target/39856 */
+/* { dg-do compile } */
+/* { dg-options "-O3 -fomit-frame-pointer -msse3" } */
+/* { dg-options "-O3 -fomit-frame-pointer -msse3 -march=i586" { target ilp32 } } */
+extern double pow (double, double);
+extern double fabs (double);
+void foo (double *);
+void bar (double *);
+
+static double
+baz (double x, double e)
+{
+ if ((int) e == 1)
+ return x;
+ return pow (x, e);
+}
+
+void
+test (double *x, double *y)
+{
+ double P[3], r;
+
+ bar (P);
+ if (P[2] != 0)
+ baz (fabs (P[2]), y[2]);
+ if (fabs (P[0]) > fabs (P[1]))
+ r = baz (fabs (P[1] / P[0]), y[0]);
+ if (P[2])
+ P[2] *= (1 + r);
+ foo (x);
+}