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