brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.5 KiB · 3f93954 Raw
310 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=50 -ast-print %s | FileCheck %s2// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -x c++ -std=c++11 -emit-pch -o %t %s3// RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s4 5// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 -ast-print %s | FileCheck %s6// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=50 -x c++ -std=c++11 -emit-pch -o %t %s7// RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=50 -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck %s8 9// RUN: %clang_cc1 -DOMP51 -DOMPX -verify -fopenmp -fopenmp-extensions -ast-print %s | FileCheck -check-prefixes=CHECK,OMP51,OMPX %s10// RUN: %clang_cc1 -DOMP51 -DOMPX -fopenmp -fopenmp-extensions -x c++ -std=c++11 -emit-pch -o %t %s11// RUN: %clang_cc1 -DOMP51 -DOMPX -fopenmp -fopenmp-extensions -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck -check-prefixes=CHECK,OMP51,OMPX %s12 13// RUN: %clang_cc1 -DOMP51 -DOMPX -verify -fopenmp-simd -fopenmp-extensions -ast-print %s | FileCheck -check-prefixes=CHECK,OMP51,OMPX %s14// RUN: %clang_cc1 -DOMP51 -DOMPX -fopenmp-simd -fopenmp-extensions -x c++ -std=c++11 -emit-pch -o %t %s15// RUN: %clang_cc1 -DOMP51 -DOMPX -fopenmp-simd -fopenmp-extensions -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck -check-prefixes=CHECK,OMP51,OMPX %s16 17// RUN: %clang_cc1 -DOMP60 -verify -fopenmp -fopenmp-version=60 -fopenmp-extensions -ast-print %s | FileCheck -check-prefixes=CHECK,OMP60 %s18// RUN: %clang_cc1 -DOMP60 -fopenmp -fopenmp-version=60 -fopenmp-extensions -x c++ -std=c++11 -emit-pch -o %t %s19// RUN: %clang_cc1 -DOMP60 -fopenmp -fopenmp-version=60 -fopenmp-extensions -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck -check-prefixes=CHECK,OMP60 %s20 21// RUN: %clang_cc1 -DOMP60 -verify -fopenmp-simd -fopenmp -fopenmp-version=60 -fopenmp-extensions -ast-print %s | FileCheck -check-prefixes=CHECK,OMP60 %s22// RUN: %clang_cc1 -DOMP60 -fopenmp-simd -fopenmp -fopenmp-version=60 -fopenmp-extensions -x c++ -std=c++11 -emit-pch -o %t %s23// RUN: %clang_cc1 -DOMP60 -fopenmp-simd -fopenmp -fopenmp-version=60 -fopenmp-extensions -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck -check-prefixes=CHECK,OMP60 %s24// expected-no-diagnostics25 26#ifndef HEADER27#define HEADER28 29void foo() {}30 31template <typename T, int C>32T tmain(T argc, T *argv) {33  T i, j, b, c, d, e, x[20];34 35#pragma omp target data map(to: c)36  i = argc;37 38#pragma omp target data map(to: c) if (target data: j > 0)39  foo();40 41#pragma omp target data map(to: c) if (b)42  foo();43 44#pragma omp target data map(c)45  foo();46 47#pragma omp target data map(c) if(b>e)48  foo();49 50#pragma omp target data map(x[0:10], c)51  foo();52 53#pragma omp target data map(to: c) map(from: d)54  foo();55 56#pragma omp target data map(always,alloc: e)57  foo();58 59#pragma omp target data map(close,alloc: e)60  foo();61 62#ifdef OMP6063#pragma omp target data map(self,alloc: e)64  foo();65#endif66 67#ifdef OMP5168#pragma omp target data map(present,alloc: e)69  foo();70#endif71 72#ifdef OMPX73#pragma omp target data map(ompx_hold,alloc: e)74  foo();75#endif76 77// nesting a target region78#pragma omp target data map(e)79{80  #pragma omp target map(always, alloc: e)81    foo();82  #pragma omp target map(close, alloc: e)83    foo();84#ifdef OMP6085  #pragma omp target map(self,alloc: e)86    foo();87#endif88#ifdef OMP5189  #pragma omp target map(present, alloc: e)90    foo();91#endif92#ifdef OMPX93  #pragma omp target map(ompx_hold, alloc: e)94    foo();95#endif96}97 98  return 0;99}100 101// CHECK: template <typename T, int C> T tmain(T argc, T *argv) {102// CHECK-NEXT: T i, j, b, c, d, e, x[20];103// CHECK-NEXT: #pragma omp target data map(to: c){{$}}104// CHECK-NEXT: i = argc;105// CHECK-NEXT: #pragma omp target data map(to: c) if(target{{[ _]}}data: j > 0)106// CHECK-NEXT: foo();107// CHECK-NEXT: #pragma omp target data map(to: c) if(b)108// CHECK-NEXT: foo();109// CHECK-NEXT: #pragma omp target data map(tofrom: c)110// CHECK-NEXT: foo();111// CHECK-NEXT: #pragma omp target data map(tofrom: c) if(b > e)112// CHECK-NEXT: foo();113// CHECK-NEXT: #pragma omp target data map(tofrom: x[0:10],c)114// CHECK-NEXT: foo();115// CHECK-NEXT: #pragma omp target data map(to: c) map(from: d)116// CHECK-NEXT: foo();117// CHECK-NEXT: #pragma omp target data map(always,alloc: e)118// CHECK-NEXT: foo();119// CHECK-NEXT: #pragma omp target data map(close,alloc: e)120// CHECK-NEXT: foo();121// OMP60-NEXT: #pragma omp target data map(self,alloc: e)122// OMP60-NEXT: foo();123// OMP51-NEXT: #pragma omp target data map(present,alloc: e)124// OMP51-NEXT: foo();125//  OMPX-NEXT: #pragma omp target data map(ompx_hold,alloc: e)126//  OMPX-NEXT: foo();127// CHECK-NEXT: #pragma omp target data map(tofrom: e)128// CHECK-NEXT: {129// CHECK-NEXT: #pragma omp target map(always,alloc: e)130// CHECK-NEXT: foo();131// CHECK-NEXT: #pragma omp target map(close,alloc: e)132// CHECK-NEXT: foo();133// OMP60-NEXT: #pragma omp target map(self,alloc: e)134// OMP60-NEXT: foo();135// OMP51-NEXT: #pragma omp target map(present,alloc: e)136// OMP51-NEXT: foo();137//  OMPX-NEXT: #pragma omp target map(ompx_hold,alloc: e)138//  OMPX-NEXT: foo();139// CHECK: template<> int tmain<int, 5>(int argc, int *argv) {140// CHECK-NEXT: int i, j, b, c, d, e, x[20];141// CHECK-NEXT: #pragma omp target data map(to: c)142// CHECK-NEXT: i = argc;143// CHECK-NEXT: #pragma omp target data map(to: c) if(target{{[ _]}}data: j > 0)144// CHECK-NEXT: foo();145// CHECK-NEXT: #pragma omp target data map(to: c) if(b)146// CHECK-NEXT: foo();147// CHECK-NEXT: #pragma omp target data map(tofrom: c)148// CHECK-NEXT: foo();149// CHECK-NEXT: #pragma omp target data map(tofrom: c) if(b > e)150// CHECK-NEXT: foo();151// CHECK-NEXT: #pragma omp target data map(tofrom: x[0:10],c)152// CHECK-NEXT: foo();153// CHECK-NEXT: #pragma omp target data map(to: c) map(from: d)154// CHECK-NEXT: foo();155// CHECK-NEXT: #pragma omp target data map(always,alloc: e)156// CHECK-NEXT: foo();157// CHECK-NEXT: #pragma omp target data map(close,alloc: e)158// CHECK-NEXT: foo();159// OMP60-NEXT: #pragma omp target data map(self,alloc: e)160// OMP60-NEXT: foo();161// OMP51-NEXT: #pragma omp target data map(present,alloc: e)162// OMP51-NEXT: foo();163//  OMPX-NEXT: #pragma omp target data map(ompx_hold,alloc: e)164//  OMPX-NEXT: foo();165// CHECK-NEXT: #pragma omp target data map(tofrom: e)166// CHECK-NEXT: {167// CHECK-NEXT: #pragma omp target map(always,alloc: e)168// CHECK-NEXT: foo();169// CHECK-NEXT: #pragma omp target map(close,alloc: e)170// CHECK-NEXT: foo();171// OMP60-NEXT: #pragma omp target map(self,alloc: e)172// OMP60-NEXT: foo();173// OMP51-NEXT: #pragma omp target map(present,alloc: e)174// OMP51-NEXT: foo();175//  OMPX-NEXT: #pragma omp target map(ompx_hold,alloc: e)176//  OMPX-NEXT: foo();177// CHECK: template<> char tmain<char, 1>(char argc, char *argv) {178// CHECK-NEXT: char i, j, b, c, d, e, x[20];179// CHECK-NEXT: #pragma omp target data map(to: c)180// CHECK-NEXT: i = argc;181// CHECK-NEXT: #pragma omp target data map(to: c) if(target{{[ _]}}data: j > 0)182// CHECK-NEXT: foo();183// CHECK-NEXT: #pragma omp target data map(to: c) if(b)184// CHECK-NEXT: foo();185// CHECK-NEXT: #pragma omp target data map(tofrom: c)186// CHECK-NEXT: foo();187// CHECK-NEXT: #pragma omp target data map(tofrom: c) if(b > e)188// CHECK-NEXT: foo();189// CHECK-NEXT: #pragma omp target data map(tofrom: x[0:10],c)190// CHECK-NEXT: foo();191// CHECK-NEXT: #pragma omp target data map(to: c) map(from: d)192// CHECK-NEXT: foo();193// CHECK-NEXT: #pragma omp target data map(always,alloc: e)194// CHECK-NEXT: foo();195// CHECK-NEXT: #pragma omp target data map(close,alloc: e)196// CHECK-NEXT: foo();197// OMP60-NEXT: #pragma omp target data map(self,alloc: e)198// OMP60-NEXT: foo();199// OMP51-NEXT: #pragma omp target data map(present,alloc: e)200// OMP51-NEXT: foo();201//  OMPX-NEXT: #pragma omp target data map(ompx_hold,alloc: e)202//  OMPX-NEXT: foo();203// CHECK-NEXT: #pragma omp target data map(tofrom: e)204// CHECK-NEXT: {205// CHECK-NEXT: #pragma omp target map(always,alloc: e)206// CHECK-NEXT: foo();207// CHECK-NEXT: #pragma omp target map(close,alloc: e)208// CHECK-NEXT: foo();209// OMP60-NEXT: #pragma omp target map(self,alloc: e)210// OMP60-NEXT: foo();211// OMP51-NEXT: #pragma omp target map(present,alloc: e)212// OMP51-NEXT: foo();213//  OMPX-NEXT: #pragma omp target map(ompx_hold,alloc: e)214//  OMPX-NEXT: foo();215 216int main (int argc, char **argv) {217  int b = argc, c, d, e, f, g, x[20];218  static int a;219// CHECK: static int a;220 221#pragma omp target data map(to: ([argc][3][a])argv)222  // CHECK: #pragma omp target data map(to: ([argc][3][a])argv)223#pragma omp target data map(to: c)224// CHECK:      #pragma omp target data map(to: c)225  a=2;226// CHECK-NEXT: a = 2;227#pragma omp target data map(to: c) if (target data: b)228// CHECK: #pragma omp target data map(to: c) if(target{{[ _]}}data: b)229  foo();230// CHECK-NEXT: foo();231 232#pragma omp target data map(to: c) if (b > g)233// CHECK: #pragma omp target data map(to: c) if(b > g)234  foo();235// CHECK-NEXT: foo();236 237#pragma omp target data map(c)238// CHECK-NEXT: #pragma omp target data map(tofrom: c)239  foo();240// CHECK-NEXT: foo();241 242#pragma omp target data map(c) if(b>g)243// CHECK-NEXT: #pragma omp target data map(tofrom: c) if(b > g)244  foo();245// CHECK-NEXT: foo();246 247#pragma omp target data map(x[0:10], c)248// CHECK-NEXT: #pragma omp target data map(tofrom: x[0:10],c)249  foo();250// CHECK-NEXT: foo();251 252#pragma omp target data map(to: c) map(from: d)253// CHECK-NEXT: #pragma omp target data map(to: c) map(from: d)254  foo();255// CHECK-NEXT: foo();256 257#pragma omp target data map(always,alloc: e)258// CHECK-NEXT: #pragma omp target data map(always,alloc: e)259  foo();260// CHECK-NEXT: foo();261 262#pragma omp target data map(close,alloc: e)263// CHECK-NEXT: #pragma omp target data map(close,alloc: e)264  foo();265// CHECK-NEXT: foo();266 267// OMP60-NEXT: #pragma omp target data map(self,alloc: e)268// OMP60-NEXT: foo();269#ifdef OMP60270#pragma omp target data map(self,alloc: e)271  foo();272#endif273 274// OMP51-NEXT: #pragma omp target data map(present,alloc: e)275// OMP51-NEXT: foo();276#ifdef OMP51277#pragma omp target data map(present,alloc: e)278  foo();279#endif280 281// OMPX-NEXT: #pragma omp target data map(ompx_hold,alloc: e)282// OMPX-NEXT: foo();283#ifdef OMPX284#pragma omp target data map(ompx_hold,alloc: e)285  foo();286#endif287 288// nesting a target region289#pragma omp target data map(e)290// CHECK-NEXT: #pragma omp target data map(tofrom: e)291{292// CHECK-NEXT: {293  #pragma omp target map(always, alloc: e)294// CHECK-NEXT: #pragma omp target map(always,alloc: e)295    foo();296// CHECK-NEXT: foo();297#pragma omp target map(close, alloc: e)298// CHECK-NEXT: #pragma omp target map(close,alloc: e)299  foo();300// CHECK-NEXT: foo();301#pragma omp target map(always, alloc: e)302// CHECK-NEXT: #pragma omp target map(always,alloc: e)303  foo();304}305 306  return tmain<int, 5>(argc, &argc) + tmain<char, 1>(argv[0][0], argv[0]);307}308 309#endif310