Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[mlir] Add an interface to allow operations to specify how they can b…
…e tiled. An interface to allow for tiling of operations is introduced. The tiling of the linalg.pad_tensor operation is modified to use this interface. Differential Revision: https://reviews.llvm.org/D108611
- Loading branch information
MaheshRavishankar
committed
Aug 30, 2021
1 parent
3fefeba
commit ba72cfe
Showing
14 changed files
with
460 additions
and
241 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
//===- TilingInterface.h - Interface for tiling operations ------*- C++ -*-===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// This file contains the definitions of the TilingInterface defined in | ||
// `TilingInterface.td`. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef MLIR_INTERFACES_TILINGINTERFACE_H_ | ||
#define MLIR_INTERFACES_TILINGINTERFACE_H_ | ||
|
||
#include "mlir/IR/Builders.h" | ||
#include "mlir/IR/BuiltinTypes.h" | ||
#include "mlir/IR/Operation.h" | ||
#include "mlir/Interfaces/ViewLikeInterface.h" | ||
#include "mlir/Support/LLVM.h" | ||
|
||
/// Include the ODS generated interface header files. | ||
#include "mlir/Interfaces/TilingInterface.h.inc" | ||
|
||
#endif // MLIR_INTERFACES_TILINGINTERFACE_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
//===- TilingInterface.td - Interface for tiling operations *- tablegen -*-===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// This file contains an interface to allow operations to generate a tiled | ||
// implementation of themselves. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef MLIR_TILINGINTERFACE | ||
#define MLIR_TILINGINTERFACE | ||
|
||
include "mlir/IR/OpBase.td" | ||
|
||
def TilingInterface : OpInterface<"TilingInterface"> { | ||
let description = [{ | ||
Interface for allowing operations to expose information needed to | ||
tile them (similar to LinalgOp, but without having access to | ||
indexing maps) | ||
}]; | ||
let cppNamespace = "::mlir"; | ||
let methods = [ | ||
InterfaceMethod< | ||
/*desc=*/[{ | ||
Returns a list of operands into which the result of the | ||
tiled implementation is written into. With `tensor` | ||
operands, this will be used as the initial tensor into which | ||
the tiled results are inserted into. With `memref` operands, | ||
this will be the operand into which the result of the tiled | ||
operation is written into. | ||
}], | ||
/*retType=*/"SmallVector<Value>", | ||
/*methodName=*/"getDestinationOperands", | ||
/*args=*/(ins "OpBuilder &":$b), | ||
/*methodBody=*/"", | ||
/*defaultImplementation=*/"return ValueRange{};" | ||
>, | ||
InterfaceMethod< | ||
/*desc=*/[{ | ||
Returns a list of `StringRef`s that describe the number of | ||
loops and the iterator types of the operation. The list is | ||
expected to use | ||
`getParallelIteratorTypeName()`/`getReductionIteratorTypeName()` | ||
from MLIR Structured Op Utils. | ||
}], | ||
/*retType=*/"SmallVector<StringRef>", | ||
/*methodName=*/"getLoopIteratorTypes" | ||
>, | ||
InterfaceMethod< | ||
/*desc=*/[{ | ||
Returns a list of ranges that describe the loop bounds and | ||
step for the loops of the operation. | ||
}], | ||
/*retTy=*/"SmallVector<Range>", | ||
/*methodName=*/"getLoopBounds", | ||
/*args=*/(ins "OpBuilder &":$b) | ||
>, | ||
InterfaceMethod< | ||
/*desc=*/[{ | ||
Method to generate the tiled implementation of an operation. | ||
|
||
The iteration space of the operation is returned by | ||
`getLoopBounds`. The caller provides the information of the | ||
tile within this iteration space whose implementation the | ||
caller needs. | ||
- `dest` are the Value into which the result of the tiled | ||
operation is to be inserted into. The type of the `dest` | ||
Values is same as the types returned by | ||
`getDestinationOperands` method. | ||
- `offsets` provides the offset of the tile within the | ||
iteration space | ||
- `sizes` provides the size of the tile. | ||
|
||
The method returns the operation that is the tiled | ||
implementation. | ||
}], | ||
/*retType=*/"Operation *", | ||
/*methodName=*/"getTiledImplementation", | ||
/*args=*/(ins | ||
"OpBuilder &":$b, | ||
"ValueRange ":$dest, | ||
"ArrayRef<OpFoldResult> ":$offsets, | ||
"ArrayRef<OpFoldResult> ":$sizes), | ||
/*methodBody=*/"", | ||
/*defaultImplementation=*/[{ | ||
return nullptr; | ||
}] | ||
> | ||
]; | ||
} | ||
#endif // MLIR_TILINGINTERFACE |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.