aboutsummaryrefslogtreecommitdiff
path: root/libgomp/testsuite
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2015-02-25 15:38:38 +0000
committerTom de Vries <vries@gcc.gnu.org>2015-02-25 15:38:38 +0000
commit05deba9fe0802c10d5c7f8aa10844bc0cb82ef88 (patch)
treeb65843ac172fb51e0c26c6fb6e5bbb63e8556e26 /libgomp/testsuite
parenta2273e72f3bbb2ddbeb720e60f3f33d68530f5df (diff)
downloadgcc-05deba9fe0802c10d5c7f8aa10844bc0cb82ef88.zip
gcc-05deba9fe0802c10d5c7f8aa10844bc0cb82ef88.tar.gz
gcc-05deba9fe0802c10d5c7f8aa10844bc0cb82ef88.tar.bz2
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. From-SVN: r220971
Diffstat (limited to 'libgomp/testsuite')
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-1.c223
1 files changed, 76 insertions, 147 deletions
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 acf9540..4501f8e 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;
}