Clang Project

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