1 // RUN: %clang_cc1 -verify -fopenmp -triple x86_64-unknown-linux-gnu -x c -std=c99 -ast-print %s -o - | FileCheck %s 2 3 // RUN: %clang_cc1 -verify -fopenmp-simd -triple x86_64-unknown-linux-gnu -x c -std=c99 -ast-print %s -o - | FileCheck %s 4 // expected-no-diagnostics 5 6 #ifndef HEADER 7 #define HEADER 8 9 void bar(void); 10 11 #define N 10 foo(void)12void foo(void) { 13 #pragma omp metadirective when(device = {kind(cpu)} \ 14 : parallel) default() 15 bar(); 16 #pragma omp metadirective when(implementation = {vendor(score(0) \ 17 : llvm)}, \ 18 device = {kind(cpu)} \ 19 : parallel) default(target teams) 20 bar(); 21 #pragma omp metadirective when(device = {kind(gpu)} \ 22 : target teams) when(implementation = {vendor(llvm)} \ 23 : parallel) default() 24 bar(); 25 #pragma omp metadirective default(target) when(implementation = {vendor(score(5) \ 26 : llvm)}, \ 27 device = {kind(cpu, host)} \ 28 : parallel) 29 bar(); 30 #pragma omp metadirective when(user = {condition(N > 10)} \ 31 : target) when(user = {condition(N == 10)} \ 32 : parallel) 33 bar(); 34 #pragma omp metadirective when(device = {kind(host)} \ 35 : parallel for) 36 for (int i = 0; i < 100; i++) 37 ; 38 #pragma omp metadirective when(implementation = {extension(match_all)} \ 39 : parallel) default(parallel for) 40 for (int i = 0; i < 100; i++) 41 ; 42 #pragma omp metadirective when(implementation = {extension(match_any)} \ 43 : parallel) default(parallel for) 44 for (int i = 0; i < 100; i++) 45 ; 46 #pragma omp metadirective when(implementation = {extension(match_none)} \ 47 : parallel) default(parallel for) 48 for (int i = 0; i < 100; i++) 49 ; 50 } 51 52 // CHECK: void bar(); 53 // CHECK: void foo() 54 // CHECK-NEXT: #pragma omp parallel 55 // CHECK-NEXT: bar() 56 // CHECK-NEXT: #pragma omp parallel 57 // CHECK-NEXT: bar() 58 // CHECK-NEXT: #pragma omp parallel 59 // CHECK-NEXT: bar() 60 // CHECK-NEXT: #pragma omp parallel 61 // CHECK-NEXT: bar() 62 // CHECK-NEXT: #pragma omp parallel 63 // CHECK-NEXT: bar() 64 // CHECK-NEXT: #pragma omp parallel for 65 // CHECK-NEXT: for (int i = 0; i < 100; i++) 66 // CHECK: #pragma omp parallel 67 // CHECK-NEXT: for (int i = 0; i < 100; i++) 68 // CHECK: #pragma omp parallel for 69 // CHECK-NEXT: for (int i = 0; i < 100; i++) 70 // CHECK: #pragma omp parallel 71 // CHECK-NEXT: for (int i = 0; i < 100; i++) 72 73 #endif 74