[Bug testsuite/59556] New: Floating-point __sec_reduce_add tests not robust in face of contraction

bhaveet.shah at arm dot com gcc-bugzilla@gcc.gnu.org
Thu Dec 19 10:15:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59556

            Bug ID: 59556
           Summary: Floating-point __sec_reduce_add tests not robust in
                    face of contraction
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: testsuite
          Assignee: unassigned at gcc dot gnu.org
          Reporter: bhaveet.shah at arm dot com

If fused-mac is available on the target, the following
__sec_reduce_add (taken from
gcc/testsuite/c-c++-common/cilk-plus/AN/builtin_func_double.c) on a 
floating-point type could be implemented using a fused-mac:

  x = __sec_reduce_add (array3[:] * array4[:]); 

The test cases also contain the following loop:

  add_value = 0.0000;
  mul_value = 1.0000;
  for (ii = 0; ii < 10; ii++)
    {
      add_value += (array3[ii] * array4[ii]);
      mul_value *= (array3[ii] * array4[ii]);
    }

In this case, a compiler could reasonably do the multiply and addition
separately so that the multiply result could be used for both
add_value and mul_value. If the semantics of the fused-mac
and the separate instructions are not equivalent, the result from this
loop could be different compared to the __sec_reduce_add case.

The test compares the results of these two using a bitwise comparison,
hence this test will fail. This test case should be made more robust to
handle this case.



More information about the Gcc-bugs mailing list