This patch adds support for tiling operations that implement the TilingInterface.
- It separates the loop constructs that are used to iterate over tile from the implementation of the tiling itself. For example, the use of destructive updates is more related to use of scf.for for iterating over tiles that are tensors.
- To test the transformation, TilingInterface is implemented for LinalgOps. The separation of the looping constructs used from the implementation of tile code generation greatly simplifies the latter.
- The implementation of TilingInterface for LinalgOp is kept as an external model for now till this approach can be fully flushed out to replace the existing tiling + fusion approaches in Linalg.
I don't think these belong to the interface but they are rather transform configuration objects.
Can these move to the same place as TileUsingSCFForOp for now and be generalized on a per-need basis?