172 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 -verify -fopenmp -ast-print %s | FileCheck -check-prefixes=CHECK,OMP51 %s10// RUN: %clang_cc1 -DOMP51 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s11// RUN: %clang_cc1 -DOMP51 -fopenmp -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck -check-prefixes=CHECK,OMP51 %s12 13// RUN: %clang_cc1 -DOMP51 -verify -fopenmp-simd -ast-print %s | FileCheck -check-prefixes=CHECK,OMP51 %s14// RUN: %clang_cc1 -DOMP51 -fopenmp-simd -x c++ -std=c++11 -emit-pch -o %t %s15// RUN: %clang_cc1 -DOMP51 -fopenmp-simd -std=c++11 -include-pch %t -verify %s -ast-print | FileCheck -check-prefixes=CHECK,OMP51 %s16// expected-no-diagnostics17 18#ifndef HEADER19#define HEADER20 21void foo() {}22 23template <class T, class U>24T foo(T targ, U uarg) {25 static T a, *p;26 U b;27 int l;28#pragma omp target update to(([a][targ])p, a) if(l>5) device(l) nowait depend(inout:l)29 30#pragma omp target update from(b, ([a][targ])p) if(l<5) device(l-1) nowait depend(inout:l)31 32 U marr[10][10][10];33#pragma omp target update to(marr[2][0:2][0:2])34 35#pragma omp target update from(marr[2][0:2][0:2])36 37#pragma omp target update from(marr[:2][0:2][0:2:1])38 39#pragma omp target update to(marr[:l][:l][l:])40 41#pragma omp target update to(marr[:2][:1][:])42 43#pragma omp target update from(marr[:2][:1][:])44 45#pragma omp target update to(marr[:2][:][:1])46 47#pragma omp target update from(marr[:2][:][:1])48 49#pragma omp target update to(marr[:2][:] [1:])50 51#pragma omp target update from(marr[:2][:][1:])52 53#pragma omp target update to(marr[:1][3:2][:2])54 55#pragma omp target update from(marr[:1][3:2][:2])56 57#pragma omp target update to(marr[:1][:2][0])58 59#pragma omp target update from(marr[:1][:2][0])60 61 int arr[100][100];62#pragma omp target update to(arr[2][0:1:2])63 64#pragma omp target update from(arr[2][0:1:2])65 66#ifdef OMP5167#pragma omp target update to(present: arr[2][0:1:2])68 69#pragma omp target update from(present: arr[2][0:1:2], a)70#endif71 72 return a + targ + (T)b;73}74// CHECK: static T a, *p;75// CHECK-NEXT: U b;76// CHECK-NEXT: int l;77// CHECK-NEXT: #pragma omp target update to(([a][targ])p,a) if(l > 5) device(l) nowait depend(inout : l){{$}}78// CHECK-NEXT: #pragma omp target update from(b,([a][targ])p) if(l < 5) device(l - 1) nowait depend(inout : l)79// CHECK: static int a, *p;80// CHECK-NEXT: float b;81// CHECK-NEXT: int l;82// CHECK-NEXT: #pragma omp target update to(([a][targ])p,a) if(l > 5) device(l) nowait depend(inout : l)83// CHECK-NEXT: #pragma omp target update from(b,([a][targ])p) if(l < 5) device(l - 1) nowait depend(inout : l)84// CHECK: static char a, *p;85// CHECK-NEXT: float b;86// CHECK-NEXT: int l;87// CHECK-NEXT: #pragma omp target update to(([a][targ])p,a) if(l > 5) device(l) nowait depend(inout : l)88// CHECK-NEXT: #pragma omp target update from(b,([a][targ])p) if(l < 5) device(l - 1) nowait depend(inout : l)89// CHECK: marr[10][10][10];90// CHECK-NEXT: #pragma omp target update to(marr[2][0:2][0:2])91// CHECK-NEXT: #pragma omp target update from(marr[2][0:2][0:2])92// CHECK-NEXT: #pragma omp target update from(marr[:2][0:2][0:2:1])93// CHECK-NEXT: #pragma omp target update to(marr[:l][:l][l:])94// CHECK-NEXT: #pragma omp target update to(marr[:2][:1][:])95// CHECK-NEXT: #pragma omp target update from(marr[:2][:1][:])96// CHECK-NEXT: #pragma omp target update to(marr[:2][:][:1])97// CHECK-NEXT: #pragma omp target update from(marr[:2][:][:1])98// CHECK-NEXT: #pragma omp target update to(marr[:2][:][1:])99// CHECK-NEXT: #pragma omp target update from(marr[:2][:][1:])100// CHECK-NEXT: #pragma omp target update to(marr[:1][3:2][:2])101// CHECK-NEXT: #pragma omp target update from(marr[:1][3:2][:2])102// CHECK-NEXT: #pragma omp target update to(marr[:1][:2][0])103// CHECK-NEXT: #pragma omp target update from(marr[:1][:2][0])104// CHECK: int arr[100][100];105// CHECK-NEXT: #pragma omp target update to(arr[2][0:1:2])106// CHECK-NEXT: #pragma omp target update from(arr[2][0:1:2])107// OMP5-NEXT: #pragma omp target update to(present: arr[2][0:1:2])108// OMP5-NEXT: #pragma omp target update from(present: arr[2][0:1:2], a)109 110int main(int argc, char **argv) {111 static int a;112 int n;113 float f;114 115// CHECK: static int a;116// CHECK-NEXT: int n;117// CHECK-NEXT: float f;118#pragma omp target update to(a) if(f>0.0) device(n) nowait depend(in:n)119// CHECK-NEXT: #pragma omp target update to(a) if(f > 0.) device(n) nowait depend(in : n)120#pragma omp target update from(f) if(f<0.0) device(n+1) nowait depend(in:n)121// CHECK-NEXT: #pragma omp target update from(f) if(f < 0.) device(n + 1) nowait depend(in : n)122#pragma omp target update to(argv[2][0:1:2])123// CHECK-NEXT: #pragma omp target update to(argv[2][0:1:2])124#pragma omp target update from(argv[2][0:1:2])125// CHECK-NEXT: #pragma omp target update from(argv[2][0:1:2])126#ifdef OMP51127#pragma omp target update to(present: argv[2][0:1:2])128// OMP5-NEXT: #pragma omp target update to(present: arr[2][0:1:2])129#pragma omp target update from(argv[2][0:1:2], a)130// OMP5-NEXT: #pragma omp target update from(present: arr[2][0:1:2], a)131#endif132 133float marr[10][10][10];134// CHECK: marr[10][10][10];135#pragma omp target update to(marr[2][0:2][0:2])136// CHECK-NEXT: #pragma omp target update to(marr[2][0:2][0:2])137#pragma omp target update from(marr[2][0:2][0:2])138// CHECK-NEXT: #pragma omp target update from(marr[2][0:2][0:2])139#pragma omp target update to(marr[:n][:n][n:])140// CHECK: #pragma omp target update to(marr[:n][:n][n:])141#pragma omp target update from(marr[:2][:1][:])142// CHECK-NEXT: #pragma omp target update from(marr[:2][:1][:])143#pragma omp target update to(marr[:2][:][:1])144// CHECK-NEXT: #pragma omp target update to(marr[:2][:][:1])145#pragma omp target update from(marr[:2][:][:1])146// CHECK-NEXT: #pragma omp target update from(marr[:2][:][:1])147#pragma omp target update to(marr[:2][:][1:])148// CHECK-NEXT: #pragma omp target update to(marr[:2][:][1:])149#pragma omp target update from(marr[:2][:][1:])150// CHECK-NEXT: #pragma omp target update from(marr[:2][:][1:])151#pragma omp target update to(marr[:1][3:2][:2])152// CHECK-NEXT: #pragma omp target update to(marr[:1][3:2][:2])153#pragma omp target update from(marr[:1][3:2][:2])154// CHECK-NEXT: #pragma omp target update from(marr[:1][3:2][:2])155#pragma omp target update to(marr[:1][:2][0])156// CHECK-NEXT: #pragma omp target update to(marr[:1][:2][0])157#pragma omp target update from(marr[:1][:2][0])158// CHECK-NEXT: #pragma omp target update from(marr[:1][:2][0])159#pragma omp target update to(marr[:2:][0:2][0:2:1])160// CHECK-NEXT: #pragma omp target update to(marr[:2:][0:2][0:2:1])161#pragma omp target update from(marr[:2:][0:2][0:2:1])162// CHECK-NEXT: #pragma omp target update from(marr[:2:][0:2][0:2:1])163#pragma omp target update to(marr[:2:][:2:][0:2:1])164// CHECK-NEXT: #pragma omp target update to(marr[:2:][:2:][0:2:1])165#pragma omp target update from(marr[:2:][:2:][0:2:1])166// CHECK-NEXT: #pragma omp target update from(marr[:2:][:2:][0:2:1])167 168 return foo(argc, f) + foo(argv[0][0], f) + a;169}170 171#endif172