| # Transform Dialect Tutorial |
| |
| MLIR supports declarative specification for controlling compiler transformations |
| via the transform dialect. It allows one to request compiler transformations |
| using compiler IR itself, which can be embedded into the original IR that is |
| being transformed (similarly to pragmas) or supplied separately (similarly to |
| scheduling languages). This tutorial presents the concepts of the MLIR transform |
| dialect and related infrastructure. It will be accompanied by a practical |
| demonstration of three use scenarios: |
| |
| - Composing Transform dialect operations available in (upstream) MLIR to perform |
| a sequence of optimizing transformations that results in efficient code for an |
| MLIR linear algebra operation. |
| - Defining new Transform dialect operations and adapting existing transformation |
| code to work with the Transform dialect infrastructure. |
| - Setting up and using the Transform dialect infrastructure in a downstream |
| out-of-tree project with custom dialects, transformations and passes. |
| |
| After following the tutorial, one will be able to apply the Transform dialect in |
| their work and extend it when necessary. Basic familiarity with MLIR is a |
| prerequisite. See [Toy tutorial](../Toy) for introduction to MLIR. |
| |
| The tutorial is divided into the following chapters. |
| |
| - [Chapter #0](Ch0.md): A Primer on “Structured” Linalg Operations |
| - [Chapter #1](Ch1.md): Combining Existing Transformations |
| - [Chapter #2](Ch2.md): Adding a Simple New Transformation Operation |
| - [Chapter #3](Ch3.md): More than Simple Transform Operations |
| - [Chapter #4](Ch4.md): Matching Payload with Transform Operations |
| - [Chapter H](ChH.md): Reproducing Halide Schedule |
| |
| The code corresponding to this tutorial is located under |
| `mlir/Examples/transform` and the corresponding tests in |
| `mlir/test/Examples/transform`. |