Clang Project

clang_source_code/test/OpenMP/teams_distribute_parallel_for_ast_print.cpp
1// RUN: %clang_cc1 -verify -fopenmp -ast-print %s -Wno-openmp-target | FileCheck %s
2// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s
3// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print -Wno-openmp-target | FileCheck %s
4
5// RUN: %clang_cc1 -verify -fopenmp-simd -ast-print %s -Wno-openmp-target | FileCheck %s
6// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -emit-pch -o %t %s
7// RUN: %clang_cc1 -fopenmp-simd -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print -Wno-openmp-target | FileCheck %s
8// expected-no-diagnostics
9
10#ifndef HEADER
11#define HEADER
12
13void foo() {}
14
15int x;
16#pragma omp threadprivate(x)
17
18struct S {
19  S(): a(0) {}
20  S(int v) : a(v) {}
21  int a;
22  typedef int type;
23};
24
25template <typename T>
26class S7 : public T {
27protected:
28  T a;
29  S7() : a(0) {}
30
31public:
32  S7(typename T::type v) : a(v) {
33#pragma omp target
34#pragma omp teams distribute parallel for private(a) private(this->a) private(T::a)
35    for (int k = 0; k < a.a; ++k)
36      ++this->a.a;
37  }
38  S7 &operator=(S7 &s) {
39#pragma omp target
40#pragma omp teams distribute parallel for private(a) private(this->a)
41    for (int k = 0; k < s.a.a; ++k)
42      ++s.a.a;
43
44    foo();
45    return *this;
46  }
47  void foo() {
48    int b, argv, d, c, e, f;
49#pragma omp target
50#pragma omp teams distribute parallel for default(none), private(b) firstprivate(argv) shared(d) reduction(+:c) reduction(max:e) num_teams(f) thread_limit(d) copyin(x)
51    for (int k = 0; k < a.a; ++k)
52      ++a.a;
53  }
54};
55// CHECK: #pragma omp target
56// CHECK-NEXT: #pragma omp teams distribute parallel for private(this->a) private(this->a) private(T::a)
57// CHECK: #pragma omp target
58// CHECK-NEXT: #pragma omp teams distribute parallel for private(this->a) private(this->a)
59// CHECK: #pragma omp target
60// CHECK-NEXT: #pragma omp teams distribute parallel for default(none) private(b) firstprivate(argv) shared(d) reduction(+: c) reduction(max: e) num_teams(f) thread_limit(d) copyin(x)
61
62class S8 : public S7<S> {
63  S8() {}
64
65public:
66  S8(int v) : S7<S>(v){
67#pragma omp target
68#pragma omp teams distribute parallel for private(a) private(this->a) private(S7<S>::a) 
69    for (int k = 0; k < a.a; ++k)
70      ++this->a.a;
71  }
72  S8 &operator=(S8 &s) {
73#pragma omp target
74#pragma omp teams distribute parallel for private(a) private(this->a)
75    for (int k = 0; k < s.a.a; ++k)
76      ++s.a.a;
77
78    bar();
79    return *this;
80  }
81  void bar() {
82    int b, argv, d, c, e, f8;
83#pragma omp target
84#pragma omp teams distribute parallel for allocate(b) default(none), private(b) firstprivate(argv) shared(d) reduction(+:c) reduction(max:e) num_teams(f8) thread_limit(d) copyin(x) allocate(argv)
85    for (int k = 0; k < a.a; ++k)
86      ++a.a;
87  }
88};
89// CHECK: #pragma omp target
90// CHECK-NEXT: #pragma omp teams distribute parallel for private(this->a) private(this->a) private(this->S::a)
91// CHECK: #pragma omp target
92// CHECK-NEXT: #pragma omp teams distribute parallel for private(this->a) private(this->a) private(this->S7<S>::a)
93// CHECK: #pragma omp target
94// CHECK-NEXT: #pragma omp teams distribute parallel for private(this->a) private(this->a)
95// CHECK: #pragma omp target
96// CHECK-NEXT: #pragma omp teams distribute parallel for allocate(b) default(none) private(b) firstprivate(argv) shared(d) reduction(+: c) reduction(max: e) num_teams(f8) thread_limit(d) copyin(x) allocate(argv)
97
98template <class T, int N>
99T tmain(T argc) {
100  T b = argc, c, d, e, f, g;
101  static T a;
102// CHECK: static T a;
103  const T clen = 5;
104  const T alen = 16;
105  int arr[10];
106#pragma omp target
107#pragma omp teams distribute parallel for
108  for (int i=0; i < 2; ++i)
109    a = 2;
110// CHECK: #pragma omp target
111// CHECK-NEXT: #pragma omp teams distribute parallel for{{$}}
112// CHECK-NEXT: for (int i = 0; i < 2; ++i)
113// CHECK-NEXT: a = 2;
114#pragma omp target
115#pragma omp teams distribute parallel for private(argc, b), firstprivate(c, d), collapse(2)
116  for (int i = 0; i < 10; ++i)
117    for (int j = 0; j < 10; ++j)
118      foo();
119// CHECK: #pragma omp target
120// CHECK-NEXT: #pragma omp teams distribute parallel for private(argc,b) firstprivate(c,d) collapse(2)
121// CHECK-NEXT: for (int i = 0; i < 10; ++i)
122// CHECK-NEXT: for (int j = 0; j < 10; ++j)
123// CHECK-NEXT: foo();
124  for (int i = 0; i < 10; ++i)
125    foo();
126// CHECK: for (int i = 0; i < 10; ++i)
127// CHECK-NEXT: foo();
128#pragma omp target
129#pragma omp teams distribute parallel for
130  for (int i = 0; i < 10; ++i)
131    foo();
132// CHECK: #pragma omp target
133// CHECK-NEXT: #pragma omp teams distribute parallel for
134// CHECK-NEXT: for (int i = 0; i < 10; ++i)
135// CHECK-NEXT: foo();  
136#pragma omp target
137#pragma omp teams distribute parallel for default(none), private(b) firstprivate(argc) shared(d) reduction(+:c) reduction(max:e) num_teams(f) thread_limit(d) copyin(x)
138    for (int k = 0; k < 10; ++k)
139      e += d + argc;
140// CHECK: #pragma omp target
141// CHECK-NEXT: #pragma omp teams distribute parallel for default(none) private(b) firstprivate(argc) shared(d) reduction(+: c) reduction(max: e) num_teams(f) thread_limit(d) copyin(x)
142// CHECK-NEXT: for (int k = 0; k < 10; ++k)
143// CHECK-NEXT: e += d + argc;
144#pragma omp target
145#pragma omp teams distribute parallel for
146  for (int k = 0; k < 10; ++k)
147    e += d + argc;
148// CHECK: #pragma omp target
149// CHECK-NEXT: #pragma omp teams distribute parallel for
150// CHECK-NEXT: for (int k = 0; k < 10; ++k)
151// CHECK-NEXT: e += d + argc;
152  return T();
153}
154
155int main (int argc, char **argv) {
156  int b = argc, c, d, e, f, g;
157  static int a;
158// CHECK: static int a;
159  const int clen = 5;
160  const int N = 10;
161  int arr[10];
162#pragma omp target
163#pragma omp teams distribute parallel for
164  for (int i=0; i < 2; ++i)
165    a = 2;
166// CHECK: #pragma omp target
167// CHECK-NEXT: #pragma omp teams distribute parallel for
168// CHECK-NEXT: for (int i = 0; i < 2; ++i)
169// CHECK-NEXT: a = 2;
170#pragma omp target
171#pragma omp teams distribute parallel for private(argc,b),firstprivate(argv, c), collapse(2)
172  for (int i = 0; i < 10; ++i)
173    for (int j = 0; j < 10; ++j)
174      foo();
175// CHECK: #pragma omp target
176// CHECK-NEXT: #pragma omp teams distribute parallel for private(argc,b) firstprivate(argv,c) collapse(2)
177// CHECK-NEXT: for (int i = 0; i < 10; ++i)
178// CHECK-NEXT: for (int j = 0; j < 10; ++j)
179// CHECK-NEXT: foo();
180  for (int i = 0; i < 10; ++i)
181    foo();
182// CHECK: for (int i = 0; i < 10; ++i)
183// CHECK-NEXT: foo();
184#pragma omp target
185#pragma omp teams distribute parallel for
186  for (int i = 0; i < 10; ++i)foo();
187// CHECK: #pragma omp target
188// CHECK-NEXT: #pragma omp teams distribute parallel for
189// CHECK-NEXT: for (int i = 0; i < 10; ++i)
190// CHECK-NEXT: foo();
191#pragma omp target
192#pragma omp teams distribute parallel for default(none), private(b) firstprivate(argc) shared(d) reduction(+:c) reduction(max:e) num_teams(f) thread_limit(d) copyin(x)
193  for (int k = 0; k < 10; ++k)
194    e += d + argc;
195// CHECK: #pragma omp target
196// CHECK-NEXT: #pragma omp teams distribute parallel for default(none) private(b) firstprivate(argc) shared(d) reduction(+: c) reduction(max: e) num_teams(f) thread_limit(d) copyin(x)
197// CHECK-NEXT: for (int k = 0; k < 10; ++k)
198// CHECK-NEXT: e += d + argc;
199#pragma omp target
200#pragma omp teams distribute parallel for
201  for (int k = 0; k < 10; ++k)
202    e += d + argc;
203// CHECK: #pragma omp target
204// CHECK-NEXT: #pragma omp teams distribute parallel for
205// CHECK-NEXT: for (int k = 0; k < 10; ++k)
206// CHECK-NEXT: e += d + argc;
207  return (0);
208}
209
210#endif
211