Clang Project

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