brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.6 KiB · 3ee98bc Raw
253 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 13typedef void **omp_allocator_handle_t;14extern const omp_allocator_handle_t omp_null_allocator;15extern const omp_allocator_handle_t omp_default_mem_alloc;16extern const omp_allocator_handle_t omp_large_cap_mem_alloc;17extern const omp_allocator_handle_t omp_const_mem_alloc;18extern const omp_allocator_handle_t omp_high_bw_mem_alloc;19extern const omp_allocator_handle_t omp_low_lat_mem_alloc;20extern const omp_allocator_handle_t omp_cgroup_mem_alloc;21extern const omp_allocator_handle_t omp_pteam_mem_alloc;22extern const omp_allocator_handle_t omp_thread_mem_alloc;23 24void foo() {}25 26template <class T>27struct S {28  operator T() {return T();}29  static T TS;30  #pragma omp threadprivate(TS)31};32 33// CHECK:      template <class T> struct S {34// CHECK:        static T TS;35// CHECK-NEXT:   #pragma omp threadprivate(S::TS)36// CHECK:      };37// CHECK:      template<> struct S<int> {38// CHECK:        static int TS;39// CHECK-NEXT:   #pragma omp threadprivate(S<int>::TS)40// CHECK-NEXT: }41 42template <typename T, int C>43T tmain(T argc, T *argv) {44  T b = argc, c, d, e, f, g;45  static T h;46  S<T> s;47  T arr[C][10], arr1[C];48  T i, j, a[20];49#pragma omp target parallel50  h=2;51#pragma omp target parallel allocate(omp_large_cap_mem_alloc:argv) default(none), private(argc,b) firstprivate(argv) shared (d) if (parallel:argc > 0) num_threads(C) proc_bind(master) reduction(+:c, arr1[argc]) reduction(max:e, arr[:C][0:10]) uses_allocators(omp_large_cap_mem_alloc)52  foo();53#pragma omp target parallel if (C) num_threads(s) proc_bind(close) reduction(^:e, f, arr[0:C][:argc]) reduction(&& : g) allocate(g)54  foo();55#pragma omp target parallel if (target:argc > 0)56  foo();57#pragma omp target parallel if (parallel:argc > 0)58  foo();59#pragma omp target parallel if (C)60  foo();61#pragma omp target parallel map(i)62  foo();63#pragma omp target parallel map(a[0:10], i)64  foo();65#pragma omp target parallel map(to: i) map(from: j)66  foo();67#pragma omp target parallel map(always,alloc: i)68  foo();69#pragma omp target parallel nowait70  foo();71#pragma omp target parallel depend(in : argc, argv[i:argc], a[:])72  foo();73#pragma omp target parallel defaultmap(tofrom: scalar)74  foo();75  return 0;76}77 78// CHECK: template <typename T, int C> T tmain(T argc, T *argv) {79// CHECK-NEXT: T b = argc, c, d, e, f, g;80// CHECK-NEXT: static T h;81// CHECK-NEXT: S<T> s;82// CHECK-NEXT: T arr[C][10], arr1[C];83// CHECK-NEXT: T i, j, a[20]84// CHECK-NEXT: #pragma omp target parallel{{$}}85// CHECK-NEXT: h = 2;86// CHECK-NEXT: #pragma omp target parallel allocate(omp_large_cap_mem_alloc: argv) default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(C) proc_bind(master) reduction(+: c,arr1[argc]) reduction(max: e,arr[:C][0:10]) uses_allocators(omp_large_cap_mem_alloc)87// CHECK-NEXT: foo()88// CHECK-NEXT: #pragma omp target parallel if(C) num_threads(s) proc_bind(close) reduction(^: e,f,arr[0:C][:argc]) reduction(&&: g) allocate(g)89// CHECK-NEXT: foo()90// CHECK-NEXT: #pragma omp target parallel if(target: argc > 0)91// CHECK-NEXT: foo()92// CHECK-NEXT: #pragma omp target parallel if(parallel: argc > 0)93// CHECK-NEXT: foo()94// CHECK-NEXT: #pragma omp target parallel if(C)95// CHECK-NEXT: foo()96// CHECK-NEXT: #pragma omp target parallel map(tofrom: i)97// CHECK-NEXT: foo()98// CHECK-NEXT: #pragma omp target parallel map(tofrom: a[0:10],i)99// CHECK-NEXT: foo()100// CHECK-NEXT: #pragma omp target parallel map(to: i) map(from: j)101// CHECK-NEXT: foo()102// CHECK-NEXT: #pragma omp target parallel map(always,alloc: i)103// CHECK-NEXT: foo()104// CHECK-NEXT: #pragma omp target parallel nowait105// CHECK-NEXT: foo()106// CHECK-NEXT: #pragma omp target parallel depend(in : argc,argv[i:argc],a[:])107// CHECK-NEXT: foo()108// CHECK-NEXT: #pragma omp target parallel defaultmap(tofrom: scalar)109// CHECK-NEXT: foo()110// CHECK: template<> int tmain<int, 5>(int argc, int *argv) {111// CHECK-NEXT: int b = argc, c, d, e, f, g;112// CHECK-NEXT: static int h;113// CHECK-NEXT: S<int> s;114// CHECK-NEXT: int arr[5][10], arr1[5];115// CHECK-NEXT: int i, j, a[20]116// CHECK-NEXT: #pragma omp target parallel117// CHECK-NEXT: h = 2;118// CHECK-NEXT: #pragma omp target parallel allocate(omp_large_cap_mem_alloc: argv) default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(5) proc_bind(master) reduction(+: c,arr1[argc]) reduction(max: e,arr[:5][0:10]) uses_allocators(omp_large_cap_mem_alloc)119// CHECK-NEXT: foo()120// CHECK-NEXT: #pragma omp target parallel if(5) num_threads(s) proc_bind(close) reduction(^: e,f,arr[0:5][:argc]) reduction(&&: g) allocate(g)121// CHECK-NEXT: foo()122// CHECK-NEXT: #pragma omp target parallel if(target: argc > 0)123// CHECK-NEXT: foo()124// CHECK-NEXT: #pragma omp target parallel if(parallel: argc > 0)125// CHECK-NEXT: foo()126// CHECK-NEXT: #pragma omp target parallel if(5)127// CHECK-NEXT: foo()128// CHECK-NEXT: #pragma omp target parallel map(tofrom: i)129// CHECK-NEXT: foo()130// CHECK-NEXT: #pragma omp target parallel map(tofrom: a[0:10],i)131// CHECK-NEXT: foo()132// CHECK-NEXT: #pragma omp target parallel map(to: i) map(from: j)133// CHECK-NEXT: foo()134// CHECK-NEXT: #pragma omp target parallel map(always,alloc: i)135// CHECK-NEXT: foo()136// CHECK-NEXT: #pragma omp target parallel nowait137// CHECK-NEXT: foo()138// CHECK-NEXT: #pragma omp target parallel depend(in : argc,argv[i:argc],a[:])139// CHECK-NEXT: foo()140// CHECK-NEXT: #pragma omp target parallel defaultmap(tofrom: scalar)141// CHECK-NEXT: foo()142// CHECK: template<> char tmain<char, 1>(char argc, char *argv) {143// CHECK-NEXT: char b = argc, c, d, e, f, g;144// CHECK-NEXT: static char h;145// CHECK-NEXT: S<char> s;146// CHECK-NEXT: char arr[1][10], arr1[1];147// CHECK-NEXT: char i, j, a[20]148// CHECK-NEXT: #pragma omp target parallel149// CHECK-NEXT: h = 2;150// CHECK-NEXT: #pragma omp target parallel allocate(omp_large_cap_mem_alloc: argv) default(none) private(argc,b) firstprivate(argv) shared(d) if(parallel: argc > 0) num_threads(1) proc_bind(master) reduction(+: c,arr1[argc]) reduction(max: e,arr[:1][0:10]) uses_allocators(omp_large_cap_mem_alloc)151// CHECK-NEXT: foo()152// CHECK-NEXT: #pragma omp target parallel if(1) num_threads(s) proc_bind(close) reduction(^: e,f,arr[0:1][:argc]) reduction(&&: g) allocate(g)153// CHECK-NEXT: foo()154// CHECK-NEXT: #pragma omp target parallel if(target: argc > 0)155// CHECK-NEXT: foo()156// CHECK-NEXT: #pragma omp target parallel if(parallel: argc > 0)157// CHECK-NEXT: foo()158// CHECK-NEXT: #pragma omp target parallel if(1)159// CHECK-NEXT: foo()160// CHECK-NEXT: #pragma omp target parallel map(tofrom: i)161// CHECK-NEXT: foo()162// CHECK-NEXT: #pragma omp target parallel map(tofrom: a[0:10],i)163// CHECK-NEXT: foo()164// CHECK-NEXT: #pragma omp target parallel map(to: i) map(from: j)165// CHECK-NEXT: foo()166// CHECK-NEXT: #pragma omp target parallel map(always,alloc: i)167// CHECK-NEXT: foo()168// CHECK-NEXT: #pragma omp target parallel nowait169// CHECK-NEXT: foo()170// CHECK-NEXT: #pragma omp target parallel depend(in : argc,argv[i:argc],a[:])171// CHECK-NEXT: foo()172// CHECK-NEXT: #pragma omp target parallel defaultmap(tofrom: scalar)173// CHECK-NEXT: foo()174 175// CHECK-LABEL: int main(int argc, char **argv) {176int main (int argc, char **argv) {177  int i, j, a[20];178// CHECK-NEXT: int i, j, a[20]179#pragma omp target parallel180// CHECK-NEXT: #pragma omp target parallel181  foo();182// CHECK-NEXT: foo();183#pragma omp target parallel if (argc > 0)184// CHECK-NEXT: #pragma omp target parallel if(argc > 0)185  foo();186// CHECK-NEXT: foo();187 188#pragma omp target parallel if (target: argc > 0)189// CHECK-NEXT: #pragma omp target parallel if(target: argc > 0)190  foo();191// CHECK-NEXT: foo();192 193#pragma omp target parallel if (parallel: argc > 0)194// CHECK-NEXT: #pragma omp target parallel if(parallel: argc > 0)195  foo();196// CHECK-NEXT: foo();197 198#pragma omp target parallel map(i) if(argc>0)199// CHECK-NEXT: #pragma omp target parallel map(tofrom: i) if(argc > 0)200  foo();201// CHECK-NEXT: foo();202 203#pragma omp target parallel map(i)204// CHECK-NEXT: #pragma omp target parallel map(tofrom: i)205  foo();206// CHECK-NEXT: foo();207 208#pragma omp target parallel map(a[0:10], i)209// CHECK-NEXT: #pragma omp target parallel map(tofrom: a[0:10],i)210  foo();211// CHECK-NEXT: foo();212 213#pragma omp target parallel map(to: i) map(from: j)214// CHECK-NEXT: #pragma omp target parallel map(to: i) map(from: j)215  foo();216// CHECK-NEXT: foo();217 218#pragma omp target parallel map(always,alloc: i)219// CHECK-NEXT: #pragma omp target parallel map(always,alloc: i)220  foo();221// CHECK-NEXT: foo();222 223#pragma omp target parallel nowait224// CHECK-NEXT: #pragma omp target parallel nowait225  foo();226// CHECK-NEXT: foo();227 228#pragma omp target parallel depend(in : argc, argv[i:argc], a[:])229// CHECK-NEXT: #pragma omp target parallel depend(in : argc,argv[i:argc],a[:])230  foo();231// CHECK-NEXT: foo();232 233#pragma omp target parallel defaultmap(tofrom: scalar) reduction(task, +:argc)234// CHECK-NEXT: #pragma omp target parallel defaultmap(tofrom: scalar) reduction(task, +: argc)235  {236  foo();237#pragma omp cancellation point parallel238#pragma omp cancel parallel239  }240// CHECK-NEXT: {241// CHECK-NEXT: foo();242// CHECK-NEXT: #pragma omp cancellation point parallel243// CHECK-NEXT: #pragma omp cancel parallel244// CHECK-NEXT: }245 246  return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);247}248 249extern template int S<int>::TS;250extern template char S<char>::TS;251 252#endif253