Clang Project

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