xref: /llvm-project/clang/test/AST/ast-print-openacc-data-construct.cpp (revision bfc2dbe02e00f0023c0a2d58b53cdbd1f4139f02)
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