@@ -141,6 +141,148 @@ util.func public @device_queue_dealloca(
141141
142142// -----
143143
144+ // CHECK-LABEL: @device_queue_fill_i8
145+ util.func public @device_queue_fill_i8 (
146+ // CHECK-SAME: (%[[DEVICE:.+]]: !vm.ref<!hal.device>, %[[AFFINITY:.+]]: i64,
147+ %device: !hal.device , %affinity: i64 ,
148+ // CHECK-SAME: %[[WAIT_FENCE:.+]]: !vm.ref<!hal.fence>, %[[SIGNAL_FENCE:.+]]: !vm.ref<!hal.fence>,
149+ %wait_fence: !hal.fence , %signal_fence: !hal.fence ,
150+ // CHECK-SAME: %[[PATTERN_I8_I32:.+]]: i32,
151+ %pattern_i8: i8 ,
152+ // CHECK-SAME: %[[TARGET_BUFFER:.+]]: !vm.ref<!hal.buffer>)
153+ %target_buffer: !hal.buffer ) {
154+ // CHECK-DAG: %[[TARGET_OFFSET:.+]] = vm.const.i64 200
155+ %target_offset = arith.constant 200 : index
156+ // CHECK-DAG: %[[LENGTH:.+]] = vm.const.i64 300
157+ %length = arith.constant 300 : index
158+ // CHECK-DAG: %[[PATTERN_LENGTH:.+]] = vm.const.i32 1
159+ // CHECK-DAG: %[[FLAGS:.+]] = vm.const.i64.zero
160+ // CHECK-DAG: %[[PATTERN_I8_I64:.+]] = vm.ext.i32.i64.s %[[PATTERN_I8_I32]]
161+ // CHECK: vm.call @hal.device.queue.fill(
162+ // CHECK-SAME: %[[DEVICE]], %[[AFFINITY]],
163+ // CHECK-SAME: %[[WAIT_FENCE]], %[[SIGNAL_FENCE]],
164+ // CHECK-SAME: %[[TARGET_BUFFER]], %[[TARGET_OFFSET]],
165+ // CHECK-SAME: %[[LENGTH]],
166+ // CHECK-SAME: %[[PATTERN_I8_I64]], %[[PATTERN_LENGTH]],
167+ // CHECK-SAME: %[[FLAGS]])
168+ hal.device.queue. fill <%device : !hal.device >
169+ affinity (%affinity )
170+ wait (%wait_fence ) signal (%signal_fence )
171+ target (%target_buffer : !hal.buffer )[%target_offset ]
172+ length (%length )
173+ pattern (%pattern_i8 : i8 )
174+ flags (0 )
175+ util.return
176+ }
177+
178+ // -----
179+
180+ // CHECK-LABEL: @device_queue_fill_i32
181+ util.func public @device_queue_fill_i32 (
182+ // CHECK-SAME: (%[[DEVICE:.+]]: !vm.ref<!hal.device>, %[[AFFINITY:.+]]: i64,
183+ %device: !hal.device , %affinity: i64 ,
184+ // CHECK-SAME: %[[WAIT_FENCE:.+]]: !vm.ref<!hal.fence>, %[[SIGNAL_FENCE:.+]]: !vm.ref<!hal.fence>,
185+ %wait_fence: !hal.fence , %signal_fence: !hal.fence ,
186+ // CHECK-SAME: %[[PATTERN_I32:.+]]: i32,
187+ %pattern_i32: i32 ,
188+ // CHECK-SAME: %[[TARGET_BUFFER:.+]]: !vm.ref<!hal.buffer>)
189+ %target_buffer: !hal.buffer ) {
190+ // CHECK-DAG: %[[TARGET_OFFSET:.+]] = vm.const.i64 200
191+ %target_offset = arith.constant 200 : index
192+ // CHECK-DAG: %[[LENGTH:.+]] = vm.const.i64 300
193+ %length = arith.constant 300 : index
194+ // CHECK-DAG: %[[PATTERN_LENGTH:.+]] = vm.const.i32 4
195+ // CHECK-DAG: %[[FLAGS:.+]] = vm.const.i64.zero
196+ // CHECK-DAG: %[[PATTERN_I32_I64:.+]] = vm.ext.i32.i64.s %[[PATTERN_I32]]
197+ // CHECK: vm.call @hal.device.queue.fill(
198+ // CHECK-SAME: %[[DEVICE]], %[[AFFINITY]],
199+ // CHECK-SAME: %[[WAIT_FENCE]], %[[SIGNAL_FENCE]],
200+ // CHECK-SAME: %[[TARGET_BUFFER]], %[[TARGET_OFFSET]],
201+ // CHECK-SAME: %[[LENGTH]],
202+ // CHECK-SAME: %[[PATTERN_I32_I64]], %[[PATTERN_LENGTH]],
203+ // CHECK-SAME: %[[FLAGS]])
204+ hal.device.queue. fill <%device : !hal.device >
205+ affinity (%affinity )
206+ wait (%wait_fence ) signal (%signal_fence )
207+ target (%target_buffer : !hal.buffer )[%target_offset ]
208+ length (%length )
209+ pattern (%pattern_i32 : i32 )
210+ flags (0 )
211+ util.return
212+ }
213+
214+ // -----
215+
216+ // CHECK-LABEL: @device_queue_update
217+ util.func public @device_queue_update (
218+ // CHECK-SAME: (%[[DEVICE:.+]]: !vm.ref<!hal.device>, %[[AFFINITY:.+]]: i64,
219+ %device: !hal.device , %affinity: i64 ,
220+ // CHECK-SAME: %[[WAIT_FENCE:.+]]: !vm.ref<!hal.fence>, %[[SIGNAL_FENCE:.+]]: !vm.ref<!hal.fence>,
221+ %wait_fence: !hal.fence , %signal_fence: !hal.fence ,
222+ // CHECK-SAME: %[[SOURCE_BUFFER:.+]]: !vm.buffer,
223+ %source_buffer: !util.buffer ,
224+ // CHECK-SAME: %[[TARGET_BUFFER:.+]]: !vm.ref<!hal.buffer>)
225+ %target_buffer: !hal.buffer ) {
226+ // CHECK-DAG: %[[SOURCE_OFFSET:.+]] = vm.const.i64 100
227+ %source_offset = arith.constant 100 : index
228+ // CHECK-DAG: %[[TARGET_OFFSET:.+]] = vm.const.i64 200
229+ %target_offset = arith.constant 200 : index
230+ // CHECK-DAG: %[[LENGTH:.+]] = vm.const.i64 300
231+ %length = arith.constant 300 : index
232+ // CHECK-DAG: %[[FLAGS:.+]] = vm.const.i64.zero
233+ // CHECK: vm.call @hal.device.queue.update(
234+ // CHECK-SAME: %[[DEVICE]], %[[AFFINITY]],
235+ // CHECK-SAME: %[[WAIT_FENCE]], %[[SIGNAL_FENCE]],
236+ // CHECK-SAME: %[[SOURCE_BUFFER]], %[[SOURCE_OFFSET]],
237+ // CHECK-SAME: %[[TARGET_BUFFER]], %[[TARGET_OFFSET]],
238+ // CHECK-SAME: %[[LENGTH]], %[[FLAGS]])
239+ hal.device.queue. update <%device : !hal.device >
240+ affinity (%affinity )
241+ wait (%wait_fence ) signal (%signal_fence )
242+ source (%source_buffer : !util.buffer )[%source_offset ]
243+ target (%target_buffer : !hal.buffer )[%target_offset ]
244+ length (%length )
245+ flags (0 )
246+ util.return
247+ }
248+
249+ // -----
250+
251+ // CHECK-LABEL: @device_queue_copy
252+ util.func public @device_queue_copy (
253+ // CHECK-SAME: (%[[DEVICE:.+]]: !vm.ref<!hal.device>, %[[AFFINITY:.+]]: i64,
254+ %device: !hal.device , %affinity: i64 ,
255+ // CHECK-SAME: %[[WAIT_FENCE:.+]]: !vm.ref<!hal.fence>, %[[SIGNAL_FENCE:.+]]: !vm.ref<!hal.fence>,
256+ %wait_fence: !hal.fence , %signal_fence: !hal.fence ,
257+ // CHECK-SAME: %[[SOURCE_BUFFER:.+]]: !vm.ref<!hal.buffer>,
258+ %source_buffer: !hal.buffer ,
259+ // CHECK-SAME: %[[TARGET_BUFFER:.+]]: !vm.ref<!hal.buffer>)
260+ %target_buffer: !hal.buffer ) {
261+ // CHECK-DAG: %[[SOURCE_OFFSET:.+]] = vm.const.i64 100
262+ %source_offset = arith.constant 100 : index
263+ // CHECK-DAG: %[[TARGET_OFFSET:.+]] = vm.const.i64 200
264+ %target_offset = arith.constant 200 : index
265+ // CHECK-DAG: %[[LENGTH:.+]] = vm.const.i64 300
266+ %length = arith.constant 300 : index
267+ // CHECK-DAG: %[[FLAGS:.+]] = vm.const.i64.zero
268+ // CHECK: vm.call @hal.device.queue.copy(
269+ // CHECK-SAME: %[[DEVICE]], %[[AFFINITY]],
270+ // CHECK-SAME: %[[WAIT_FENCE]], %[[SIGNAL_FENCE]],
271+ // CHECK-SAME: %[[SOURCE_BUFFER]], %[[SOURCE_OFFSET]],
272+ // CHECK-SAME: %[[TARGET_BUFFER]], %[[TARGET_OFFSET]],
273+ // CHECK-SAME: %[[LENGTH]], %[[FLAGS]])
274+ hal.device.queue. copy <%device : !hal.device >
275+ affinity (%affinity )
276+ wait (%wait_fence ) signal (%signal_fence )
277+ source (%source_buffer : !hal.buffer )[%source_offset ]
278+ target (%target_buffer : !hal.buffer )[%target_offset ]
279+ length (%length )
280+ flags (0 )
281+ util.return
282+ }
283+
284+ // -----
285+
144286// CHECK-LABEL: @device_queue_read
145287util.func public @device_queue_read (
146288 // CHECK-SAME: (%[[DEVICE:.+]]: !vm.ref<!hal.device>, %[[AFFINITY:.+]]: i64,
0 commit comments