@@ -34,6 +34,42 @@ func.func @set_pad_encoding_and_store() {
3434
3535// -----
3636
37+ // This tests that the padding resolver can handle partial loads/stores. The
38+ // offsets, sizes and strides are arbitrarily chosen in the test.
39+ // TODO(#20160): Move the test case to materialize_encoding_for_iree_ops.mlir.
40+
41+ #binding_ro = #hal.pipeline.binding <storage_buffer , " ReadOnly|Indirect" >
42+ #binding = #hal.pipeline.binding <storage_buffer , Indirect >
43+ #encoding_mmt = #iree_encoding.encoding <operand_index = 0 : index , op_type = matmul , element_types = [f16 , f16 , f16 ]>
44+ #pad_encoding = #iree_encoding.layout <[#iree_encoding.padding <[0 , 64 ]>]>
45+ func.func @set_pad_encoding_and_partial_load_store () {
46+ %c0 = arith.constant 0 : index
47+ %0 = hal.interface.constant.load layout (<constants = 1 , bindings = [#binding_ro , #binding ], flags = Indirect >) ordinal (0 ) : i32
48+ %1 = arith.index_castui %0 : i32 to index
49+ %3 = hal.interface.binding.subspan layout (<constants = 1 , bindings = [#binding_ro , #binding ], flags = Indirect >) binding (0 ) alignment (64 ) offset (%1 ) flags (" ReadOnly|Indirect" )
50+ : !iree_tensor_ext.dispatch.tensor <readonly :tensor <2048 x2048 xf16 >>
51+ %4 = hal.interface.binding.subspan layout (<constants = 1 , bindings = [#binding_ro , #binding ], flags = Indirect >) binding (1 ) alignment (64 ) offset (%c0 ) flags (Indirect )
52+ : !iree_tensor_ext.dispatch.tensor <writeonly :tensor <2048 x2048 xf16 , #pad_encoding >>
53+ %5 = iree_tensor_ext.dispatch.tensor.load %3 , offsets = [0 , 0 ], sizes = [1024 , 1024 ], strides = [2 , 2 ]
54+ : !iree_tensor_ext.dispatch.tensor <readonly :tensor <2048 x2048 xf16 >> -> tensor <1024 x1024 xf16 >
55+ %6 = iree_encoding.set_encoding %5 : tensor <1024 x1024 xf16 > -> tensor <1024 x1024 xf16 , #encoding_mmt >
56+ iree_tensor_ext.dispatch.tensor.store %6 , %4 , offsets = [0 , 0 ], sizes = [1024 , 1024 ], strides = [2 , 2 ]
57+ : tensor <1024 x1024 xf16 , #encoding_mmt > -> !iree_tensor_ext.dispatch.tensor <writeonly :tensor <2048 x2048 xf16 , #pad_encoding >>
58+ return
59+ }
60+
61+ // CHECK-LABEL: @set_pad_encoding_and_partial_load_store
62+ // CHECK: %[[A:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(0)
63+ // CHECK-SAME: !iree_tensor_ext.dispatch.tensor<readonly:tensor<2048x2048xf16>>
64+ // CHECK: %[[B:.+]] = hal.interface.binding.subspan layout({{.+}}) binding(1)
65+ // CHECK-SAME: !iree_tensor_ext.dispatch.tensor<writeonly:tensor<2048x2112xf16>>
66+ // CHECK: %[[LD:.+]] = iree_tensor_ext.dispatch.tensor.load %[[A]], offsets = [0, 0], sizes = [1024, 1024], strides = [2, 2]
67+ // CHECK-SAME: !iree_tensor_ext.dispatch.tensor<readonly:tensor<2048x2048xf16>> -> tensor<1024x1024xf16>
68+ // CHECK: iree_tensor_ext.dispatch.tensor.store %[[LD]], %[[B]], offsets = [0, 0], sizes = [1024, 1024], strides = [2, 2]
69+ // CHECK-SAME: tensor<1024x1024xf16> -> !iree_tensor_ext.dispatch.tensor<writeonly:tensor<2048x2112xf16>>
70+
71+ // -----
72+
3773#binding_ro = #hal.pipeline.binding <storage_buffer , " ReadOnly|Indirect" >
3874#binding = #hal.pipeline.binding <storage_buffer , Indirect >
3975#encoding_mmt = #iree_encoding.encoding <operand_index = 0 : index , op_type = matmul , element_types = [f16 , f16 , f16 ]>
0 commit comments