forked from OSchip/llvm-project
ff6e5508d6
Introduce a new transformation on structured ops that splits the iteration space into two parts along the specified dimension. The index at which the splitting happens may be static or dynamic. This transformation can be seen as a rudimentary form of index-set splitting that only supports the splitting along hyperplanes parallel to the iteration space hyperplanes, and is therefore decomposable into per-dimension application. It is a key low-level transformation that enables independent scheduling for different parts of the iteration space of the same op, which hasn't been possible previously. It may be used to implement, e.g., multi-sized tiling. In future, peeling can be implemented as a combination of split-off amount computation and splitting. The transformation is conceptually close to tiling in its separation of the iteration and data spaces, but cannot be currently implemented on top of TilingInterface as the latter does not properly support `linalg.index` offsetting. Note that the transformation intentionally bypasses folding of `tensor.extract_slice` operations when creating them as this folding was found to prevent repeated splitting of the same operation because due to internal assumptions about extract/insert_slice combination in dialect utilities. Reviewed By: nicolasvasilache Differential Revision: https://reviews.llvm.org/D129090 |
||
---|---|---|
.. | ||
Bindings/Python | ||
Dialect | ||
AffineExpr.h | ||
AffineMap.h | ||
BuiltinAttributes.h | ||
BuiltinTypes.h | ||
Conversion.h | ||
Debug.h | ||
Diagnostics.h | ||
ExecutionEngine.h | ||
IR.h | ||
IntegerSet.h | ||
Interfaces.h | ||
Pass.h | ||
Registration.h | ||
Support.h | ||
Transforms.h |