1*5bbceadfSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -ast-print %s | FileCheck %s 2*5bbceadfSAlexey Bataev // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s 3*5bbceadfSAlexey Bataev // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s 4*5bbceadfSAlexey Bataev 5*5bbceadfSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -ast-print %s | FileCheck %s 6*5bbceadfSAlexey Bataev // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -x c++ -std=c++11 -emit-pch -o %t %s 7*5bbceadfSAlexey Bataev // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=45 -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s 8*5bbceadfSAlexey Bataev // expected-no-diagnostics 9*5bbceadfSAlexey Bataev 10*5bbceadfSAlexey Bataev #ifndef HEADER 11*5bbceadfSAlexey Bataev #define HEADER 12*5bbceadfSAlexey Bataev 13*5bbceadfSAlexey Bataev void foo() {} 14*5bbceadfSAlexey Bataev 15*5bbceadfSAlexey Bataev template <class T, int N> 16*5bbceadfSAlexey Bataev T tmain(T argc) { 17*5bbceadfSAlexey Bataev T b = argc, c, d, e, f, g; 18*5bbceadfSAlexey Bataev static T a; 19*5bbceadfSAlexey Bataev // CHECK: static T a; 20*5bbceadfSAlexey Bataev #pragma omp taskgroup allocate(d) task_reduction(+: d) 21*5bbceadfSAlexey Bataev #pragma omp parallel master taskloop if(taskloop: argc > N) default(shared) untied priority(N) grainsize(N) reduction(+:g) allocate(g) 22*5bbceadfSAlexey Bataev // CHECK-NEXT: #pragma omp taskgroup allocate(d) task_reduction(+: d) 23*5bbceadfSAlexey Bataev // CHECK-NEXT: #pragma omp parallel master taskloop if(taskloop: argc > N) default(shared) untied priority(N) grainsize(N) reduction(+: g) allocate(g){{$}} 24*5bbceadfSAlexey Bataev for (int i = 0; i < 2; ++i) 25*5bbceadfSAlexey Bataev a = 2; 26*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int i = 0; i < 2; ++i) 27*5bbceadfSAlexey Bataev // CHECK-NEXT: a = 2; 28*5bbceadfSAlexey Bataev #pragma omp parallel 29*5bbceadfSAlexey Bataev #pragma omp parallel master taskloop private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) shared(g) if (c) final(d) mergeable priority(f) nogroup num_tasks(N) 30*5bbceadfSAlexey Bataev for (int i = 0; i < 2; ++i) 31*5bbceadfSAlexey Bataev for (int j = 0; j < 2; ++j) 32*5bbceadfSAlexey Bataev for (int j = 0; j < 2; ++j) 33*5bbceadfSAlexey Bataev for (int j = 0; j < 2; ++j) 34*5bbceadfSAlexey Bataev for (int j = 0; j < 2; ++j) 35*5bbceadfSAlexey Bataev for (int i = 0; i < 2; ++i) 36*5bbceadfSAlexey Bataev for (int j = 0; j < 2; ++j) 37*5bbceadfSAlexey Bataev for (int j = 0; j < 2; ++j) 38*5bbceadfSAlexey Bataev for (int j = 0; j < 2; ++j) 39*5bbceadfSAlexey Bataev for (int j = 0; j < 2; ++j) 40*5bbceadfSAlexey Bataev foo(); 41*5bbceadfSAlexey Bataev // CHECK-NEXT: #pragma omp parallel 42*5bbceadfSAlexey Bataev // CHECK-NEXT: #pragma omp parallel master taskloop private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) shared(g) if(c) final(d) mergeable priority(f) nogroup num_tasks(N) 43*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int i = 0; i < 2; ++i) 44*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int j = 0; j < 2; ++j) 45*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int j = 0; j < 2; ++j) 46*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int j = 0; j < 2; ++j) 47*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int j = 0; j < 2; ++j) 48*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int i = 0; i < 2; ++i) 49*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int j = 0; j < 2; ++j) 50*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int j = 0; j < 2; ++j) 51*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int j = 0; j < 2; ++j) 52*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int j = 0; j < 2; ++j) 53*5bbceadfSAlexey Bataev // CHECK-NEXT: foo(); 54*5bbceadfSAlexey Bataev return T(); 55*5bbceadfSAlexey Bataev } 56*5bbceadfSAlexey Bataev 57*5bbceadfSAlexey Bataev // CHECK-LABEL: int main(int argc, char **argv) { 58*5bbceadfSAlexey Bataev int main(int argc, char **argv) { 59*5bbceadfSAlexey Bataev int b = argc, c, d, e, f, g; 60*5bbceadfSAlexey Bataev static int a; 61*5bbceadfSAlexey Bataev // CHECK: static int a; 62*5bbceadfSAlexey Bataev #pragma omp taskgroup task_reduction(+: d) 63*5bbceadfSAlexey Bataev #pragma omp parallel master taskloop if(parallel: a) default(none) shared(a) final(b) priority(5) num_tasks(argc) reduction(*: g) 64*5bbceadfSAlexey Bataev // CHECK-NEXT: #pragma omp taskgroup task_reduction(+: d) 65*5bbceadfSAlexey Bataev // CHECK-NEXT: #pragma omp parallel master taskloop if(parallel: a) default(none) shared(a) final(b) priority(5) num_tasks(argc) reduction(*: g) 66*5bbceadfSAlexey Bataev for (int i = 0; i < 2; ++i) 67*5bbceadfSAlexey Bataev a = 2; 68*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int i = 0; i < 2; ++i) 69*5bbceadfSAlexey Bataev // CHECK-NEXT: a = 2; 70*5bbceadfSAlexey Bataev #pragma omp parallel 71*5bbceadfSAlexey Bataev #pragma omp parallel master taskloop private(argc, b), firstprivate(argv, c), lastprivate(d, f) collapse(2) shared(g) if(argc) mergeable priority(argc) grainsize(argc) reduction(max: a, e) 72*5bbceadfSAlexey Bataev for (int i = 0; i < 10; ++i) 73*5bbceadfSAlexey Bataev for (int j = 0; j < 10; ++j) 74*5bbceadfSAlexey Bataev foo(); 75*5bbceadfSAlexey Bataev // CHECK-NEXT: #pragma omp parallel 76*5bbceadfSAlexey Bataev // CHECK-NEXT: #pragma omp parallel master taskloop private(argc,b) firstprivate(argv,c) lastprivate(d,f) collapse(2) shared(g) if(argc) mergeable priority(argc) grainsize(argc) reduction(max: a,e) 77*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int i = 0; i < 10; ++i) 78*5bbceadfSAlexey Bataev // CHECK-NEXT: for (int j = 0; j < 10; ++j) 79*5bbceadfSAlexey Bataev // CHECK-NEXT: foo(); 80*5bbceadfSAlexey Bataev return (tmain<int, 5>(argc) + tmain<char, 1>(argv[0][0])); 81*5bbceadfSAlexey Bataev } 82*5bbceadfSAlexey Bataev 83*5bbceadfSAlexey Bataev #endif 84