1aa2a96a2SMaheshRavishankar//===- TestTilingInterfaceTransformOps.td -----------------*- tablegen -*-===// 2aa2a96a2SMaheshRavishankar// 3aa2a96a2SMaheshRavishankar// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4aa2a96a2SMaheshRavishankar// See https://llvm.org/LICENSE.txt for license information. 5aa2a96a2SMaheshRavishankar// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6aa2a96a2SMaheshRavishankar// 7aa2a96a2SMaheshRavishankar//===----------------------------------------------------------------------===// 8aa2a96a2SMaheshRavishankar 9aa2a96a2SMaheshRavishankar#ifndef TEST_TILINGINTERFACE_TRANSFORM_OPS 10aa2a96a2SMaheshRavishankar#define TEST_TILINGINTERFACE_TRANSFORM_OPS 11aa2a96a2SMaheshRavishankar 12aa2a96a2SMaheshRavishankarinclude "mlir/Dialect/SCF/IR/DeviceMappingInterface.td" 13aa2a96a2SMaheshRavishankarinclude "mlir/Dialect/Transform/IR/TransformDialect.td" 145a9bdd85SOleksandr "Alex" Zinenkoinclude "mlir/Dialect/Transform/Interfaces/TransformInterfaces.td" 15aa2a96a2SMaheshRavishankarinclude "mlir/Dialect/Transform/IR/TransformTypes.td" 16aa2a96a2SMaheshRavishankarinclude "mlir/Interfaces/SideEffectInterfaces.td" 17aa2a96a2SMaheshRavishankarinclude "mlir/IR/OpBase.td" 18aa2a96a2SMaheshRavishankar 19aa2a96a2SMaheshRavishankar// Those operations in this file are meant for testing the tiling interface 20aa2a96a2SMaheshRavishankar// transformations using scf operations. Over time these testing options 21aa2a96a2SMaheshRavishankar// might be useful transformations in their own right. Move these over 22aa2a96a2SMaheshRavishankar// as transform ops in the main repo (also find a proper place for them) 23aa2a96a2SMaheshRavishankar 24aa2a96a2SMaheshRavishankardef TestFuseAndYieldOp : Op<Transform_Dialect, "test.fuse_and_yield", 25aa2a96a2SMaheshRavishankar [FunctionalStyleTransformOpTrait, MemoryEffectsOpInterface, 26aa2a96a2SMaheshRavishankar DeclareOpInterfaceMethods<TransformOpInterface>, 27aa2a96a2SMaheshRavishankar ReportTrackingListenerFailuresOpTrait]> { 28aa2a96a2SMaheshRavishankar let description = [{ 29aa2a96a2SMaheshRavishankar Tiles the operations pointed to by the target handle, fuses their 30aa2a96a2SMaheshRavishankar producers greedily using the options provided as attributes. 31aa2a96a2SMaheshRavishankar It also yields some of the fused producers for testing. 32aa2a96a2SMaheshRavishankar 33aa2a96a2SMaheshRavishankar On success returns the tiled operations as well as generated loops. Emits 34aa2a96a2SMaheshRavishankar a definite failure if tiling fails. 35aa2a96a2SMaheshRavishankar }]; 36aa2a96a2SMaheshRavishankar 37aa2a96a2SMaheshRavishankar let arguments = 38aa2a96a2SMaheshRavishankar (ins TransformHandleTypeInterface:$target, 39aa2a96a2SMaheshRavishankar DefaultValuedAttr<I64ArrayAttr, "{}">:$tile_sizes, 4076ead96cSMaheshRavishankar DefaultValuedAttr<I64ArrayAttr, "{}">:$tile_interchange, 4176ead96cSMaheshRavishankar DefaultValuedAttr<BoolAttr, "false">:$use_forall); 42aa2a96a2SMaheshRavishankar let results = (outs TransformHandleTypeInterface:$transfomed, 43aa2a96a2SMaheshRavishankar Variadic<TransformHandleTypeInterface>:$loops); 44aa2a96a2SMaheshRavishankar 45aa2a96a2SMaheshRavishankar let assemblyFormat = [{ 46aa2a96a2SMaheshRavishankar $target ($tile_sizes^)? (`interchange` $tile_interchange^)? 4776ead96cSMaheshRavishankar (`use_forall` $use_forall^)? attr-dict 4876ead96cSMaheshRavishankar `:` functional-type(operands, results) 49aa2a96a2SMaheshRavishankar }]; 50aa2a96a2SMaheshRavishankar} 51aa2a96a2SMaheshRavishankar 522b2ce50fSAbhishek Varmadef TestFuseConsumerOp : Op<Transform_Dialect, "test.fuse_consumer", 532b2ce50fSAbhishek Varma [DeclareOpInterfaceMethods<TransformOpInterface>, 542b2ce50fSAbhishek Varma DeclareOpInterfaceMethods<MemoryEffectsOpInterface>, 552b2ce50fSAbhishek Varma ReportTrackingListenerFailuresOpTrait]> { 562b2ce50fSAbhishek Varma let description = [{ 572b2ce50fSAbhishek Varma Fuses the consumer of the operation pointed to by the target handle 582b2ce50fSAbhishek Varma using the options provided as attributes. 592b2ce50fSAbhishek Varma }]; 602b2ce50fSAbhishek Varma 612b2ce50fSAbhishek Varma let arguments = 62*9bc3102bSYun-Fly (ins TransformHandleTypeInterface:$target, 63*9bc3102bSYun-Fly DefaultValuedAttr<I32Attr, "1">:$num_consumer_to_fuse); 642b2ce50fSAbhishek Varma let results = (outs TransformHandleTypeInterface:$consumer, 652b2ce50fSAbhishek Varma TransformHandleTypeInterface:$fused_consumer); 662b2ce50fSAbhishek Varma 672b2ce50fSAbhishek Varma let assemblyFormat = [{ 68*9bc3102bSYun-Fly $target (`num_consumer_to_fuse` `=` $num_consumer_to_fuse^)? 69*9bc3102bSYun-Fly attr-dict `:` functional-type(operands, results) 702b2ce50fSAbhishek Varma }]; 712b2ce50fSAbhishek Varma} 722b2ce50fSAbhishek Varma 73aa2a96a2SMaheshRavishankardef TestTileUsingForallOp : Op<Transform_Dialect, "test.tile_using_forall", 74aa2a96a2SMaheshRavishankar [DeclareOpInterfaceMethods<TransformOpInterface>, 75aa2a96a2SMaheshRavishankar DeclareOpInterfaceMethods<MemoryEffectsOpInterface>, 76aa2a96a2SMaheshRavishankar ReportTrackingListenerFailuresOpTrait]> { 77aa2a96a2SMaheshRavishankar let description = [{ 78aa2a96a2SMaheshRavishankar Test operation use to test tiling using TilingInterface and scf.forall for 79aa2a96a2SMaheshRavishankar the loop constructs. This is similar to 80aa2a96a2SMaheshRavishankar `transform.structured.tile_using_for`. Use of this operation is an 81aa2a96a2SMaheshRavishankar intermediate state and will be replaced in due course with either 82aa2a96a2SMaheshRavishankar `transform.structured.tile_using_for` or 83aa2a96a2SMaheshRavishankar `transform.structured.tile_using_forall`. 84aa2a96a2SMaheshRavishankar 85aa2a96a2SMaheshRavishankar On success returns the tiled operations as well as generated loops. Emits 86aa2a96a2SMaheshRavishankar a definite failure if tiling fails. 87aa2a96a2SMaheshRavishankar }]; 88aa2a96a2SMaheshRavishankar 89aa2a96a2SMaheshRavishankar let arguments = (ins TransformHandleTypeInterface:$target, 90aa2a96a2SMaheshRavishankar DefaultValuedAttr<I64ArrayAttr, "{}">:$tile_sizes, 91aa2a96a2SMaheshRavishankar DefaultValuedOptionalAttr<I64ArrayAttr, "{}">:$interchange, 92aa2a96a2SMaheshRavishankar OptionalAttr<DeviceMappingArrayAttr>:$mapping); 93aa2a96a2SMaheshRavishankar let results = (outs TransformHandleTypeInterface:$tiled_op, 94aa2a96a2SMaheshRavishankar Variadic<TransformHandleTypeInterface>:$loops); 95aa2a96a2SMaheshRavishankar 96aa2a96a2SMaheshRavishankar let assemblyFormat = [{ 9776ead96cSMaheshRavishankar $target ($tile_sizes^)? (`interchange` `=` $interchange^)? 9876ead96cSMaheshRavishankar (`mapping` `=` $mapping^)? 99aa2a96a2SMaheshRavishankar attr-dict `:` functional-type(operands, results) 100aa2a96a2SMaheshRavishankar }]; 101aa2a96a2SMaheshRavishankar} 102aa2a96a2SMaheshRavishankar 10376ead96cSMaheshRavishankardef TestFuseUsingForallOp : Op<Transform_Dialect, "test.fuse_using_forall", 10476ead96cSMaheshRavishankar [DeclareOpInterfaceMethods<TransformOpInterface>, 10576ead96cSMaheshRavishankar DeclareOpInterfaceMethods<MemoryEffectsOpInterface>, 10676ead96cSMaheshRavishankar ReportTrackingListenerFailuresOpTrait]> { 10776ead96cSMaheshRavishankar let description = [{ 10876ead96cSMaheshRavishankar Test operation to tile the operation pointed to by the target handle and 10976ead96cSMaheshRavishankar fuses their producers greedily using the options provided as attributes. 11076ead96cSMaheshRavishankar This operation uses scf.forall for the loop construct. 11176ead96cSMaheshRavishankar }]; 11276ead96cSMaheshRavishankar let arguments = (ins TransformHandleTypeInterface:$root_op, 11376ead96cSMaheshRavishankar DefaultValuedAttr<I64ArrayAttr, "{}">:$tile_sizes, 11476ead96cSMaheshRavishankar DefaultValuedOptionalAttr<I64ArrayAttr, "{}">:$interchange, 11576ead96cSMaheshRavishankar OptionalAttr<DeviceMappingArrayAttr>:$mapping); 11676ead96cSMaheshRavishankar let results = (outs TransformHandleTypeInterface:$tiled_ops, 11776ead96cSMaheshRavishankar Variadic<TransformHandleTypeInterface>:$loops); 11876ead96cSMaheshRavishankar 11976ead96cSMaheshRavishankar let assemblyFormat = [{ 12076ead96cSMaheshRavishankar $root_op ($tile_sizes^)? (`interchange` $interchange^)? 12176ead96cSMaheshRavishankar (`mapping` `=` $mapping^)? 12276ead96cSMaheshRavishankar attr-dict `:` functional-type(operands, results) 12376ead96cSMaheshRavishankar }]; 12476ead96cSMaheshRavishankar} 125aa2a96a2SMaheshRavishankar 126aa2a96a2SMaheshRavishankar#endif // TEST_TILINGINTERFACE_TRANSFORM_OPS 127