1b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s 2b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s 3b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s 4c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// expected-no-diagnostics 5c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 6c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#ifndef HEADER 7c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#define HEADER 8c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 9c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesvoid foo() {} 10c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 11c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <class T, int N> 12c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen HinesT tmain(T argc) { 13c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines T b = argc, c, d, e, f, g; 14c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines static T a; 15c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: static T a; 16a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#pragma omp for schedule(dynamic) linear(a) 17a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: #pragma omp for schedule(dynamic) linear(a) 18c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int i = 0; i < 2; ++i) 19c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines a = 2; 20c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK-NEXT: for (int i = 0; i < 2; ++i) 21c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK-NEXT: a = 2; 22c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 23a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#pragma omp for private(argc, b), firstprivate(c, d), lastprivate(d, f) collapse(N) schedule(static, N) ordered(N) nowait linear(a : N) 24a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar for (int i = 0; i < 2; ++i) 25a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar for (int j = 0; j < 2; ++j) 26a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar for (int j = 0; j < 2; ++j) 27a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar for (int j = 0; j < 2; ++j) 28a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar for (int j = 0; j < 2; ++j) 29a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar for (int i = 0; i < 2; ++i) 30a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar for (int j = 0; j < 2; ++j) 31a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar for (int j = 0; j < 2; ++j) 32a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar for (int j = 0; j < 2; ++j) 33a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar for (int j = 0; j < 2; ++j) 34c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 35c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines // CHECK-NEXT: #pragma omp parallel 36a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(c,d) lastprivate(d,f) collapse(N) schedule(static, N) ordered(N) nowait linear(a: N) 37a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: for (int i = 0; i < 2; ++i) 38a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: for (int j = 0; j < 2; ++j) 39a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: for (int j = 0; j < 2; ++j) 40a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: for (int j = 0; j < 2; ++j) 41a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: for (int j = 0; j < 2; ++j) 42a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: for (int i = 0; i < 2; ++i) 43a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: for (int j = 0; j < 2; ++j) 44a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: for (int j = 0; j < 2; ++j) 45a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: for (int j = 0; j < 2; ++j) 46a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: for (int j = 0; j < 2; ++j) 47c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines // CHECK-NEXT: foo(); 48c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return T(); 49c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 50c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 51c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesint main(int argc, char **argv) { 52c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int b = argc, c, d, e, f, g; 53c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines static int a; 54c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK: static int a; 55c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for schedule(guided, argc) 56c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines // CHECK-NEXT: #pragma omp for schedule(guided, argc) 57c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int i = 0; i < 2; ++i) 58c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines a = 2; 59c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK-NEXT: for (int i = 0; i < 2; ++i) 60c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// CHECK-NEXT: a = 2; 61c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 62a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#pragma omp for private(argc, b), firstprivate(argv, c), lastprivate(d, f) collapse(2) schedule(auto) ordered nowait linear(g:-1) 63c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int i = 0; i < 10; ++i) 64c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int j = 0; j < 10; ++j) 65c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 66c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines // CHECK-NEXT: #pragma omp parallel 67a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // CHECK-NEXT: #pragma omp for private(argc,b) firstprivate(argv,c) lastprivate(d,f) collapse(2) schedule(auto) ordered nowait linear(g: -1) 68c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines // CHECK-NEXT: for (int i = 0; i < 10; ++i) 69c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines // CHECK-NEXT: for (int j = 0; j < 10; ++j) 70c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines // CHECK-NEXT: foo(); 71c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return (tmain<int, 5>(argc) + tmain<char, 1>(argv[0][0])); 72c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 73c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 74c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#endif 75