summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvries <vries@138bc75d-0d04-0410-961f-82ee72b054a4>2015-02-25 15:38:38 +0000
committervries <vries@138bc75d-0d04-0410-961f-82ee72b054a4>2015-02-25 15:38:38 +0000
commitc1f81c8b9e6129692ce8e388e5ef5999ba6bf0dd (patch)
treeb65843ac172fb51e0c26c6fb6e5bbb63e8556e26
parentc2098d0004ec5dba160d0c5f92ee91cd59f30337 (diff)
downloadgcc-c1f81c8b9e6129692ce8e388e5ef5999ba6bf0dd.tar.gz
Use DO_PRAGMA in libgomp.oacc-c-c++-common/reduction-1.c
2015-02-25 Tom de Vries <tom@codesourcery.com> * testsuite/libgomp.oacc-c-c++-common/reduction-1.c (DO_PRAGMA) (check_reduction_op, check_reduction_macro, max, min): Declare. (test_reductions_int, test_reductions_minmax, test_reductions_bool): New function. (main): Use new functions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@220971 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--libgomp/ChangeLog9
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c223
2 files changed, 85 insertions, 147 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 96f3ca3ad87..233342817bd 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,12 @@
+2015-02-25 Tom de Vries <tom@codesourcery.com>
+
+ * testsuite/libgomp.oacc-c-c++-common/reduction-1.c (DO_PRAGMA)
+ (check_reduction_op, check_reduction_macro, max, min):
+ Declare.
+ (test_reductions_int, test_reductions_minmax, test_reductions_bool): New
+ function.
+ (main): Use new functions.
+
2015-02-18 Ilya Tocar <ilya.tocar@intel.com>
* target.c (gomp_load_plugin_for_device): Use const char * instead of
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c
index acf95402ba1..4501f8e9f37 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c
@@ -7,168 +7,97 @@
#define vl 32
-int
-main(void)
+#define DO_PRAGMA(x) _Pragma (#x)
+
+#define check_reduction_op(type, op, init, b) \
+ { \
+ type res, vres; \
+ res = (init); \
+DO_PRAGMA (acc parallel vector_length (vl))\
+DO_PRAGMA (acc loop reduction (op:res))\
+ for (i = 0; i < n; i++) \
+ res = res op (b); \
+ \
+ vres = (init); \
+ for (i = 0; i < n; i++) \
+ vres = vres op (b); \
+ \
+ if (res != vres) \
+ abort (); \
+ }
+
+static void
+test_reductions_int (void)
{
const int n = 1000;
int i;
- int vresult, result, array[n];
- bool lvresult, lresult;
+ int array[n];
for (i = 0; i < n; i++)
array[i] = i;
- result = 0;
- vresult = 0;
-
- /* '+' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (+:result)
- for (i = 0; i < n; i++)
- result += array[i];
-
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- vresult += array[i];
-
- if (result != vresult)
- abort ();
-
- result = 0;
- vresult = 0;
-
- /* '*' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (*:result)
- for (i = 0; i < n; i++)
- result *= array[i];
-
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- vresult *= array[i];
-
- if (result != vresult)
- abort ();
-
-// result = 0;
-// vresult = 0;
-//
-// /* 'max' reductions. */
-// #pragma acc parallel vector_length (vl)
-// #pragma acc loop reduction (+:result)
-// for (i = 0; i < n; i++)
-// result = result > array[i] ? result : array[i];
-//
-// /* Verify the reduction. */
-// for (i = 0; i < n; i++)
-// vresult = vresult > array[i] ? vresult : array[i];
-//
-// printf("%d != %d\n", result, vresult);
-// if (result != vresult)
-// abort ();
-//
-// result = 0;
-// vresult = 0;
-//
-// /* 'min' reductions. */
-// #pragma acc parallel vector_length (vl)
-// #pragma acc loop reduction (+:result)
-// for (i = 0; i < n; i++)
-// result = result < array[i] ? result : array[i];
-//
-// /* Verify the reduction. */
-// for (i = 0; i < n; i++)
-// vresult = vresult < array[i] ? vresult : array[i];
-//
-// printf("%d != %d\n", result, vresult);
-// if (result != vresult)
-// abort ();
-
- result = 0;
- vresult = 0;
-
- /* '&' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (&:result)
- for (i = 0; i < n; i++)
- result &= array[i];
-
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- vresult &= array[i];
-
- if (result != vresult)
- abort ();
-
- result = 0;
- vresult = 0;
-
- /* '|' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (|:result)
- for (i = 0; i < n; i++)
- result |= array[i];
-
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- vresult |= array[i];
-
- if (result != vresult)
- abort ();
-
- result = 0;
- vresult = 0;
-
- /* '^' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (^:result)
- for (i = 0; i < n; i++)
- result ^= array[i];
-
- /* Verify the reduction. */
- for (i = 0; i < n; i++)
- vresult ^= array[i];
-
- if (result != vresult)
- abort ();
-
- result = 5;
- vresult = 5;
-
- lresult = false;
- lvresult = false;
+ check_reduction_op (int, +, 0, array[i]);
+ check_reduction_op (int, *, 1, array[i]);
+ check_reduction_op (int, &, -1, array[i]);
+ check_reduction_op (int, |, 0, array[i]);
+ check_reduction_op (int, ^, 0, array[i]);
+}
- /* '&&' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (&&:lresult)
- for (i = 0; i < n; i++)
- lresult = lresult && (result > array[i]);
+static void
+test_reductions_bool (void)
+{
+ const int n = 1000;
+ int i;
+ int array[n];
+ int cmp_val;
- /* Verify the reduction. */
for (i = 0; i < n; i++)
- lvresult = lresult && (result > array[i]);
-
- if (lresult != lvresult)
- abort ();
-
- result = 5;
- vresult = 5;
+ array[i] = i;
- lresult = false;
- lvresult = false;
+ cmp_val = 5;
+ check_reduction_op (bool, &&, true, (cmp_val > array[i]));
+ check_reduction_op (bool, ||, false, (cmp_val > array[i]));
+}
- /* '||' reductions. */
-#pragma acc parallel vector_length (vl)
-#pragma acc loop reduction (||:lresult)
- for (i = 0; i < n; i++)
- lresult = lresult || (result > array[i]);
+#define check_reduction_macro(type, op, init, b) \
+ { \
+ type res, vres; \
+ res = (init); \
+DO_PRAGMA (acc parallel vector_length (vl))\
+DO_PRAGMA (acc loop reduction (op:res))\
+ for (i = 0; i < n; i++) \
+ res = op (res, (b)); \
+ \
+ vres = (init); \
+ for (i = 0; i < n; i++) \
+ vres = op (vres, (b)); \
+ \
+ if (res != vres) \
+ abort (); \
+ }
+
+#define max(a, b) (((a) > (b)) ? (a) : (b))
+#define min(a, b) (((a) < (b)) ? (a) : (b))
+
+static void
+test_reductions_minmax (void)
+{
+ const int n = 1000;
+ int i;
+ int array[n];
- /* Verify the reduction. */
for (i = 0; i < n; i++)
- lvresult = lresult || (result > array[i]);
+ array[i] = i;
- if (lresult != lvresult)
- abort ();
+ check_reduction_macro (int, min, n + 1, array[i]);
+ check_reduction_macro (int, max, -1, array[i]);
+}
+int
+main (void)
+{
+ test_reductions_int ();
+ test_reductions_bool ();
+ test_reductions_minmax ();
return 0;
}