brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 3dca1eb Raw
152 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s2// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s3// RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s4 5// RUN: %clang_cc1 -verify -fopenmp-simd -ast-print %s | FileCheck %s6// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -emit-pch -o %t %s7// RUN: %clang_cc1 -fopenmp-simd -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s8// expected-no-diagnostics9 10#ifndef HEADER11#define HEADER12 13void foo() {}14 15template <class T>16struct S {17  operator T() { return T(); }18  static T TS;19#pragma omp threadprivate(TS)20};21 22// CHECK:      template <class T> struct S {23// CHECK:        static T TS;24// CHECK-NEXT:   #pragma omp threadprivate(S::TS)25// CHECK:      };26// CHECK:      template<> struct S<int> {27// CHECK:        static int TS;28// CHECK-NEXT:   #pragma omp threadprivate(S<int>::TS)29// CHECK-NEXT: }30// CHECK:      template<> struct S<long> {31// CHECK:        static long TS;32// CHECK-NEXT:   #pragma omp threadprivate(S<long>::TS)33// CHECK-NEXT: }34 35template <typename T, int C>36T tmain(T argc, T *argv) {37  T b = argc, c, d, e, f, g;38  static T a;39  S<T> s;40#pragma omp parallel sections41  {42    a = 2;43  }44#pragma omp parallel sections default(none), private(argc, b) firstprivate(argv) shared(d) if (parallel: argc > 0) num_threads(C) copyin(S < T > ::TS) proc_bind(master) reduction(+ : c) reduction(max : e) allocate(e)45  {46    foo();47  }48#pragma omp parallel sections allocate(b) if (C) num_threads(s) proc_bind(close) reduction(^ : e, f) reduction(&& : g) lastprivate(b, c)49  {50    foo();51#pragma omp section52    foo();53  }54  return 0;55}56 57// CHECK: template <typename T, int C> T tmain(T argc, T *argv) {58// CHECK-NEXT: T b = argc, c, d, e, f, g;59// CHECK-NEXT: static T a;60// CHECK-NEXT: S<T> s;61// CHECK-NEXT: #pragma omp parallel sections{{$}}62// CHECK-NEXT: {63// CHECK-NEXT: a = 2;64// CHECK-NEXT: }65// CHECK-NEXT: #pragma omp parallel sections default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(C) copyin(S<T>::TS) proc_bind(master) reduction(+: c) reduction(max: e) allocate(e)66// CHECK-NEXT: {67// CHECK-NEXT: foo();68// CHECK-NEXT: }69// CHECK-NEXT: #pragma omp parallel sections allocate(b) if(C) num_threads(s) proc_bind(close) reduction(^: e,f) reduction(&&: g) lastprivate(b,c)70// CHECK-NEXT: {71// CHECK-NEXT: foo();72// CHECK-NEXT: #pragma omp section73// CHECK-NEXT: foo();74// CHECK-NEXT: }75// CHECK: template<> int tmain<int, 5>(int argc, int *argv) {76// CHECK-NEXT: int b = argc, c, d, e, f, g;77// CHECK-NEXT: static int a;78// CHECK-NEXT: S<int> s;79// CHECK-NEXT: #pragma omp parallel sections80// CHECK-NEXT: {81// CHECK-NEXT: a = 2;82// CHECK-NEXT: }83// CHECK-NEXT: #pragma omp parallel sections default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(5) copyin(S<int>::TS) proc_bind(master) reduction(+: c) reduction(max: e) allocate(e)84// CHECK-NEXT: {85// CHECK-NEXT: foo();86// CHECK-NEXT: }87// CHECK-NEXT: #pragma omp parallel sections allocate(b) if(5) num_threads(s) proc_bind(close) reduction(^: e,f) reduction(&&: g) lastprivate(b,c)88// CHECK-NEXT: {89// CHECK-NEXT: foo();90// CHECK-NEXT: #pragma omp section91// CHECK-NEXT: foo();92// CHECK-NEXT: }93// CHECK: template<> long tmain<long, 1>(long argc, long *argv) {94// CHECK-NEXT: long b = argc, c, d, e, f, g;95// CHECK-NEXT: static long a;96// CHECK-NEXT: S<long> s;97// CHECK-NEXT: #pragma omp parallel sections98// CHECK-NEXT: {99// CHECK-NEXT: a = 2;100// CHECK-NEXT: }101// CHECK-NEXT: #pragma omp parallel sections default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(1) copyin(S<long>::TS) proc_bind(master) reduction(+: c) reduction(max: e) allocate(e)102// CHECK-NEXT: {103// CHECK-NEXT: foo();104// CHECK-NEXT: }105// CHECK-NEXT: #pragma omp parallel sections allocate(b) if(1) num_threads(s) proc_bind(close) reduction(^: e,f) reduction(&&: g) lastprivate(b,c)106// CHECK-NEXT: {107// CHECK-NEXT: foo();108// CHECK-NEXT: #pragma omp section109// CHECK-NEXT: foo();110// CHECK-NEXT: }111 112enum Enum {};113 114int main(int argc, char **argv) {115  long x;116  int b = argc, c, d, e, f, g;117  static int a;118#pragma omp threadprivate(a)119  Enum ee;120// CHECK: Enum ee;121#pragma omp parallel sections reduction(task,*:f)122  // CHECK-NEXT: #pragma omp parallel sections reduction(task, *: f)123  {124    a = 2;125  }126// CHECK-NEXT: {127// CHECK-NEXT: a = 2;128// CHECK-NEXT: }129#pragma omp parallel sections default(none), private(argc, b) firstprivate(argv) if (argc > 0) num_threads(ee) copyin(a) proc_bind(spread) reduction(| : c, d) reduction(* : e) lastprivate(argv)130  // CHECK-NEXT: #pragma omp parallel sections default(none) private(argc,b) firstprivate(argv) if(argc > 0) num_threads(ee) copyin(a) proc_bind(spread) reduction(|: c,d) reduction(*: e) lastprivate(argv)131  {132    foo();133#pragma omp section134    foo();135#pragma omp section136    foo();137  }138  // CHECK-NEXT: {139  // CHECK-NEXT: foo();140  // CHECK-NEXT: #pragma omp section141  // CHECK-NEXT: foo();142  // CHECK-NEXT: #pragma omp section143  // CHECK-NEXT: foo();144  // CHECK-NEXT: }145  return tmain<int, 5>(b, &b) + tmain<long, 1>(x, &x);146}147 148template<typename T>149T S<T>::TS = 0;150 151#endif152