1 // Test target codegen - host bc file has to be created first. 2 // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc 3 // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s 4 // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda -emit-llvm-bc %s -o %t-x86-host.bc 5 // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -x c++ -triple nvptx-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck %s 6 // RUN: %clang_cc1 -no-opaque-pointers -verify -fopenmp -fexceptions -fcxx-exceptions -x c++ -triple nvptx-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck %s 7 // expected-no-diagnostics 8 #ifndef HEADER 9 #define HEADER 10 11 int a; 12 13 // CHECK-NOT: @__omp_offloading_{{.+}}_exec_mode = weak constant i8 1 14 // CHECK-DAG: [[DISTR_LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2050, i32 3, i32 {{[0-9]+}}, i8* getelementptr inbounds 15 // CHECK-DAG: [[FOR_LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 514, i32 3, i32 {{[0-9]+}}, i8* getelementptr inbounds 16 // CHECK-DAG: [[LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 3, i32 {{[0-9]+}}, i8* getelementptr inbounds 17 // CHECK-DAG: [[DISTR_FULL:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2050, i32 1, i32 {{[0-9]+}}, i8* getelementptr inbounds 18 // CHECK-DAG: [[FULL:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 1, i32 {{[0-9]+}}, i8* getelementptr inbounds 19 // CHECK-DAG: [[BAR_LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 66, i32 3, i32 {{[0-9]+}}, i8* getelementptr inbounds 20 // CHECK-DAG: [[BAR_FULL:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 66, i32 1, i32 {{[0-9]+}}, i8* getelementptr inbounds 21 // CHECK-NOT: @__omp_offloading_{{.+}}_exec_mode = weak constant i8 1 22 23 void foo() { 24 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 25 // CHECK-DAG: [[DISTR_LIGHT]] 26 // CHECK-DAG: [[FOR_LIGHT]] 27 // CHECK-DAG: [[LIGHT]] 28 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 29 // CHECK-DAG: [[DISTR_LIGHT]] 30 // CHECK-DAG: [[FOR_LIGHT]] 31 // CHECK-DAG: [[LIGHT]] 32 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 33 // CHECK-DAG: [[DISTR_LIGHT]] 34 // CHECK-DAG: [[FOR_LIGHT]] 35 // CHECK-DAG: [[LIGHT]] 36 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 37 // CHECK-DAG: [[DISTR_FULL]] 38 // CHECK-DAG: [[FULL]] 39 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 40 // CHECK-DAG: [[DISTR_FULL]] 41 // CHECK-DAG: [[FULL]] 42 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 43 // CHECK-DAG: [[DISTR_FULL]] 44 // CHECK-DAG: [[FULL]] 45 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 46 // CHECK-DAG: [[DISTR_FULL]] 47 // CHECK-DAG: [[FULL]] 48 #pragma omp target teams distribute parallel for simd if(a) 49 for (int i = 0; i < 10; ++i) 50 ; 51 #pragma omp target teams distribute parallel for simd schedule(static) 52 for (int i = 0; i < 10; ++i) 53 ; 54 #pragma omp target teams distribute parallel for simd schedule(static, 1) 55 for (int i = 0; i < 10; ++i) 56 ; 57 #pragma omp target teams distribute parallel for simd schedule(auto) 58 for (int i = 0; i < 10; ++i) 59 ; 60 #pragma omp target teams distribute parallel for simd schedule(runtime) 61 for (int i = 0; i < 10; ++i) 62 ; 63 #pragma omp target teams distribute parallel for simd schedule(dynamic) 64 for (int i = 0; i < 10; ++i) 65 ; 66 #pragma omp target teams distribute parallel for simd schedule(guided) 67 for (int i = 0; i < 10; ++i) 68 ; 69 int a; 70 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 71 // CHECK-DAG: [[DISTR_LIGHT]] 72 // CHECK-DAG: [[FOR_LIGHT]] 73 // CHECK-DAG: [[LIGHT]] 74 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 75 // CHECK-DAG: [[DISTR_LIGHT]] 76 // CHECK-DAG: [[FOR_LIGHT]] 77 // CHECK-DAG: [[LIGHT]] 78 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 79 // CHECK-DAG: [[DISTR_LIGHT]] 80 // CHECK-DAG: [[FOR_LIGHT]] 81 // CHECK-DAG: [[LIGHT]] 82 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 83 // CHECK-DAG: [[DISTR_FULL]] 84 // CHECK-DAG: [[FULL]] 85 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 86 // CHECK-DAG: [[DISTR_FULL]] 87 // CHECK-DAG: [[FULL]] 88 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 89 // CHECK-DAG: [[DISTR_FULL]] 90 // CHECK-DAG: [[FULL]] 91 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 92 // CHECK-DAG: [[DISTR_FULL]] 93 // CHECK-DAG: [[FULL]] 94 #pragma omp target teams distribute parallel for lastprivate(a) 95 for (int i = 0; i < 10; ++i) 96 a = i; 97 #pragma omp target teams distribute parallel for schedule(static) 98 for (int i = 0; i < 10; ++i) 99 ; 100 #pragma omp target teams distribute parallel for schedule(static, 1) 101 for (int i = 0; i < 10; ++i) 102 ; 103 #pragma omp target teams distribute parallel for schedule(auto) 104 for (int i = 0; i < 10; ++i) 105 ; 106 #pragma omp target teams distribute parallel for schedule(runtime) 107 for (int i = 0; i < 10; ++i) 108 ; 109 #pragma omp target teams distribute parallel for schedule(dynamic) 110 for (int i = 0; i < 10; ++i) 111 ; 112 #pragma omp target teams distribute parallel for schedule(guided) 113 for (int i = 0; i < 10; ++i) 114 ; 115 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 116 // CHECK-DAG: [[DISTR_LIGHT]] 117 // CHECK-DAG: [[FOR_LIGHT]] 118 // CHECK-DAG: [[LIGHT]] 119 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 120 // CHECK-DAG: [[DISTR_LIGHT]] 121 // CHECK-DAG: [[FOR_LIGHT]] 122 // CHECK-DAG: [[LIGHT]] 123 // CHECK: call i32 @__kmpc_target_init( 124 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 125 // CHECK-DAG: [[DISTR_FULL]] 126 // CHECK-DAG: [[FULL]] 127 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 128 // CHECK-DAG: [[DISTR_FULL]] 129 // CHECK-DAG: [[FULL]] 130 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 131 // CHECK-DAG: [[DISTR_FULL]] 132 // CHECK-DAG: [[FULL]] 133 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 134 // CHECK-DAG: [[DISTR_FULL]] 135 // CHECK-DAG: [[FULL]] 136 #pragma omp target teams 137 { 138 int b; 139 #pragma omp distribute parallel for simd 140 for (int i = 0; i < 10; ++i) 141 ; 142 ; 143 } 144 #pragma omp target teams 145 { 146 int b[] = {2, 3, sizeof(int)}; 147 #pragma omp distribute parallel for simd schedule(static) 148 for (int i = 0; i < 10; ++i) 149 ; 150 } 151 #pragma omp target teams 152 { 153 int b; 154 #pragma omp distribute parallel for simd schedule(static, 1) 155 for (int i = 0; i < 10; ++i) 156 ; 157 int &c = b; 158 } 159 #pragma omp target teams 160 #pragma omp distribute parallel for simd schedule(auto) 161 for (int i = 0; i < 10; ++i) 162 ; 163 #pragma omp target teams 164 #pragma omp distribute parallel for simd schedule(runtime) 165 for (int i = 0; i < 10; ++i) 166 ; 167 #pragma omp target teams 168 #pragma omp distribute parallel for simd schedule(dynamic) 169 for (int i = 0; i < 10; ++i) 170 ; 171 #pragma omp target teams 172 #pragma omp distribute parallel for simd schedule(guided) 173 for (int i = 0; i < 10; ++i) 174 ; 175 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 176 // CHECK-DAG: [[DISTR_LIGHT]] 177 // CHECK-DAG: [[FOR_LIGHT]] 178 // CHECK-DAG: [[LIGHT]] 179 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 180 // CHECK-DAG: [[DISTR_LIGHT]] 181 // CHECK-DAG: [[FOR_LIGHT]] 182 // CHECK-DAG: [[LIGHT]] 183 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 184 // CHECK-DAG: [[DISTR_LIGHT]] 185 // CHECK-DAG: [[FOR_LIGHT]] 186 // CHECK-DAG: [[LIGHT]] 187 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 188 // CHECK-DAG: [[DISTR_FULL]] 189 // CHECK-DAG: [[FULL]] 190 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 191 // CHECK-DAG: [[DISTR_FULL]] 192 // CHECK-DAG: [[FULL]] 193 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 194 // CHECK-DAG: [[DISTR_FULL]] 195 // CHECK-DAG: [[FULL]] 196 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 197 // CHECK-DAG: [[DISTR_FULL]] 198 // CHECK-DAG: [[FULL]] 199 #pragma omp target teams 200 #pragma omp distribute parallel for 201 for (int i = 0; i < 10; ++i) 202 ; 203 #pragma omp target teams 204 #pragma omp distribute parallel for schedule(static) 205 for (int i = 0; i < 10; ++i) 206 ; 207 #pragma omp target teams 208 #pragma omp distribute parallel for schedule(static, 1) 209 for (int i = 0; i < 10; ++i) 210 ; 211 #pragma omp target teams 212 #pragma omp distribute parallel for schedule(auto) 213 for (int i = 0; i < 10; ++i) 214 ; 215 #pragma omp target teams 216 #pragma omp distribute parallel for schedule(runtime) 217 for (int i = 0; i < 10; ++i) 218 ; 219 #pragma omp target teams 220 #pragma omp distribute parallel for schedule(dynamic) 221 for (int i = 0; i < 10; ++i) 222 ; 223 #pragma omp target teams 224 #pragma omp distribute parallel for schedule(guided) 225 for (int i = 0; i < 10; ++i) 226 ; 227 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 228 // CHECK-DAG: [[DISTR_LIGHT]] 229 // CHECK-DAG: [[FOR_LIGHT]] 230 // CHECK-DAG: [[LIGHT]] 231 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 232 // CHECK-DAG: [[DISTR_LIGHT]] 233 // CHECK-DAG: [[FOR_LIGHT]] 234 // CHECK-DAG: [[LIGHT]] 235 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 236 // CHECK-DAG: [[DISTR_LIGHT]] 237 // CHECK-DAG: [[FOR_LIGHT]] 238 // CHECK-DAG: [[LIGHT]] 239 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 240 // CHECK-DAG: [[DISTR_FULL]] 241 // CHECK-DAG: [[FULL]] 242 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 243 // CHECK-DAG: [[DISTR_FULL]] 244 // CHECK-DAG: [[FULL]] 245 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 246 // CHECK-DAG: [[DISTR_FULL]] 247 // CHECK-DAG: [[FULL]] 248 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 249 // CHECK-DAG: [[DISTR_FULL]] 250 // CHECK-DAG: [[FULL]] 251 #pragma omp target 252 #pragma omp teams 253 #pragma omp distribute parallel for 254 for (int i = 0; i < 10; ++i) 255 ; 256 #pragma omp target 257 #pragma omp teams 258 #pragma omp distribute parallel for schedule(static) 259 for (int i = 0; i < 10; ++i) 260 ; 261 #pragma omp target 262 #pragma omp teams 263 #pragma omp distribute parallel for schedule(static, 1) 264 for (int i = 0; i < 10; ++i) 265 ; 266 #pragma omp target 267 #pragma omp teams 268 #pragma omp distribute parallel for schedule(auto) 269 for (int i = 0; i < 10; ++i) 270 ; 271 #pragma omp target 272 #pragma omp teams 273 #pragma omp distribute parallel for schedule(runtime) 274 for (int i = 0; i < 10; ++i) 275 ; 276 #pragma omp target 277 #pragma omp teams 278 #pragma omp distribute parallel for schedule(dynamic) 279 for (int i = 0; i < 10; ++i) 280 ; 281 #pragma omp target 282 #pragma omp teams 283 #pragma omp distribute parallel for schedule(guided) 284 for (int i = 0; i < 10; ++i) 285 ; 286 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 287 // CHECK-DAG: [[FOR_LIGHT]] 288 // CHECK-DAG: [[LIGHT]] 289 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 290 // CHECK-DAG: [[FOR_LIGHT]] 291 // CHECK-DAG: [[LIGHT]] 292 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 293 // CHECK-DAG: [[FOR_LIGHT]] 294 // CHECK-DAG: [[LIGHT]] 295 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 296 // CHECK-DAG: [[FULL]] 297 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 298 // CHECK-DAG: [[FULL]] 299 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 300 // CHECK-DAG: [[FULL]] 301 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 302 // CHECK-DAG: [[FULL]] 303 #pragma omp target parallel for if(a) 304 for (int i = 0; i < 10; ++i) 305 ; 306 #pragma omp target parallel for schedule(static) 307 for (int i = 0; i < 10; ++i) 308 ; 309 #pragma omp target parallel for schedule(static, 1) 310 for (int i = 0; i < 10; ++i) 311 ; 312 #pragma omp target parallel for schedule(auto) 313 for (int i = 0; i < 10; ++i) 314 ; 315 #pragma omp target parallel for schedule(runtime) 316 for (int i = 0; i < 10; ++i) 317 ; 318 #pragma omp target parallel for schedule(dynamic) 319 for (int i = 0; i < 10; ++i) 320 ; 321 #pragma omp target parallel for schedule(guided) 322 for (int i = 0; i < 10; ++i) 323 ; 324 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 325 // CHECK-DAG: [[FOR_LIGHT]] 326 // CHECK-DAG: [[LIGHT]] 327 // CHECK-DAG: [[BAR_LIGHT]] 328 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 329 // CHECK-DAG: [[FOR_LIGHT]] 330 // CHECK-DAG: [[LIGHT]] 331 // CHECK-DAG: [[BAR_LIGHT]] 332 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 333 // CHECK-DAG: [[FOR_LIGHT]] 334 // CHECK-DAG: [[LIGHT]] 335 // CHECK-DAG: [[BAR_LIGHT]] 336 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 337 // CHECK-DAG: [[FULL]] 338 // CHECK-DAG: [[BAR_FULL]] 339 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 340 // CHECK-DAG: [[FULL]] 341 // CHECK-DAG: [[BAR_FULL]] 342 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 343 // CHECK-DAG: [[FULL]] 344 // CHECK-DAG: [[BAR_FULL]] 345 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 346 // CHECK-DAG: [[FULL]] 347 // CHECK-DAG: [[BAR_FULL]] 348 #pragma omp target parallel if(a) 349 #pragma omp for simd 350 for (int i = 0; i < 10; ++i) 351 ; 352 #pragma omp target parallel 353 #pragma omp for simd schedule(static) 354 for (int i = 0; i < 10; ++i) 355 ; 356 #pragma omp target parallel 357 #pragma omp for simd schedule(static, 1) 358 for (int i = 0; i < 10; ++i) 359 ; 360 #pragma omp target parallel 361 #pragma omp for simd schedule(auto) 362 for (int i = 0; i < 10; ++i) 363 ; 364 #pragma omp target parallel 365 #pragma omp for simd schedule(runtime) 366 for (int i = 0; i < 10; ++i) 367 ; 368 #pragma omp target parallel 369 #pragma omp for simd schedule(dynamic) 370 for (int i = 0; i < 10; ++i) 371 ; 372 #pragma omp target parallel 373 #pragma omp for simd schedule(guided) 374 for (int i = 0; i < 10; ++i) 375 ; 376 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 377 // CHECK-DAG: [[FULL]] 378 // CHECK-DAG: [[BAR_FULL]] 379 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 380 // CHECK-DAG: [[FOR_LIGHT]] 381 // CHECK-DAG: [[LIGHT]] 382 // CHECK-DAG: [[BAR_LIGHT]] 383 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 384 // CHECK-DAG: [[FOR_LIGHT]] 385 // CHECK-DAG: [[LIGHT]] 386 // CHECK-DAG: [[BAR_LIGHT]] 387 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 388 // CHECK-DAG: [[FULL]] 389 // CHECK-DAG: [[BAR_FULL]] 390 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 391 // CHECK-DAG: [[FULL]] 392 // CHECK-DAG: [[BAR_FULL]] 393 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 394 // CHECK-DAG: [[FULL]] 395 // CHECK-DAG: [[BAR_FULL]] 396 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 397 // CHECK-DAG: [[FULL]] 398 // CHECK-DAG: [[BAR_FULL]] 399 #pragma omp target 400 #pragma omp parallel 401 #pragma omp for simd ordered 402 for (int i = 0; i < 10; ++i) 403 ; 404 #pragma omp target 405 #pragma omp parallel 406 #pragma omp for simd schedule(static) 407 for (int i = 0; i < 10; ++i) 408 ; 409 #pragma omp target 410 #pragma omp parallel 411 #pragma omp for simd schedule(static, 1) 412 for (int i = 0; i < 10; ++i) 413 ; 414 #pragma omp target 415 #pragma omp parallel 416 #pragma omp for simd schedule(auto) 417 for (int i = 0; i < 10; ++i) 418 ; 419 #pragma omp target 420 #pragma omp parallel 421 #pragma omp for simd schedule(runtime) 422 for (int i = 0; i < 10; ++i) 423 ; 424 #pragma omp target 425 #pragma omp parallel 426 #pragma omp for simd schedule(dynamic) 427 for (int i = 0; i < 10; ++i) 428 ; 429 #pragma omp target 430 #pragma omp parallel 431 #pragma omp for simd schedule(guided) 432 for (int i = 0; i < 10; ++i) 433 ; 434 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 435 // CHECK-DAG: [[FOR_LIGHT]] 436 // CHECK-DAG: [[LIGHT]] 437 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 438 // CHECK-DAG: [[FOR_LIGHT]] 439 // CHECK-DAG: [[LIGHT]] 440 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 false) 441 // CHECK-DAG: [[FOR_LIGHT]] 442 // CHECK-DAG: [[LIGHT]] 443 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 444 // CHECK-DAG: [[FULL]] 445 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 446 // CHECK-DAG: [[FULL]] 447 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 448 // CHECK-DAG: [[FULL]] 449 // CHECK: call i32 @__kmpc_target_init({{.*}}, i8 2, i1 false, i1 true) 450 // CHECK-DAG: [[FULL]] 451 #pragma omp target 452 #pragma omp parallel for 453 for (int i = 0; i < 10; ++i) 454 ; 455 #pragma omp target 456 #pragma omp parallel for schedule(static) 457 for (int i = 0; i < 10; ++i) 458 ; 459 #pragma omp target 460 #pragma omp parallel for schedule(static, 1) 461 for (int i = 0; i < 10; ++i) 462 ; 463 #pragma omp target 464 #pragma omp parallel for schedule(auto) 465 for (int i = 0; i < 10; ++i) 466 ; 467 #pragma omp target 468 #pragma omp parallel for schedule(runtime) 469 for (int i = 0; i < 10; ++i) 470 ; 471 #pragma omp target 472 #pragma omp parallel for schedule(dynamic) 473 for (int i = 0; i < 10; ++i) 474 ; 475 #pragma omp target 476 #pragma omp parallel for schedule(guided) 477 for (int i = 0; i < 10; ++i) 478 ; 479 } 480 481 #endif 482 483