brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · 7467a08 Raw
148 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -ast-print %s -Wno-openmp-mapping | 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 -Wno-openmp-mapping | FileCheck %s4 5// RUN: %clang_cc1 -verify -fopenmp-simd -ast-print %s -Wno-openmp-mapping | 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 -Wno-openmp-mapping | FileCheck %s8// expected-no-diagnostics9 10#ifndef HEADER11#define HEADER12 13void foo() {}14 15struct S {16  S(): a(0) {}17  S(int v) : a(v) {}18  int a;19  typedef int type;20};21 22template <typename T>23class S7 : public T {24protected:25  T a;26  S7() : a(0) {}27 28public:29  S7(typename T::type v) : a(v) {30#pragma omp target31#pragma omp teams32#pragma omp distribute private(a) private(this->a) private(T::a) allocate(a)33    for (int k = 0; k < a.a; ++k)34      ++this->a.a;35  }36  S7 &operator=(S7 &s) {37#pragma omp target38#pragma omp teams39#pragma omp distribute allocate(a) private(a) private(this->a)40    for (int k = 0; k < s.a.a; ++k)41      ++s.a.a;42    return *this;43  }44};45 46// CHECK: #pragma omp target47// CHECK-NEXT: #pragma omp teams48// CHECK-NEXT: #pragma omp distribute private(this->a) private(this->a) private(T::a) allocate(this->a)49// CHECK: #pragma omp target50// CHECK-NEXT: #pragma omp teams51// CHECK-NEXT: #pragma omp distribute allocate(this->a) private(this->a) private(this->a)52// CHECK: #pragma omp target53// CHECK-NEXT: #pragma omp teams54// CHECK-NEXT: #pragma omp distribute private(this->a) private(this->a) private(this->S::a) allocate(this->a)55 56class S8 : public S7<S> {57  S8() {}58 59public:60  S8(int v) : S7<S>(v){61#pragma omp target62#pragma omp teams63#pragma omp distribute private(a) private(this->a) private(S7<S>::a) 64    for (int k = 0; k < a.a; ++k)65      ++this->a.a;66  }67  S8 &operator=(S8 &s) {68#pragma omp target69#pragma omp teams70#pragma omp distribute private(a) private(this->a)71    for (int k = 0; k < s.a.a; ++k)72      ++s.a.a;73    return *this;74  }75};76 77// CHECK: #pragma omp target78// CHECK-NEXT: #pragma omp teams79// CHECK-NEXT: #pragma omp distribute private(this->a) private(this->a) private(this->S7<S>::a)80// CHECK: #pragma omp target81// CHECK-NEXT: #pragma omp teams82// CHECK-NEXT: #pragma omp distribute private(this->a) private(this->a)83 84template <class T, int N>85T tmain(T argc) {86  T b = argc, c, d, e, f, g;87  static T a;88// CHECK: static T a;89#pragma omp distribute90// CHECK-NEXT: #pragma omp distribute{{$}}91  for (int i=0; i < 2; ++i)a=2;92// CHECK-NEXT: for (int i = 0; i < 2; ++i)93// CHECK-NEXT: a = 2;94#pragma omp target95#pragma omp teams96#pragma omp distribute private(argc, b), firstprivate(c, d), collapse(2)97  for (int i = 0; i < 10; ++i)98  for (int j = 0; j < 10; ++j)foo();99// CHECK-NEXT: #pragma omp target100// CHECK-NEXT: #pragma omp teams101// CHECK-NEXT: #pragma omp distribute private(argc,b) firstprivate(c,d) collapse(2)102// CHECK-NEXT: for (int i = 0; i < 10; ++i)103// CHECK-NEXT: for (int j = 0; j < 10; ++j)104// CHECK-NEXT: foo();105  for (int i = 0; i < 10; ++i)foo();106// CHECK-NEXT: for (int i = 0; i < 10; ++i)107// CHECK-NEXT: foo();108#pragma omp distribute109// CHECK: #pragma omp distribute110  for (int i = 0; i < 10; ++i)foo();111// CHECK-NEXT: for (int i = 0; i < 10; ++i)112// CHECK-NEXT: foo();  113  return T();114}115 116int main (int argc, char **argv) {117  int b = argc, c, d, e, f, g;118  static int a;119// CHECK: static int a;120#pragma omp distribute121// CHECK-NEXT: #pragma omp distribute122  for (int i=0; i < 2; ++i)a=2;123// CHECK-NEXT: for (int i = 0; i < 2; ++i)124// CHECK-NEXT: a = 2;125#pragma omp target126#pragma omp teams127#pragma omp distribute private(argc,b),firstprivate(argv, c), collapse(2)128  for (int i = 0; i < 10; ++i)129  for (int j = 0; j < 10; ++j)foo();130// CHECK-NEXT: #pragma omp target131// CHECK-NEXT: #pragma omp teams132// CHECK-NEXT: #pragma omp distribute private(argc,b) firstprivate(argv,c) collapse(2)133// CHECK-NEXT: for (int i = 0; i < 10; ++i)134// CHECK-NEXT: for (int j = 0; j < 10; ++j)135// CHECK-NEXT: foo();136  for (int i = 0; i < 10; ++i)foo();137// CHECK-NEXT: for (int i = 0; i < 10; ++i)138// CHECK-NEXT: foo();139#pragma omp distribute140// CHECK: #pragma omp distribute141  for (int i = 0; i < 10; ++i)foo();142// CHECK-NEXT: for (int i = 0; i < 10; ++i)143// CHECK-NEXT: foo();144  return (0);145}146 147#endif148