Clang Project

clang_source_code/test/OpenMP/target_exit_data_ast_print.cpp
1// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -ast-print %s | FileCheck %s
2// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s
3// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
4
5// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -ast-print %s | FileCheck %s
6// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s
7// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
8// expected-no-diagnostics
9
10#ifndef HEADER
11#define HEADER
12
13template <typename T, int C>
14T tmain(T argc, T *argv) {
15  T i, j, b, c, d, e, x[20];
16
17  i = argc;
18#pragma omp target exit data map(from: i)
19
20#pragma omp target exit data map(from: i) if (target exit data: j > 0)
21
22#pragma omp target exit data map(from: i) if (b)
23
24#pragma omp target exit data map(from: c)
25
26#pragma omp target exit data map(from: c) if(b>e)
27
28#pragma omp target exit data map(release: x[0:10], c)
29
30#pragma omp target exit data map(delete: x[0:10])
31
32#pragma omp target exit data map(always, delete: x[0:10])
33
34#pragma omp target exit data map(from: c) map(release: d)
35
36#pragma omp target exit data map(always,release: e)
37
38#pragma omp target exit data nowait map(from: i)
39
40#pragma omp target exit data nowait map(from: i) if (target exit data: j > 0)
41
42#pragma omp target exit data map(from: i) if (b) nowait
43
44#pragma omp target exit data map(from: c) nowait
45
46#pragma omp target exit data map(from: c) nowait if(b>e)
47
48#pragma omp target exit data nowait map(release: x[0:10], c)
49
50#pragma omp target exit data nowait map(from: c) map(release: d)
51
52#pragma omp target exit data nowait map(always,release: e)
53
54#pragma omp target exit data depend(in : argc, argv[i:argc], x[:]) nowait map(from: i)
55
56#pragma omp target exit data nowait depend(in : argc, argv[i:argc], x[:]) map(from: i) if (target exit data: j > 0)
57
58#pragma omp target exit data map(from: i) depend(in : argc, argv[i:argc], x[:]) if (b) nowait
59
60#pragma omp target exit data map(from: c) depend(in : argc, argv[i:argc], x[:]) nowait
61
62#pragma omp target exit data map(from: c) depend(in : argc, argv[i:argc], x[:]) nowait if(b>e)
63
64#pragma omp target exit data nowait map(release: x[0:10], c) depend(in : argc, argv[i:argc], x[:])
65
66#pragma omp target exit data nowait map(from: c) depend(in : argc, argv[i:argc], x[:]) map(release: d)
67
68#pragma omp target exit data depend(in : argc, argv[i:argc], x[:]) nowait map(always,release: e)
69
70  return 0;
71}
72
73// CHECK: template <typename T, int C> T tmain(T argc, T *argv) {
74// CHECK-NEXT: T i, j, b, c, d, e, x[20];
75// CHECK-NEXT: i = argc;
76// CHECK-NEXT: #pragma omp target exit data map(from: i){{$}}
77// CHECK-NEXT: #pragma omp target exit data map(from: i) if(target exit data: j > 0)
78// CHECK-NEXT: #pragma omp target exit data map(from: i) if(b)
79// CHECK-NEXT: #pragma omp target exit data map(from: c)
80// CHECK-NEXT: #pragma omp target exit data map(from: c) if(b > e)
81// CHECK-NEXT: #pragma omp target exit data map(release: x[0:10],c)
82// CHECK-NEXT: #pragma omp target exit data map(delete: x[0:10])
83// CHECK-NEXT: #pragma omp target exit data map(always,delete: x[0:10])
84// CHECK-NEXT: #pragma omp target exit data map(from: c) map(release: d)
85// CHECK-NEXT: #pragma omp target exit data map(always,release: e)
86// CHECK-NEXT: #pragma omp target exit data nowait map(from: i)
87// CHECK-NEXT: #pragma omp target exit data nowait map(from: i) if(target exit data: j > 0)
88// CHECK-NEXT: #pragma omp target exit data map(from: i) if(b) nowait
89// CHECK-NEXT: #pragma omp target exit data map(from: c) nowait
90// CHECK-NEXT: #pragma omp target exit data map(from: c) nowait if(b > e)
91// CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c)
92// CHECK-NEXT: #pragma omp target exit data nowait map(from: c) map(release: d)
93// CHECK-NEXT: #pragma omp target exit data nowait map(always,release: e)
94// CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(from: i)
95// CHECK-NEXT: #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(from: i) if(target exit data: j > 0)
96// CHECK-NEXT: #pragma omp target exit data map(from: i) depend(in : argc,argv[i:argc],x[:]) if(b) nowait
97// CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait
98// CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait if(b > e)
99// CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c) depend(in : argc,argv[i:argc],x[:])
100// CHECK-NEXT: #pragma omp target exit data nowait map(from: c) depend(in : argc,argv[i:argc],x[:]) map(release: d)
101// CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(always,release: e)
102// CHECK: template<> int tmain<int, 5>(int argc, int *argv) {
103// CHECK-NEXT: int i, j, b, c, d, e, x[20];
104// CHECK-NEXT: i = argc;
105// CHECK-NEXT: #pragma omp target exit data map(from: i)
106// CHECK-NEXT: #pragma omp target exit data map(from: i) if(target exit data: j > 0)
107// CHECK-NEXT: #pragma omp target exit data map(from: i) if(b)
108// CHECK-NEXT: #pragma omp target exit data map(from: c)
109// CHECK-NEXT: #pragma omp target exit data map(from: c) if(b > e)
110// CHECK-NEXT: #pragma omp target exit data map(release: x[0:10],c)
111// CHECK-NEXT: #pragma omp target exit data map(delete: x[0:10])
112// CHECK-NEXT: #pragma omp target exit data map(always,delete: x[0:10])
113// CHECK-NEXT: #pragma omp target exit data map(from: c) map(release: d)
114// CHECK-NEXT: #pragma omp target exit data map(always,release: e)
115// CHECK-NEXT: #pragma omp target exit data nowait map(from: i)
116// CHECK-NEXT: #pragma omp target exit data nowait map(from: i) if(target exit data: j > 0)
117// CHECK-NEXT: #pragma omp target exit data map(from: i) if(b) nowait
118// CHECK-NEXT: #pragma omp target exit data map(from: c) nowait
119// CHECK-NEXT: #pragma omp target exit data map(from: c) nowait if(b > e)
120// CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c)
121// CHECK-NEXT: #pragma omp target exit data nowait map(from: c) map(release: d)
122// CHECK-NEXT: #pragma omp target exit data nowait map(always,release: e)
123// CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(from: i)
124// CHECK-NEXT: #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(from: i) if(target exit data: j > 0)
125// CHECK-NEXT: #pragma omp target exit data map(from: i) depend(in : argc,argv[i:argc],x[:]) if(b) nowait
126// CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait
127// CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait if(b > e)
128// CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c) depend(in : argc,argv[i:argc],x[:])
129// CHECK-NEXT: #pragma omp target exit data nowait map(from: c) depend(in : argc,argv[i:argc],x[:]) map(release: d)
130// CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(always,release: e)
131// CHECK: template<> char tmain<char, 1>(char argc, char *argv) {
132// CHECK-NEXT: char i, j, b, c, d, e, x[20];
133// CHECK-NEXT: i = argc;
134// CHECK-NEXT: #pragma omp target exit data map(from: i)
135// CHECK-NEXT: #pragma omp target exit data map(from: i) if(target exit data: j > 0)
136// CHECK-NEXT: #pragma omp target exit data map(from: i) if(b)
137// CHECK-NEXT: #pragma omp target exit data map(from: c)
138// CHECK-NEXT: #pragma omp target exit data map(from: c) if(b > e)
139// CHECK-NEXT: #pragma omp target exit data map(release: x[0:10],c)
140// CHECK-NEXT: #pragma omp target exit data map(delete: x[0:10])
141// CHECK-NEXT: #pragma omp target exit data map(always,delete: x[0:10])
142// CHECK-NEXT: #pragma omp target exit data map(from: c) map(release: d)
143// CHECK-NEXT: #pragma omp target exit data map(always,release: e)
144// CHECK-NEXT: #pragma omp target exit data nowait map(from: i)
145// CHECK-NEXT: #pragma omp target exit data nowait map(from: i) if(target exit data: j > 0)
146// CHECK-NEXT: #pragma omp target exit data map(from: i) if(b) nowait
147// CHECK-NEXT: #pragma omp target exit data map(from: c) nowait
148// CHECK-NEXT: #pragma omp target exit data map(from: c) nowait if(b > e)
149// CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c)
150// CHECK-NEXT: #pragma omp target exit data nowait map(from: c) map(release: d)
151// CHECK-NEXT: #pragma omp target exit data nowait map(always,release: e)
152// CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(from: i)
153// CHECK-NEXT: #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(from: i) if(target exit data: j > 0)
154// CHECK-NEXT: #pragma omp target exit data map(from: i) depend(in : argc,argv[i:argc],x[:]) if(b) nowait
155// CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait
156// CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait if(b > e)
157// CHECK-NEXT: #pragma omp target exit data nowait map(release: x[0:10],c) depend(in : argc,argv[i:argc],x[:])
158// CHECK-NEXT: #pragma omp target exit data nowait map(from: c) depend(in : argc,argv[i:argc],x[:]) map(release: d)
159// CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) nowait map(always,release: e)
160
161int main (int argc, char **argv) {
162  int b = argc, i, c, d, e, f, g, x[20];
163  static int a;
164// CHECK: static int a;
165
166#pragma omp target exit data map(from: a)
167// CHECK:      #pragma omp target exit data map(from: a)
168  a=2;
169// CHECK-NEXT: a = 2;
170#pragma omp target exit data map(from: a) if (target exit data: b)
171// CHECK: #pragma omp target exit data map(from: a) if(target exit data: b)
172
173#pragma omp target exit data map(from: a) if (b > g)
174// CHECK: #pragma omp target exit data map(from: a) if(b > g)
175
176#pragma omp target exit data map(from: c)
177// CHECK-NEXT: #pragma omp target exit data map(from: c)
178
179#pragma omp target exit data map(release: c) if(b>g)
180// CHECK-NEXT: #pragma omp target exit data map(release: c) if(b > g)
181
182#pragma omp target exit data map(from: x[0:10], c)
183// CHECK-NEXT: #pragma omp target exit data map(from: x[0:10],c)
184
185#pragma omp target exit data map(delete: x[0:10])
186// CHECK-NEXT: #pragma omp target exit data map(delete: x[0:10])
187
188#pragma omp target exit data map(always, delete: x[0:10])
189// CHECK-NEXT: #pragma omp target exit data map(always,delete: x[0:10])
190
191#pragma omp target exit data map(from: c) map(release: d)
192// CHECK-NEXT: #pragma omp target exit data map(from: c) map(release: d)
193
194#pragma omp target exit data map(always,release: e)
195// CHECK-NEXT: #pragma omp target exit data map(always,release: e)
196
197#pragma omp target exit data nowait map(from: a)
198// CHECK:      #pragma omp target exit data nowait map(from: a)
199
200#pragma omp target exit data nowait map(from: a) if (target exit data: b)
201// CHECK: #pragma omp target exit data nowait map(from: a) if(target exit data: b)
202
203#pragma omp target exit data map(from: a) if (b > g) nowait
204// CHECK: #pragma omp target exit data map(from: a) if(b > g) nowait
205
206#pragma omp target exit data map(from: c) nowait
207// CHECK-NEXT: #pragma omp target exit data map(from: c) nowait
208
209#pragma omp target exit data map(release: c) nowait if(b>g)
210// CHECK-NEXT: #pragma omp target exit data map(release: c) nowait if(b > g)
211
212#pragma omp target exit data nowait map(from: x[0:10], c)
213// CHECK-NEXT: #pragma omp target exit data nowait map(from: x[0:10],c)
214
215#pragma omp target exit data nowait map(from: c) map(release: d)
216// CHECK-NEXT: #pragma omp target exit data nowait map(from: c) map(release: d)
217
218#pragma omp target exit data nowait map(always,release: e)
219// CHECK-NEXT: #pragma omp target exit data nowait map(always,release: e)
220
221#pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(from: a)
222// CHECK:      #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(from: a)
223
224#pragma omp target exit data nowait map(from: a) depend(in : argc,argv[i:argc],x[:]) if (target exit data: b)
225// CHECK: #pragma omp target exit data nowait map(from: a) depend(in : argc,argv[i:argc],x[:]) if(target exit data: b)
226
227#pragma omp target exit data map(from: a) if (b > g) nowait depend(in : argc,argv[i:argc],x[:])
228// CHECK: #pragma omp target exit data map(from: a) if(b > g) nowait depend(in : argc,argv[i:argc],x[:])
229
230#pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait
231// CHECK-NEXT: #pragma omp target exit data map(from: c) depend(in : argc,argv[i:argc],x[:]) nowait
232
233#pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) map(release: c) nowait if(b>g)
234// CHECK-NEXT: #pragma omp target exit data depend(in : argc,argv[i:argc],x[:]) map(release: c) nowait if(b > g)
235
236#pragma omp target exit data nowait map(from: x[0:10], c) depend(in : argc,argv[i:argc],x[:])
237// CHECK-NEXT: #pragma omp target exit data nowait map(from: x[0:10],c) depend(in : argc,argv[i:argc],x[:])
238
239#pragma omp target exit data nowait map(from: c) depend(in : argc,argv[i:argc],x[:]) map(release: d)
240// CHECK-NEXT: #pragma omp target exit data nowait map(from: c) depend(in : argc,argv[i:argc],x[:]) map(release: d)
241
242#pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(always,release: e)
243// CHECK-NEXT: #pragma omp target exit data nowait depend(in : argc,argv[i:argc],x[:]) map(always,release: e)
244
245  return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);
246}
247
248#endif
249