@@ -261,3 +261,87 @@ llvm.func @llvm.store(%a: !llvm.ptr<1>, %val: i32) {
261
261
llvm.store %val , %a {cache_control =#xevm.store_cache_control <L1wt_L2uc_L3wb >} : i32 , !llvm.ptr <1 >
262
262
llvm.return
263
263
}
264
+
265
+ // -----
266
+ // CHECK-LABEL: llvm.func spir_funccc @_Z30intel_sub_group_block_read_us8PU3AS1t
267
+ // CHECK: llvm.func @blockload_as1(%[[ARG0:.*]]: !llvm.ptr<1>)
268
+ llvm.func @blockload_as1 (%ptr: !llvm.ptr <1 >) -> vector <8 xi16 > {
269
+ // CHECK: %[[VAR0:.*]] = llvm.call spir_funccc @_Z30intel_sub_group_block_read_us8PU3AS1t(%[[ARG0]])
270
+ // CHECK-SAME: {function_type = !llvm.func<vector<8xi16> (ptr<1>)>, linkage = #llvm.linkage<external>,
271
+ // CHECK-SAME: no_unwind, sym_name = "_Z30intel_sub_group_block_read_us8PU3AS1t",
272
+ // CHECK-SAME: visibility_ = 0 : i64, will_return, xevm.DecorationCacheControl =
273
+ // CHECK-SAME: [6442 : i32, 0 : i32, 1 : i32, 0 : i32],
274
+ // CHECK-SAME: [6442 : i32, 1 : i32, 1 : i32, 0 : i32]
275
+ %loaded_a = xevm.blockload %ptr <{cache_control =#xevm.load_cache_control <L1uc_L2uc_L3uc >}> : (!llvm.ptr <1 >) -> vector <8 xi16 >
276
+ llvm.return %loaded_a : vector <8 xi16 >
277
+ }
278
+
279
+ // -----
280
+ // CHECK-LABEL: llvm.func spir_funccc @_Z31intel_sub_group_block_read_uc16PU3AS3h(!llvm.ptr<3>)
281
+ // CHECK: llvm.func @blockload_as3(%[[ARG0:.*]]: !llvm.ptr<3>)
282
+ llvm.func @blockload_as3 (%ptr: !llvm.ptr <3 >) -> vector <16 xi8 > {
283
+ // CHECK: %[[VAR0:.*]] = llvm.call spir_funccc @_Z31intel_sub_group_block_read_uc16PU3AS3h(%[[ARG0]])
284
+ // CHECK-SAME: {function_type = !llvm.func<vector<16xi8> (ptr<3>)>, linkage = #llvm.linkage<external>,
285
+ // CHECK-SAME: no_unwind, sym_name = "_Z31intel_sub_group_block_read_uc16PU3AS3h", visibility_ = 0 : i64,
286
+ // CHECK-SAME: will_return, xevm.DecorationCacheControl =
287
+ // CHECK-SAME: [6442 : i32, 0 : i32, 1 : i32, 0 : i32],
288
+ // CHECK-SAME: [6442 : i32, 1 : i32, 1 : i32, 0 : i32]
289
+ %loaded_a = xevm.blockload %ptr <{cache_control =#xevm.load_cache_control <L1uc_L2uc_L3uc >}> : (!llvm.ptr <3 >) -> vector <16 xi8 >
290
+ llvm.return %loaded_a : vector <16 xi8 >
291
+ }
292
+
293
+ // -----
294
+ // CHECK-LABEL: llvm.func spir_funccc @_Z29intel_sub_group_block_read_ucPU3AS3h(!llvm.ptr<3>)
295
+ // CHECK: llvm.func @blockload_scalar(%[[ARG0:.*]]: !llvm.ptr<3>)
296
+ llvm.func @blockload_scalar (%ptr: !llvm.ptr <3 >) -> i8 {
297
+ // CHECK: %[[VAR0:.*]] = llvm.call spir_funccc @_Z29intel_sub_group_block_read_ucPU3AS3h(%[[ARG0]])
298
+ // CHECK-SAME: {function_type = !llvm.func<i8 (ptr<3>)>, linkage = #llvm.linkage<external>,
299
+ // CHECK-SAME: no_unwind, sym_name = "_Z29intel_sub_group_block_read_ucPU3AS3h", visibility_ = 0 : i64,
300
+ // CHECK-SAME: will_return, xevm.DecorationCacheControl =
301
+ // CHECK-SAME: [6442 : i32, 0 : i32, 1 : i32, 0 : i32],
302
+ // CHECK-SAME: [6442 : i32, 1 : i32, 1 : i32, 0 : i32]
303
+ %loaded_a = xevm.blockload %ptr <{cache_control =#xevm.load_cache_control <L1uc_L2uc_L3uc >}> : (!llvm.ptr <3 >) -> i8
304
+ llvm.return %loaded_a : i8
305
+ }
306
+
307
+ // -----
308
+ // CHECK-LABEL: llvm.func spir_funccc @_Z31intel_sub_group_block_write_ui8PU3AS1jDv8_j
309
+ // CHECK: llvm.func @blockstore_as1(%[[ARG0:.*]]: !llvm.ptr<1>, %[[ARG1:.*]]: vector<8xi32>) {
310
+ llvm.func @blockstore_as1 (%ptr: !llvm.ptr <1 >, %data: vector <8 xi32 >) {
311
+ // CHECK: llvm.call spir_funccc @_Z31intel_sub_group_block_write_ui8PU3AS1jDv8_j(%[[ARG0]], %[[ARG1]])
312
+ // CHECK-SAME: {function_type = !llvm.func<void (ptr<1>, vector<8xi32>)>, linkage = #llvm.linkage<external>,
313
+ // CHECK-SAME: no_unwind, sym_name = "_Z31intel_sub_group_block_write_ui8PU3AS1jDv8_j", visibility_ = 0 : i64,
314
+ // CHECK-SAME: will_return, xevm.DecorationCacheControl =
315
+ // CHECK-SAME: [6443 : i32, 0 : i32, 2 : i32, 0 : i32],
316
+ // CHECK-SAME: [6443 : i32, 1 : i32, 2 : i32, 0 : i32]
317
+ xevm.blockstore %ptr , %data <{cache_control =#xevm.store_cache_control <L1wt_L2uc_L3wb >}> : (!llvm.ptr <1 >, vector <8 xi32 >)
318
+ llvm.return
319
+ }
320
+
321
+ // -----
322
+ // CHECK-LABEL: llvm.func spir_funccc @_Z31intel_sub_group_block_write_ul2PU3AS3mDv2_m
323
+ // CHECK: llvm.func @blockstore_as3(%[[ARG0:.*]]: !llvm.ptr<3>, %[[ARG1:.*]]: vector<2xi64>) {
324
+ llvm.func @blockstore_as3 (%ptr: !llvm.ptr <3 >, %data: vector <2 xi64 >) {
325
+ // CHECK: llvm.call spir_funccc @_Z31intel_sub_group_block_write_ul2PU3AS3mDv2_m(%[[ARG0]], %[[ARG1]])
326
+ // CHECK-SAME: {function_type = !llvm.func<void (ptr<3>, vector<2xi64>)>, linkage = #llvm.linkage<external>,
327
+ // CHECK-SAME: no_unwind, sym_name = "_Z31intel_sub_group_block_write_ul2PU3AS3mDv2_m", visibility_ = 0 : i64,
328
+ // CHECK-SAME: will_return, xevm.DecorationCacheControl =
329
+ // CHECK-SAME: [6443 : i32, 0 : i32, 2 : i32, 0 : i32],
330
+ // CHECK-SAME: [6443 : i32, 1 : i32, 2 : i32, 0 : i32]
331
+ xevm.blockstore %ptr , %data <{cache_control =#xevm.store_cache_control <L1wt_L2uc_L3wb >}> : (!llvm.ptr <3 >, vector <2 xi64 >)
332
+ llvm.return
333
+ }
334
+
335
+ // -----
336
+ // CHECK-LABEL: llvm.func spir_funccc @_Z30intel_sub_group_block_write_ulPU3AS3mm
337
+ // CHECK: llvm.func @blockstore_scalar(%[[ARG0:.*]]: !llvm.ptr<3>, %[[ARG1:.*]]: i64) {
338
+ llvm.func @blockstore_scalar (%ptr: !llvm.ptr <3 >, %data: i64 ) {
339
+ // CHECK: llvm.call spir_funccc @_Z30intel_sub_group_block_write_ulPU3AS3mm(%[[ARG0]], %[[ARG1]])
340
+ // CHECK-SAME: {function_type = !llvm.func<void (ptr<3>, i64)>, linkage = #llvm.linkage<external>,
341
+ // CHECK-SAME: no_unwind, sym_name = "_Z30intel_sub_group_block_write_ulPU3AS3mm", visibility_ = 0 : i64,
342
+ // CHECK-SAME: will_return, xevm.DecorationCacheControl =
343
+ // CHECK-SAME: [6443 : i32, 0 : i32, 2 : i32, 0 : i32],
344
+ // CHECK-SAME: [6443 : i32, 1 : i32, 2 : i32, 0 : i32]
345
+ xevm.blockstore %ptr , %data <{cache_control =#xevm.store_cache_control <L1wt_L2uc_L3wb >}> : (!llvm.ptr <3 >, i64 )
346
+ llvm.return
347
+ }
0 commit comments