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