This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][testsuite] Abort on failure in gcc.dg/pr30957-1.c


On 20-02-15 20:18, Mike Stump wrote:
On Feb 20, 2015, at 4:36 AM, Tom de Vries <Tom_deVries@mentor.com> wrote:
On 20-02-15 10:42, Jakub Jelinek wrote:
On Fri, Feb 20, 2015 at 10:25:54AM +0100, Tom de Vries wrote:
this patch reverses the abort logic in pr30957-1.c, such that it aborts on
failure rather than on success.

That sounds really weird.  From the description it looks like it is a known bug
that we don't return -0.0.
If 0.0 is the right return value instead,

The behaviour of the compiler matches the semantics of -fassociative-math, so in that sense it's not a bug. I'm not how to interpret the 'right' value in case of a non-compliant optimization. I guess it's more a case of 'not wrong'.

I'd the test should be written as
if (__builtin_copysignf (1.0, foo (0.0 / -5.0, 10)) != 1.0)
   abort ();
to make it clear you are expecting positive 0.


Updated patch accordingly. OK for stage1?

I’ve tried to read through the bug report and all the patches, who did them and why…  The entire thread is messier than I’d like, which makes dealing with this whole thing messy.  The bug report I marked as fixed, as I think it now works as the bug reporter expects.  Seems like a mistake it wasn’t closed a while ago.

I've updated the PR with the status as I understand it, and marked it waiting (for review).

I now see why you went with this patch.  Why wait for stage 1…  Lets just put it  in now and put an end to the misery.

Ok for trunk now.


Committed as attached (using the more minimal -fassociative-math instead of -funsafe-math-optimizations).

Thanks,
- Tom
2015-02-22  Tom de Vries  <tom@codesourcery.com>

	* gcc.dg/pr30957-1.c: Make pr30957-1.c pass rather xfail.
---
 gcc/testsuite/gcc.dg/pr30957-1.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/gcc/testsuite/gcc.dg/pr30957-1.c b/gcc/testsuite/gcc.dg/pr30957-1.c
index 65b98fa..f34c6e5 100644
--- a/gcc/testsuite/gcc.dg/pr30957-1.c
+++ b/gcc/testsuite/gcc.dg/pr30957-1.c
@@ -1,12 +1,9 @@
-/* { dg-do run { xfail *-*-* } } */
-/* We don't (and don't want to) perform this optimisation on soft-float
-   targets, where each addition is a library call.  This test requires
-   -fassociative-math for enabling the variable-expansion as well as
-   -fsigned-zeros for honoring the sign of zero; but
-   they can not co-exist; also under -funsafe-math-optimizations, so we
-   expect it to fail.  */
+/* { dg-do run } */
+/* We don't (and don't want to) perform this optimisation on soft-float targets,
+   where each addition is a library call.  /
 /* { dg-require-effective-target hard_float } */
-/* { dg-options "-O2 -funroll-loops -funsafe-math-optimizations -fvariable-expansion-in-unroller -fdump-rtl-loop2_unroll" } */
+/* -fassociative-math requires -fno-trapping-math and -fno-signed-zeros. */
+/* { dg-options "-O2 -funroll-loops -fassociative-math -fno-trapping-math -fno-signed-zeros -fvariable-expansion-in-unroller -fdump-rtl-loop2_unroll" } */
 
 extern void abort (void);
 extern void exit (int);
@@ -26,12 +23,15 @@ foo (float d, int n)
 int
 main ()
 {
-  if (__builtin_copysignf (1.0, foo (0.0 / -5.0, 10)) != -1.0)
+  /* When compiling standard compliant we expect foo to return -0.0.  But the
+     variable expansion during unrolling optimization (for this testcase enabled
+     by non-compliant -fassociative-math) instantiates copy(s) of the
+     accumulator which it initializes with +0.0.  Hence we expect that foo
+     returns +0.0.  */
+  if (__builtin_copysignf (1.0, foo (0.0 / -5.0, 10)) != 1.0)
     abort ();
   exit (0);
 }
 
 /* { dg-final { scan-rtl-dump "Expanding Accumulator" "loop2_unroll" } } */
 /* { dg-final { cleanup-rtl-dump "loop*" } } */
-
-
-- 
1.9.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]