1 // RUN: %clang_cc1 -fopenacc -Wno-openacc-deprecated-clause-alias -Wno-source-uses-openacc -ast-print %s -o - | FileCheck %s 2 3 void foo() { 4 int Var; 5 // TODO OpenACC: These are only legal if they have one of a list of clauses on 6 // them, so the 'check' lines should start to include those once we implement 7 // them. For now, they don't emit those because they are 'not implemented'. 8 9 // CHECK: #pragma acc data default(none) 10 #pragma acc data default(none) 11 ; 12 13 // CHECK: #pragma acc data default(none) device_type(int) 14 #pragma acc data default(none) device_type(int) 15 ; 16 17 // CHECK: #pragma acc enter data copyin(Var) 18 #pragma acc enter data copyin(Var) 19 ; 20 // CHECK: #pragma acc exit data copyout(Var) 21 #pragma acc exit data copyout(Var) 22 ; 23 // CHECK: #pragma acc host_data use_device(Var) 24 #pragma acc host_data use_device(Var) 25 ; 26 27 int i; 28 int *iPtr; 29 int array[5]; 30 31 // CHECK: #pragma acc data default(none) if(i == array[1]) 32 #pragma acc data default(none) if(i == array[1]) 33 ; 34 // CHECK: #pragma acc enter data copyin(Var) if(i == array[1]) 35 #pragma acc enter data copyin(Var) if(i == array[1]) 36 ; 37 // CHECK: #pragma acc exit data copyout(Var) if(i == array[1]) 38 #pragma acc exit data copyout(Var) if(i == array[1]) 39 ; 40 // CHECK: #pragma acc host_data use_device(Var) if(i == array[1]) 41 #pragma acc host_data use_device(Var) if(i == array[1]) 42 ; 43 44 // CHECK: #pragma acc data default(none) async(i) 45 #pragma acc data default(none) async(i) 46 ; 47 // CHECK: #pragma acc enter data copyin(i) async(i) 48 #pragma acc enter data copyin(i) async(i) 49 // CHECK: #pragma acc exit data copyout(i) async 50 #pragma acc exit data copyout(i) async 51 52 // CHECK: #pragma acc data default(none) wait 53 #pragma acc data default(none) wait() 54 ; 55 56 // CHECK: #pragma acc enter data copyin(Var) wait() 57 #pragma acc enter data copyin(Var) wait() 58 59 // CHECK: #pragma acc exit data copyout(Var) wait(*iPtr, i) 60 #pragma acc exit data copyout(Var) wait(*iPtr, i) 61 62 // CHECK: #pragma acc data default(none) wait(queues: *iPtr, i) 63 #pragma acc data default(none) wait(queues:*iPtr, i) 64 ; 65 66 // CHECK: #pragma acc enter data copyin(Var) wait(devnum: i : *iPtr, i) 67 #pragma acc enter data copyin(Var) wait(devnum:i:*iPtr, i) 68 69 // CHECK: #pragma acc exit data copyout(Var) wait(devnum: i : queues: *iPtr, i) 70 #pragma acc exit data copyout(Var) wait(devnum:i:queues:*iPtr, i) 71 72 // CHECK: #pragma acc data default(none) 73 #pragma acc data default(none) 74 ; 75 76 // CHECK: #pragma acc data default(present) 77 #pragma acc data default(present) 78 ; 79 80 // CHECK: #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) 81 #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) 82 ; 83 84 // CHECK: #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) present(i, array[1], array, array[1:2]) 85 #pragma acc data default(none) no_create(i, array[1], array, array[1:2]) present(i, array[1], array, array[1:2]) 86 ; 87 // CHECK: #pragma acc data present(i, array[1], array, array[1:2]) 88 #pragma acc data present(i, array[1], array, array[1:2]) 89 ; 90 91 // 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(i, array[1], array, array[1:2]) 92 #pragma acc data default(none) copy(i, array[1], array, array[1:2]) pcopy(i, array[1], array, array[1:2]) present_or_copy(i, array[1], array, array[1:2]) 93 ; 94 95 // 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]) 96 #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]) 97 98 // 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]) 99 #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]) 100 101 // 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]) 102 #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]) 103 104 float *arrayPtr[5]; 105 106 // CHECK: #pragma acc data default(none) deviceptr(iPtr, arrayPtr[0]) 107 #pragma acc data default(none) deviceptr(iPtr, arrayPtr[0]) 108 109 // CHECK: #pragma acc data default(none) attach(iPtr, arrayPtr[0]) 110 #pragma acc data default(none) attach(iPtr, arrayPtr[0]) 111 ; 112 113 // CHECK: #pragma acc exit data copyout(i) finalize 114 #pragma acc exit data copyout(i) finalize 115 116 // CHECK: #pragma acc host_data use_device(i) if_present 117 #pragma acc host_data use_device(i) if_present 118 ; 119 // CHECK: #pragma acc exit data copyout(i) detach(iPtr, arrayPtr[0]) 120 #pragma acc exit data copyout(i) detach(iPtr, arrayPtr[0]) 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 126 // CHECK: #pragma acc exit data copyout(i) delete(i, array[1], array, array[1:2]) 127 #pragma acc exit data copyout(i) delete(i, array[1], array, array[1:2]) 128 129 // CHECK: #pragma acc host_data use_device(i) 130 #pragma acc host_data use_device(i) 131 ; 132 } 133