Clang Project

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