Clang Project

clang_source_code/test/OpenMP/teams_distribute_parallel_for_simd_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
15struct S {
16  S(): a(0) {}
17  S(int v) : a(v) {}
18  int a;
19  typedef int type;
20};
21
22template <typename T>
23class S7 : public T {
24protected:
25  T a;
26  S7() : a(0) {}
27
28public:
29  S7(typename T::type v) : a(v) {
30#pragma omp target
31#pragma omp teams distribute parallel for simd private(a) private(this->a) private(T::a)
32    for (int k = 0; k < a.a; ++k)
33      ++this->a.a;
34  }
35  S7 &operator=(S7 &s) {
36    int k;
37#pragma omp target
38#pragma omp teams distribute parallel for simd private(a) private(this->a) linear(k)
39    for (k = 0; k < s.a.a; ++k)
40      ++s.a.a;
41
42    foo();
43    bar();
44    return *this;
45  }
46  void foo() {
47    int b, argv, d, c, e, f;
48#pragma omp target
49#pragma omp teams distribute parallel for simd default(none), private(b) firstprivate(argv) shared(d) reduction(+:c) reduction(max:e) num_teams(f) thread_limit(d)
50    for (int k = 0; k < a.a; ++k)
51      ++a.a;
52  }
53  void bar() {
54    int arr[10];
55    const int alen = 16;
56    const int slen1 = 8;
57    const int slen2 = 8;
58#pragma omp target
59#pragma omp teams distribute parallel for simd simdlen(slen1) safelen(slen2) aligned(arr:alen)
60    for (int k = 0; k < a.a; ++k)
61      ++a.a;
62  }
63};
64// CHECK: #pragma omp target
65// CHECK-NEXT: #pragma omp teams distribute parallel for simd private(this->a) private(this->a) private(T::a)
66// CHECK: #pragma omp target
67// CHECK-NEXT: #pragma omp teams distribute parallel for simd private(this->a) private(this->a) linear(k)
68// CHECK: #pragma omp target
69// CHECK-NEXT: #pragma omp teams distribute parallel for simd default(none) private(b) firstprivate(argv) shared(d) reduction(+: c) reduction(max: e) num_teams(f) thread_limit(d)
70// CHECK: #pragma omp target
71// CHECK-NEXT: #pragma omp teams distribute parallel for simd simdlen(slen1) safelen(slen2) aligned(arr: alen)
72
73class S8 : public S7<S> {
74  S8() {}
75
76public:
77  S8(int v) : S7<S>(v){
78#pragma omp target
79#pragma omp teams distribute parallel for simd private(a) private(this->a) private(S7<S>::a) 
80    for (int k = 0; k < a.a; ++k)
81      ++this->a.a;
82  }
83  S8 &operator=(S8 &s) {
84#pragma omp target
85#pragma omp teams distribute parallel for simd private(a) private(this->a)
86    for (int k = 0; k < s.a.a; ++k)
87      ++s.a.a;
88
89    foo();
90    bar();
91    return *this;
92  }
93  void bar() {
94    int b, argv, d, c, e, f8;
95#pragma omp target
96#pragma omp teams distribute parallel for simd default(none), private(b) firstprivate(argv) shared(d) reduction(+:c) reduction(max:e) num_teams(f8) thread_limit(d)
97    for (int k = 0; k < a.a; ++k)
98      ++a.a;
99  }
100  void foo() {
101    const int alen = 16;
102    const int slen1 = 8;
103    const int slen2 = 8;
104    int arr[10];
105#pragma omp target
106#pragma omp teams distribute parallel for simd simdlen(slen1) safelen(slen2) aligned(arr:alen)
107    for (int k = 0; k < a.a; ++k)
108      ++a.a;
109  }
110};
111// CHECK: #pragma omp target
112// CHECK-NEXT: #pragma omp teams distribute parallel for simd private(this->a) private(this->a) private(this->S::a)
113// CHECK: #pragma omp target
114// CHECK-NEXT: #pragma omp teams distribute parallel for simd private(this->a) private(this->a) private(this->S7<S>::a)
115// CHECK: #pragma omp target
116// CHECK-NEXT: #pragma omp teams distribute parallel for simd private(this->a) private(this->a)
117// CHECK: #pragma omp target
118// CHECK-NEXT: #pragma omp teams distribute parallel for simd default(none) private(b) firstprivate(argv) shared(d) reduction(+: c) reduction(max: e) num_teams(f8) thread_limit(d)
119// CHECK: #pragma omp target
120// CHECK-NEXT: #pragma omp teams distribute parallel for simd simdlen(slen1) safelen(slen2) aligned(arr: alen)
121
122template <class T, int N>
123T tmain(T argc) {
124  T b = argc, c, d, e, f, g;
125  static T a;
126// CHECK: static T a;
127  const T clen = 5;
128  const T alen = 16;
129  int arr[10];
130#pragma omp target
131#pragma omp teams distribute parallel for simd
132  for (int i=0; i < 2; ++i)
133    a = 2;
134// CHECK: #pragma omp target
135// CHECK-NEXT: #pragma omp teams distribute parallel for simd{{$}}
136// CHECK-NEXT: for (int i = 0; i < 2; ++i)
137// CHECK-NEXT: a = 2;
138#pragma omp target
139#pragma omp teams distribute parallel for simd allocate(b) private(argc, b), firstprivate(c, d), collapse(2) allocate(d)
140  for (int i = 0; i < 10; ++i)
141    for (int j = 0; j < 10; ++j)
142      foo();
143// CHECK: #pragma omp target
144// CHECK-NEXT: #pragma omp teams distribute parallel for simd allocate(b) private(argc,b) firstprivate(c,d) collapse(2) allocate(d)
145// CHECK-NEXT: for (int i = 0; i < 10; ++i)
146// CHECK-NEXT: for (int j = 0; j < 10; ++j)
147// CHECK-NEXT: foo();
148  for (int i = 0; i < 10; ++i)
149    foo();
150// CHECK: for (int i = 0; i < 10; ++i)
151// CHECK-NEXT: foo();
152#pragma omp target
153#pragma omp teams distribute parallel for simd
154  for (int i = 0; i < 10; ++i)
155    foo();
156// CHECK: #pragma omp target
157// CHECK-NEXT: #pragma omp teams distribute parallel for simd
158// CHECK-NEXT: for (int i = 0; i < 10; ++i)
159// CHECK-NEXT: foo();  
160#pragma omp target
161#pragma omp teams distribute parallel for simd default(none), private(b) firstprivate(argc) shared(d) reduction(+:c) reduction(max:e) num_teams(f) thread_limit(d)
162    for (int k = 0; k < 10; ++k)
163      e += d + argc;
164// CHECK: #pragma omp target
165// CHECK-NEXT: #pragma omp teams distribute parallel for simd default(none) private(b) firstprivate(argc) shared(d) reduction(+: c) reduction(max: e) num_teams(f) thread_limit(d)
166// CHECK-NEXT: for (int k = 0; k < 10; ++k)
167// CHECK-NEXT: e += d + argc;
168#pragma omp target
169#pragma omp teams distribute parallel for simd simdlen(clen-1)
170  for (int k = 0; k < 10; ++k)
171    e += d + argc;
172// CHECK: #pragma omp target
173// CHECK-NEXT: #pragma omp teams distribute parallel for simd simdlen(clen - 1)
174// CHECK-NEXT: for (int k = 0; k < 10; ++k)
175// CHECK-NEXT: e += d + argc;
176#pragma omp target
177#pragma omp teams distribute parallel for simd safelen(clen-1) aligned(arr:alen)
178  for (int k = 0; k < 10; ++k)
179    e += d + argc + arr[k];
180// CHECK: #pragma omp target
181// CHECK-NEXT: #pragma omp teams distribute parallel for simd safelen(clen - 1) aligned(arr: alen)
182// CHECK-NEXT: for (int k = 0; k < 10; ++k)
183// CHECK-NEXT: e += d + argc + arr[k];
184  return T();
185}
186
187int main (int argc, char **argv) {
188  int b = argc, c, d, e, f, g;
189  static int a;
190// CHECK: static int a;
191  const int clen = 5;
192  const int N = 10;
193  int arr[10];
194#pragma omp target
195#pragma omp teams distribute parallel for simd
196  for (int i=0; i < 2; ++i)
197    a = 2;
198// CHECK: #pragma omp target
199// CHECK-NEXT: #pragma omp teams distribute parallel for simd
200// CHECK-NEXT: for (int i = 0; i < 2; ++i)
201// CHECK-NEXT: a = 2;
202#pragma omp target
203#pragma omp teams distribute parallel for simd private(argc,b),firstprivate(argv, c), collapse(2)
204  for (int i = 0; i < 10; ++i)
205    for (int j = 0; j < 10; ++j)
206      foo();
207// CHECK: #pragma omp target
208// CHECK-NEXT: #pragma omp teams distribute parallel for simd private(argc,b) firstprivate(argv,c) collapse(2)
209// CHECK-NEXT: for (int i = 0; i < 10; ++i)
210// CHECK-NEXT: for (int j = 0; j < 10; ++j)
211// CHECK-NEXT: foo();
212  for (int i = 0; i < 10; ++i)
213    foo();
214// CHECK: for (int i = 0; i < 10; ++i)
215// CHECK-NEXT: foo();
216#pragma omp target
217#pragma omp teams distribute parallel for simd
218  for (int i = 0; i < 10; ++i)foo();
219// CHECK: #pragma omp target
220// CHECK-NEXT: #pragma omp teams distribute parallel for simd
221// CHECK-NEXT: for (int i = 0; i < 10; ++i)
222// CHECK-NEXT: foo();
223#pragma omp target
224#pragma omp teams distribute parallel for simd default(none), private(b) firstprivate(argc) shared(d) reduction(+:c) reduction(max:e) num_teams(f) thread_limit(d)
225  for (int k = 0; k < 10; ++k)
226    e += d + argc;
227// CHECK: #pragma omp target
228// CHECK-NEXT: #pragma omp teams distribute parallel for simd default(none) private(b) firstprivate(argc) shared(d) reduction(+: c) reduction(max: e) num_teams(f) thread_limit(d)
229// CHECK-NEXT: for (int k = 0; k < 10; ++k)
230// CHECK-NEXT: e += d + argc;
231#pragma omp target
232#pragma omp teams distribute parallel for simd simdlen(clen-1)
233  for (int k = 0; k < 10; ++k)
234    e += d + argc;
235// CHECK: #pragma omp target
236// CHECK-NEXT: #pragma omp teams distribute parallel for simd simdlen(clen - 1)
237// CHECK-NEXT: for (int k = 0; k < 10; ++k)
238// CHECK-NEXT: e += d + argc;
239#pragma omp target
240#pragma omp teams distribute parallel for simd safelen(clen-1) aligned(arr:N+6)
241  for (int k = 0; k < 10; ++k)
242    e += d + argc + arr[k];
243// CHECK: #pragma omp target
244// CHECK-NEXT: #pragma omp teams distribute parallel for simd safelen(clen - 1) aligned(arr: N + 6)
245// CHECK-NEXT: for (int k = 0; k < 10; ++k)
246// CHECK-NEXT: e += d + argc + arr[k];
247  return (0);
248}
249
250#endif
251