annotate gcc/testsuite/c-c++-common/goacc/reduction-1.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-additional-options "-fdump-tree-gimple" } */
kono
parents:
diff changeset
2 /* Integer reductions. */
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 #define n 1000
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 int
kono
parents:
diff changeset
7 main(void)
kono
parents:
diff changeset
8 {
kono
parents:
diff changeset
9 int i;
kono
parents:
diff changeset
10 int result, array[n];
kono
parents:
diff changeset
11 int lresult;
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 /* '+' reductions. */
kono
parents:
diff changeset
14 #pragma acc parallel
kono
parents:
diff changeset
15 #pragma acc loop gang worker vector reduction (+:result)
kono
parents:
diff changeset
16 for (i = 0; i < n; i++)
kono
parents:
diff changeset
17 result += array[i];
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 /* '*' reductions. */
kono
parents:
diff changeset
20 #pragma acc parallel
kono
parents:
diff changeset
21 #pragma acc loop gang worker vector reduction (*:result)
kono
parents:
diff changeset
22 for (i = 0; i < n; i++)
kono
parents:
diff changeset
23 result *= array[i];
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 /* 'max' reductions. */
kono
parents:
diff changeset
26 #pragma acc parallel
kono
parents:
diff changeset
27 #pragma acc loop gang worker vector reduction (max:result)
kono
parents:
diff changeset
28 for (i = 0; i < n; i++)
kono
parents:
diff changeset
29 result = result > array[i] ? result : array[i];
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 /* 'min' reductions. */
kono
parents:
diff changeset
32 #pragma acc parallel
kono
parents:
diff changeset
33 #pragma acc loop gang worker vector reduction (min:result)
kono
parents:
diff changeset
34 for (i = 0; i < n; i++)
kono
parents:
diff changeset
35 result = result < array[i] ? result : array[i];
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 /* '&' reductions. */
kono
parents:
diff changeset
38 #pragma acc parallel
kono
parents:
diff changeset
39 #pragma acc loop gang worker vector reduction (&:result)
kono
parents:
diff changeset
40 for (i = 0; i < n; i++)
kono
parents:
diff changeset
41 result &= array[i];
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 /* '|' reductions. */
kono
parents:
diff changeset
44 #pragma acc parallel
kono
parents:
diff changeset
45 #pragma acc loop gang worker vector reduction (|:result)
kono
parents:
diff changeset
46 for (i = 0; i < n; i++)
kono
parents:
diff changeset
47 result |= array[i];
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 /* '^' reductions. */
kono
parents:
diff changeset
50 #pragma acc parallel
kono
parents:
diff changeset
51 #pragma acc loop gang worker vector reduction (^:result)
kono
parents:
diff changeset
52 for (i = 0; i < n; i++)
kono
parents:
diff changeset
53 result ^= array[i];
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 /* '&&' reductions. */
kono
parents:
diff changeset
56 #pragma acc parallel
kono
parents:
diff changeset
57 #pragma acc loop gang worker vector reduction (&&:lresult)
kono
parents:
diff changeset
58 for (i = 0; i < n; i++)
kono
parents:
diff changeset
59 lresult = lresult && (result > array[i]);
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 /* '||' reductions. */
kono
parents:
diff changeset
62 #pragma acc parallel
kono
parents:
diff changeset
63 #pragma acc loop gang worker vector reduction (||:lresult)
kono
parents:
diff changeset
64 for (i = 0; i < n; i++)
kono
parents:
diff changeset
65 lresult = lresult || (result > array[i]);
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 return 0;
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 /* Check that default copy maps are generated for loop reductions. */
kono
parents:
diff changeset
71 /* { dg-final { scan-tree-dump-times "map\\(tofrom:result \\\[len: \[0-9\]+\\\]\\)" 7 "gimple" } } */
kono
parents:
diff changeset
72 /* { dg-final { scan-tree-dump-times "map\\(tofrom:lresult \\\[len: \[0-9\]+\\\]\\)" 2 "gimple" } } */