@@ -2286,6 +2286,67 @@ def two_elementwise_transformed_intermediate_buffer(a: T.handle, c: T.handle) ->
22862286 self , block , buffer_index , buffer_index_type_enum , axis_separators
22872287 )
22882288
2289+ @type_checked
2290+ def transform_block_layout (
2291+ self ,
2292+ block : BlockRV ,
2293+ index_map : Union [IndexMap , Callable ],
2294+ ) -> None :
2295+ """Apply a transformation represented by IndexMap to block
2296+
2297+ Parameters
2298+ ----------
2299+ block_rv : BlockRV
2300+ The block to be transformed
2301+
2302+ index_map : Union[IndexMap, Callable]
2303+ The transformation to apply.
2304+
2305+ Examples
2306+ --------
2307+
2308+ Before transform_block_layout, in TensorIR, the IR is:
2309+
2310+ .. code-block:: python
2311+
2312+ @T.prim_func
2313+ def before_transform_block_layout(
2314+ A: T.Buffer[(16, 16), "float32"],
2315+ B: T.Buffer[(16, 16), "float32"]
2316+ ) -> None:
2317+ for i, j in T.grid(16, 16):
2318+ with T.block("B"):
2319+ vi, vj = T.axis.remap("SS", [i, j])
2320+ B[vi, vj] = A[vi, vj] * 2.0
2321+
2322+ Create the schedule and do transform_block_layout:
2323+
2324+ .. code-block:: python
2325+
2326+ sch = tir.Schedule(before_transform_block_layout)
2327+ sch.transform_block_layout(sch.get_block("B"), lambda i, j: (i * 16 + j,))
2328+ print(sch.mod["main"].script())
2329+
2330+ After applying transform_block_layout, the IR becomes:
2331+
2332+ .. code-block:: python
2333+
2334+ @T.prim_func
2335+ def after_transform_block_layout(
2336+ A: T.Buffer[(16, 16), "float32"],
2337+ B: T.Buffer[(16, 16), "float32"]
2338+ ) -> None:
2339+ for i in range(256):
2340+ with T.block("B"):
2341+ vi, = T.axis.remap("S", [i])
2342+ B[vi // 16, vi % 16] = A[vi // 16, vi % 16] * 2.0
2343+ """
2344+ if callable (index_map ):
2345+ index_map = IndexMap .from_func (index_map )
2346+ _ffi_api .ScheduleTransformBlockLayout ( # type: ignore # pylint: disable=no-member
2347+ self , block , index_map
2348+ )
2349+
22892350 @type_checked
22902351 def set_axis_separator (
22912352 self ,
0 commit comments