Clang Project

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