1 /* { dg-do compile } */
2 /* { dg-require-effective-target offload_hsa } */
3 /* { dg-options "-fopenmp -fdump-tree-omplower-details" } */
4
5 void
foo1(int n,int * a,int workgroup_size)6 foo1 (int n, int *a, int workgroup_size)
7 {
8 int i;
9 #pragma omp target
10 #pragma omp teams thread_limit(workgroup_size)
11 #pragma omp distribute parallel for shared(a) firstprivate(n) private(i)
12 for (i = 0; i < n; i++)
13 a[i]++;
14 }
15
16 void
foo2(int j,int n,int * a)17 foo2 (int j, int n, int *a)
18 {
19 int i;
20 #pragma omp target teams
21 #pragma omp distribute parallel for shared(a) firstprivate(n) private(i) firstprivate(j)
22 for (i = j + 1; i < n; i++)
23 a[i] = i;
24 }
25
26 void
foo3(int j,int n,int * a)27 foo3 (int j, int n, int *a)
28 {
29 int i;
30 #pragma omp target teams
31 #pragma omp distribute parallel for shared(a) firstprivate(n) private(i) firstprivate(j)
32 for (i = j + 1; i < n; i += 3)
33 a[i] = i;
34 }
35
36 void
foo4(int j,int n,int * a)37 foo4 (int j, int n, int *a)
38 {
39 #pragma omp parallel
40 {
41 #pragma omp single
42 {
43 int i;
44 #pragma omp target
45 #pragma omp teams
46 #pragma omp distribute parallel for shared(a) firstprivate(n) private(i) firstprivate(j)
47 for (i = j + 1; i < n; i += 3)
48 a[i] = i;
49 }
50 }
51 }
52
53
54 /* { dg-final { scan-tree-dump-times "Target construct will be turned into a gridified HSA kernel" 4 "omplower" } } */
55