diff options
author | Tom de Vries <tom@codesourcery.com> | 2015-02-25 15:38:38 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2015-02-25 15:38:38 +0000 |
commit | 05deba9fe0802c10d5c7f8aa10844bc0cb82ef88 (patch) | |
tree | b65843ac172fb51e0c26c6fb6e5bbb63e8556e26 /libgomp/testsuite | |
parent | a2273e72f3bbb2ddbeb720e60f3f33d68530f5df (diff) | |
download | gcc-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.c | 223 |
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; } |