class_docstr: Main functionality test
  
  A new block should be inserted to transform the layout, with the
  compute block operating on the temporary transformed buffer.
code: def expected(
      A: T.Buffer((16, 16), "float32"),
      B: T.Buffer((16, 16), "float32"),
      C: T.Buffer((16, 16), "float32"),
  ) -> None:
      T.func_attr({"layout_free_buffers": [1]})
      B_reindex = T.alloc_buffer([16, 4, 4], dtype="float32")
      for ax0, ax1 in T.grid(16, 16):
          with T.block("layout_rewrite"):
              i0, i1 = T.axis.remap("SS", [ax0, ax1])
              T.block_attr(
                  {"meta_schedule.layout_rewrite_preproc": True}
              )
              B_reindex[i1, i0 // 4, i0 % 4] = B[i0, i1]
      for i0, j, k0, i1, k1 in T.grid(4, 16, 4, 4, 4):
          with T.block("matmul"):
              vi = T.axis.spatial(16, i0 * 4 + i1)
              vj = T.axis.spatial(16, j)
              vk = T.axis.reduce(16, k0 * 4 + k1)
              with T.init():
                  C[vi, vj] = T.float32(0)
              C[vi, vj] = (
                  C[vi, vj] + A[vi, vk] * B_reindex[vj, vk // 4, vk % 4]
              )
  
imports: import tvm
  import tvm.testing
  from tvm import meta_schedule
  from tvm.script import tir
  from tvm.target import Target
  from tvm.tir.schedule.testing import assert_structural_equal_ignore_global_symbol
label_desc: Use image node_id 2 for calling the TestTIRMatmul obj's underlying member method code with example usage: obj.expected(A, B, C) without return types