@@ -261,3 +261,87 @@ llvm.func @llvm.store(%a: !llvm.ptr<1>, %val: i32) {
261261 llvm.store %val , %a {cache_control =#xevm.store_cache_control <L1wt_L2uc_L3wb >} : i32 , !llvm.ptr <1 >
262262 llvm.return
263263}
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