129 lines · cpp
1// RUN: %clang_cc1 -fopenacc -Wno-openacc-deprecated-clause-alias -Wno-source-uses-openacc -ast-print %s -o - | FileCheck %s2 3void foo() {4 int Var;5// CHECK: #pragma acc data default(none)6#pragma acc data default(none)7 ;8 9// CHECK: #pragma acc data default(none) device_type(radeon)10#pragma acc data default(none) device_type(radeon)11 ;12 13// CHECK: #pragma acc enter data copyin(Var)14#pragma acc enter data copyin(Var)15 ;16// CHECK: #pragma acc exit data copyout(always, zero: Var)17#pragma acc exit data copyout(zero, always: Var)18 ;19// CHECK: #pragma acc host_data use_device(Var)20#pragma acc host_data use_device(Var)21 ;22 23 int i;24 int *iPtr;25 int array[5];26 27// CHECK: #pragma acc data default(none) if(i == array[1])28#pragma acc data default(none) if(i == array[1])29 ;30// CHECK: #pragma acc enter data copyin(Var) if(i == array[1])31#pragma acc enter data copyin(Var) if(i == array[1])32 ;33// CHECK: #pragma acc exit data copyout(Var) if(i == array[1])34#pragma acc exit data copyout(Var) if(i == array[1])35 ;36// CHECK: #pragma acc host_data use_device(Var) if(i == array[1])37#pragma acc host_data use_device(Var) if(i == array[1])38 ;39 40// CHECK: #pragma acc data default(none) async(i)41#pragma acc data default(none) async(i)42 ;43// CHECK: #pragma acc enter data copyin(always: i) async(i)44#pragma acc enter data copyin(always: i) async(i)45// CHECK: #pragma acc exit data copyout(i) async46#pragma acc exit data copyout(i) async47 48// CHECK: #pragma acc data default(none) wait49#pragma acc data default(none) wait50 ;51 52// CHECK: #pragma acc enter data copyin(Var) wait53#pragma acc enter data copyin(Var) wait54 55// CHECK: #pragma acc exit data copyout(always, zero: Var) wait(*iPtr, i)56#pragma acc exit data copyout(always, zero: Var) wait(*iPtr, i)57 58// CHECK: #pragma acc data default(none) wait(queues: *iPtr, i)59#pragma acc data default(none) wait(queues:*iPtr, i)60 ;61 62// CHECK: #pragma acc enter data copyin(Var) wait(devnum: i : *iPtr, i)63#pragma acc enter data copyin(Var) wait(devnum:i:*iPtr, i)64 65// CHECK: #pragma acc exit data copyout(Var) wait(devnum: i : queues: *iPtr, i)66#pragma acc exit data copyout(Var) wait(devnum:i:queues:*iPtr, i)67 68// CHECK: #pragma acc data default(none)69#pragma acc data default(none)70 ;71 72// CHECK: #pragma acc data default(present)73#pragma acc data default(present)74 ;75 76// CHECK: #pragma acc data default(none) no_create(i, array[1], array, array[1:2])77#pragma acc data default(none) no_create(i, array[1], array, array[1:2])78 ;79 80// CHECK: #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) present(i, array[1], array, array[1:2])81#pragma acc data default(none) no_create(i, array[1], array, array[1:2]) present(i, array[1], array, array[1:2])82 ;83// CHECK: #pragma acc data present(i, array[1], array, array[1:2])84#pragma acc data present(i, array[1], array, array[1:2])85 ;86 87// CHECK: #pragma acc data default(none) copy(i, array[1], array, array[1:2]) pcopy(i, array[1], array, array[1:2]) present_or_copy(alwaysin, alwaysout: i, array[1], array, array[1:2])88#pragma acc data default(none) copy(i, array[1], array, array[1:2]) pcopy(i, array[1], array, array[1:2]) present_or_copy(alwaysin, alwaysout: i, array[1], array, array[1:2])89 ;90 91// CHECK: #pragma acc enter data copyin(i, array[1], array, array[1:2]) pcopyin(readonly: i, array[1], array, array[1:2]) present_or_copyin(i, array[1], array, array[1:2])92#pragma acc enter data copyin(i, array[1], array, array[1:2]) pcopyin(readonly:i, array[1], array, array[1:2]) present_or_copyin(i, array[1], array, array[1:2])93 94// CHECK: #pragma acc exit data copyout(i, array[1], array, array[1:2]) pcopyout(zero: i, array[1], array, array[1:2]) present_or_copyout(i, array[1], array, array[1:2])95#pragma acc exit data copyout(i, array[1], array, array[1:2]) pcopyout(zero: i, array[1], array, array[1:2]) present_or_copyout(i, array[1], array, array[1:2])96 97// CHECK: #pragma acc enter data create(i, array[1], array, array[1:2]) pcreate(zero: i, array[1], array, array[1:2]) present_or_create(i, array[1], array, array[1:2])98#pragma acc enter data create(i, array[1], array, array[1:2]) pcreate(zero: i, array[1], array, array[1:2]) present_or_create(i, array[1], array, array[1:2])99 100 float *arrayPtr[5];101 102// CHECK: #pragma acc data default(none) deviceptr(iPtr, arrayPtr[0])103#pragma acc data default(none) deviceptr(iPtr, arrayPtr[0])104 105// CHECK: #pragma acc data default(none) attach(iPtr, arrayPtr[0])106#pragma acc data default(none) attach(iPtr, arrayPtr[0])107 ;108 109// CHECK: #pragma acc exit data copyout(i) finalize110#pragma acc exit data copyout(i) finalize111 112// CHECK: #pragma acc host_data use_device(i) if_present113#pragma acc host_data use_device(i) if_present114 ;115// CHECK: #pragma acc exit data copyout(i) detach(iPtr, arrayPtr[0])116#pragma acc exit data copyout(i) detach(iPtr, arrayPtr[0])117 118// CHECK: #pragma acc exit data copyout(i) delete(i, array[1], array, array[1:2])119#pragma acc exit data copyout(i) delete(i, array[1], array, array[1:2])120 ;121 122// CHECK: #pragma acc exit data copyout(i) delete(i, array[1], array, array[1:2])123#pragma acc exit data copyout(i) delete(i, array[1], array, array[1:2])124 125// CHECK: #pragma acc host_data use_device(i)126#pragma acc host_data use_device(i)127 ;128}129