Hi,

I found 3 test-cases in libgomp/testsuite/libgomp.oacc-c-c++-common that do a 32-bit floating point reduction on integer values and verify the result using an equality test, while the result is larger than the largest integer that can be exactly represented in 32-bit fp (16777216). This makes the test-cases sensitive to changes in computation order.

Fixed by modifying the arrays that are being reduced to contain smaller values.

Committed.

Thanks,
- Tom
Fix openacc float reduction testcases

2017-10-04  Tom de Vries  <t...@codesourcery.com>

	* testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
	(main): Reduce sum of arr elements.  Assert that hres is exactly
	representable in 32-bit floating point.
	* testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
	(main): Reduce sum of arr elements.  Assert that hres and hmres are
	exactly representable in 32-bit floating point.
	* testsuite/libgomp.oacc-c-c++-common/reduction-7.c (gwv_np_4): Same.

---
 .../testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c  | 3 ++-
 .../testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c  | 5 ++++-
 libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c            | 5 ++++-
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
index 8d85fed..6369d7f 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
@@ -11,7 +11,7 @@ main (int argc, char *argv[])
   float res = 0, hres = 0;
 
   for (i = 0; i < 32768; i++)
-    arr[i] = i;
+    arr[i] = i % (32768 / 64);
 
   #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
     reduction(+:res) copy(res)
@@ -36,6 +36,7 @@ main (int argc, char *argv[])
 	hres += arr[j * 1024 + (1023 - i)];
       }
 
+  assert (hres <= 16777216);
   assert (res == hres);
 
   return 0;
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
index 1904b4a..140c322 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
@@ -11,7 +11,7 @@ main (int argc, char *argv[])
   float res = 0, mres = 0, hres = 0, hmres = 0;
 
   for (i = 0; i < 32768; i++)
-    arr[i] = i;
+    arr[i] = i % (32768 / 64);
 
   #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
     reduction(+:res) reduction(max:mres) copy(res, mres)
@@ -48,7 +48,10 @@ main (int argc, char *argv[])
 	  hmres = arr[j * 1024 + (1023 - i)];
       }
 
+  assert (hres <= 16777216);
   assert (res == hres);
+
+  assert (hmres <= 16777216);
   assert (mres == hmres);
 
   return 0;
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
index cc3cd07..c4940b8 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
@@ -183,7 +183,7 @@ void gwv_np_4()
   float res = 0, mres = 0, hres = 0, hmres = 0;
 
   for (i = 0; i < 32768; i++)
-    arr[i] = i;
+    arr[i] = i % (32768 / 64);
 
   #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
   {
@@ -219,7 +219,10 @@ void gwv_np_4()
 	  hmres = arr[j * 1024 + (1023 - i)];
       }
 
+  assert (hres <= 16777216);
   assert (res == hres);
+
+  assert (hmres <= 16777216);
   assert (mres == hmres);
 }
 

Reply via email to