@@ -86,3 +86,117 @@ func.func @test(%a: memref<10xf32>) {
86
86
// CHECK: }
87
87
// CHECK: acc.yield
88
88
// CHECK: }
89
+
90
+ // -----
91
+
92
+ acc.private.recipe @privatization_memref_10_f32 : memref <10 xf32 > init {
93
+ ^bb0 (%arg0: memref <10 xf32 >):
94
+ %0 = memref.alloc () : memref <10 xf32 >
95
+ acc.yield %0 : memref <10 xf32 >
96
+ } destroy {
97
+ ^bb0 (%arg0: memref <10 xf32 >):
98
+ memref.dealloc %arg0 : memref <10 xf32 >
99
+ acc.terminator
100
+ }
101
+
102
+ func.func @test (%a: memref <10 xf32 >) {
103
+ %lb = arith.constant 0 : index
104
+ %st = arith.constant 1 : index
105
+ %c10 = arith.constant 10 : index
106
+ %p1 = acc.private varPtr (%a : memref <10 xf32 >) -> memref <10 xf32 >
107
+ acc.parallel private (@privatization_memref_10_f32 -> %p1 : memref <10 xf32 >) {
108
+ acc.loop control (%i : index ) = (%lb : index ) to (%c10 : index ) step (%st : index ) {
109
+ %ci = memref.load %a [%i ] : memref <10 xf32 >
110
+ acc.yield
111
+ }
112
+ acc.yield
113
+ }
114
+ return
115
+ }
116
+
117
+ // CHECK: func.func @test
118
+ // CHECK-SAME: (%[[A:.*]]: memref<10xf32>)
119
+ // CHECK: %[[PRIVATE:.*]] = acc.private varPtr(%[[A]] : memref<10xf32>) -> memref<10xf32>
120
+ // CHECK: acc.parallel private(@privatization_memref_10_f32 -> %[[PRIVATE]] : memref<10xf32>) {
121
+ // CHECK: acc.loop control(%[[I:.*]] : index) = (%{{.*}} : index) to (%{{.*}} : index) step (%{{.*}} : index) {
122
+ // DEVICE: %{{.*}} = memref.load %[[PRIVATE:.*]][%[[I]]] : memref<10xf32>
123
+ // CHECK: acc.yield
124
+ // CHECK: }
125
+ // CHECK: acc.yield
126
+ // CHECK: }
127
+
128
+ // -----
129
+
130
+ acc.private.recipe @privatization_memref_10_f32 : memref <10 xf32 > init {
131
+ ^bb0 (%arg0: memref <10 xf32 >):
132
+ %0 = memref.alloc () : memref <10 xf32 >
133
+ acc.yield %0 : memref <10 xf32 >
134
+ } destroy {
135
+ ^bb0 (%arg0: memref <10 xf32 >):
136
+ memref.dealloc %arg0 : memref <10 xf32 >
137
+ acc.terminator
138
+ }
139
+
140
+ func.func @test (%a: memref <10 xf32 >) {
141
+ %lb = arith.constant 0 : index
142
+ %st = arith.constant 1 : index
143
+ %c10 = arith.constant 10 : index
144
+ %p1 = acc.private varPtr (%a : memref <10 xf32 >) -> memref <10 xf32 >
145
+ acc.parallel {
146
+ acc.loop private (@privatization_memref_10_f32 -> %p1 : memref <10 xf32 >) control (%i : index ) = (%lb : index ) to (%c10 : index ) step (%st : index ) {
147
+ %ci = memref.load %a [%i ] : memref <10 xf32 >
148
+ acc.yield
149
+ }
150
+ acc.yield
151
+ }
152
+ return
153
+ }
154
+
155
+ // CHECK: func.func @test
156
+ // CHECK-SAME: (%[[A:.*]]: memref<10xf32>)
157
+ // CHECK: %[[PRIVATE:.*]] = acc.private varPtr(%[[A]] : memref<10xf32>) -> memref<10xf32>
158
+ // CHECK: acc.parallel {
159
+ // CHECK: acc.loop private(@privatization_memref_10_f32 -> %[[PRIVATE]] : memref<10xf32>) control(%[[I:.*]] : index) = (%{{.*}} : index) to (%{{.*}} : index) step (%{{.*}} : index) {
160
+ // DEVICE: %{{.*}} = memref.load %[[PRIVATE:.*]][%[[I]]] : memref<10xf32>
161
+ // CHECK: acc.yield
162
+ // CHECK: }
163
+ // CHECK: acc.yield
164
+ // CHECK: }
165
+
166
+ // -----
167
+
168
+ acc.private.recipe @privatization_memref_10_f32 : memref <10 xf32 > init {
169
+ ^bb0 (%arg0: memref <10 xf32 >):
170
+ %0 = memref.alloc () : memref <10 xf32 >
171
+ acc.yield %0 : memref <10 xf32 >
172
+ } destroy {
173
+ ^bb0 (%arg0: memref <10 xf32 >):
174
+ memref.dealloc %arg0 : memref <10 xf32 >
175
+ acc.terminator
176
+ }
177
+
178
+ func.func @test (%a: memref <10 xf32 >) {
179
+ %lb = arith.constant 0 : index
180
+ %st = arith.constant 1 : index
181
+ %c10 = arith.constant 10 : index
182
+ %p1 = acc.private varPtr (%a : memref <10 xf32 >) -> memref <10 xf32 >
183
+ acc.serial private (@privatization_memref_10_f32 -> %p1 : memref <10 xf32 >) {
184
+ acc.loop control (%i : index ) = (%lb : index ) to (%c10 : index ) step (%st : index ) {
185
+ %ci = memref.load %a [%i ] : memref <10 xf32 >
186
+ acc.yield
187
+ }
188
+ acc.yield
189
+ }
190
+ return
191
+ }
192
+
193
+ // CHECK: func.func @test
194
+ // CHECK-SAME: (%[[A:.*]]: memref<10xf32>)
195
+ // CHECK: %[[PRIVATE:.*]] = acc.private varPtr(%[[A]] : memref<10xf32>) -> memref<10xf32>
196
+ // CHECK: acc.serial private(@privatization_memref_10_f32 -> %[[PRIVATE]] : memref<10xf32>) {
197
+ // CHECK: acc.loop control(%[[I:.*]] : index) = (%{{.*}} : index) to (%{{.*}} : index) step (%{{.*}} : index) {
198
+ // DEVICE: %{{.*}} = memref.load %[[PRIVATE:.*]][%[[I]]] : memref<10xf32>
199
+ // CHECK: acc.yield
200
+ // CHECK: }
201
+ // CHECK: acc.yield
202
+ // CHECK: }
0 commit comments