9#ifndef MLIR_DIALECT_LINALG_IR_LINALG_H
10#define MLIR_DIALECT_LINALG_IR_LINALG_H
25#include "llvm/ADT/STLFunctionalExtras.h"
62 MLIRContext *context);
67 MLIRContext *context);
70SmallVector<AffineExpr, 4>
concat(ArrayRef<AffineExpr> a,
71 ArrayRef<AffineExpr>
b);
93#include "mlir/Dialect/Linalg/IR/LinalgOpsEnums.h.inc"
113#define GET_ATTRDEF_CLASSES
114#include "mlir/Dialect/Linalg/IR/LinalgOpsAttrDefs.h.inc"
126#define GET_OP_CLASSES
127#include "mlir/Dialect/Linalg/IR/LinalgOps.h.inc"
129#define GET_OP_CLASSES
130#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.h.inc"
132#define GET_OP_CLASSES
133#include "mlir/Dialect/Linalg/IR/LinalgRelayoutOps.h.inc"
139template <
typename OpTy,
140 typename = std::enable_if_t<std::is_same_v<OpTy, linalg::PackOp> ||
141 std::is_same_v<OpTy, linalg::UnPackOp>>>
164 using MatmulOp::MatmulOp;
177 static void build(OpBuilder &builder, OperationState &
result,
180 ArrayRef<NamedAttribute> attributes = {});
182 static MatmulTransposeAOp
create(OpBuilder &builder, Location location,
185 ArrayRef<NamedAttribute> attributes = {});
188 static void build(OpBuilder &builder, OperationState &
result,
191 ArrayRef<NamedAttribute> attributes = {});
193 static MatmulTransposeAOp
create(OpBuilder &builder, Location location,
197 ArrayRef<NamedAttribute> attributes = {});
202 static bool classof(Operation *op);
211 using MatmulOp::MatmulOp;
224 static void build(OpBuilder &builder, OperationState &
result,
227 ArrayRef<NamedAttribute> attributes = {});
229 static MatmulTransposeBOp
create(OpBuilder &builder, Location location,
232 ArrayRef<NamedAttribute> attributes = {});
235 static void build(OpBuilder &builder, OperationState &
result,
238 ArrayRef<NamedAttribute> attributes = {});
240 static MatmulTransposeBOp
create(OpBuilder &builder, Location location,
244 ArrayRef<NamedAttribute> attributes = {});
249 static bool classof(Operation *op);
259 using BatchMatmulOp::BatchMatmulOp;
267 static BatchMatmulTransposeAOp
272 static void build(OpBuilder &builder, OperationState &
result,
275 ArrayRef<NamedAttribute> attributes = {});
277 static BatchMatmulTransposeAOp
278 create(OpBuilder &builder, Location location,
TypeRange resultTensorTypes,
280 ArrayRef<NamedAttribute> attributes = {});
283 static void build(OpBuilder &builder, OperationState &
result,
286 ArrayRef<NamedAttribute> attributes = {});
288 static BatchMatmulTransposeAOp
289 create(OpBuilder &builder, Location location,
TypeRange resultTensorTypes,
291 ArrayRef<NamedAttribute> attributes = {});
296 static bool classof(Operation *op);
306 using BatchMatmulOp::BatchMatmulOp;
314 static BatchMatmulTransposeBOp
319 static void build(OpBuilder &builder, OperationState &
result,
322 ArrayRef<NamedAttribute> attributes = {});
324 static BatchMatmulTransposeBOp
325 create(OpBuilder &builder, Location location,
TypeRange resultTensorTypes,
327 ArrayRef<NamedAttribute> attributes = {});
330 static void build(OpBuilder &builder, OperationState &
result,
333 ArrayRef<NamedAttribute> attributes = {});
335 static BatchMatmulTransposeBOp
336 create(OpBuilder &builder, Location location,
TypeRange resultTensorTypes,
338 ArrayRef<NamedAttribute> attributes = {});
343 static bool classof(Operation *op);
This class defines the main interface for locations in MLIR and acts as a non-nullable wrapper around...
This class helps build Operations.
static TypeID get()
Construct a type info object for the given type T.
This class provides an abstraction over the different types of ranges over Values.
Specialization of linalg.batch_matmul op that has a transpose map on A.
static bool isDefaultIndexingMaps(Attribute attr)
Checks if the affine map is the expected one for this operation.
static bool classof(Operation *op)
static void build(OpBuilder &builder, OperationState &result, ValueRange inputs, ValueRange outputs, ArrayRef< NamedAttribute > attributes={})
Build a transpose A matmul.
static BatchMatmulTransposeAOp create(OpBuilder &builder, Location location, ValueRange inputs, ValueRange outputs, ArrayRef< NamedAttribute > attributes={})
::mlir::TypeID resolveTypeID()
Specialization of linalg.batch_matmul op that has a transpose map on B.
static void build(OpBuilder &builder, OperationState &result, ValueRange inputs, ValueRange outputs, ArrayRef< NamedAttribute > attributes={})
Build a transpose B matmul.
::mlir::TypeID resolveTypeID()
static bool classof(Operation *op)
static BatchMatmulTransposeBOp create(OpBuilder &builder, Location location, ValueRange inputs, ValueRange outputs, ArrayRef< NamedAttribute > attributes={})
static bool isDefaultIndexingMaps(Attribute attr)
Checks if the affine map is the expected one for this operation.
Specialization of linalg.matmul op that has a transpose map on A.
static bool isDefaultIndexingMaps(Attribute attr)
Checks if the affine map is the expected one for this operation.
static MatmulTransposeAOp create(OpBuilder &builder, Location location, ValueRange inputs, ValueRange outputs, ArrayRef< NamedAttribute > attributes={})
::mlir::TypeID resolveTypeID()
static void build(OpBuilder &builder, OperationState &result, ValueRange inputs, ValueRange outputs, ArrayRef< NamedAttribute > attributes={})
Build a transpose A matmul.
static bool classof(Operation *op)
Specialization of linalg.matmul op that has a transpose map on B.
::mlir::TypeID resolveTypeID()
static void build(OpBuilder &builder, OperationState &result, ValueRange inputs, ValueRange outputs, ArrayRef< NamedAttribute > attributes={})
Build a transpose B matmul.
static MatmulTransposeBOp create(OpBuilder &builder, Location location, ValueRange inputs, ValueRange outputs, ArrayRef< NamedAttribute > attributes={})
static bool isDefaultIndexingMaps(Attribute attr)
Checks if the affine map is the expected one for this operation.
static bool classof(Operation *op)
SmallVector< AffineExpr, 4 > concat(ArrayRef< AffineExpr > a, ArrayRef< AffineExpr > b)
Return the vector that is the concatenation of a and b.
OpFoldResult createFoldedDimOp(OpBuilder &b, Location loc, Value val, int64_t dim)
Create one memref::DimOp or tensor::DimOp depending on the type of val.
std::string generateLibraryCallName(Operation *op)
Returns the name mangled library call name to disambiguate between different overloads at the C level...
AffineMap extractOrIdentityMap(std::optional< AffineMap > maybeMap, unsigned rank, MLIRContext *context)
Returns maybeMap.get() if maybeMap is set, otherwise returns the symbol-less identity map of rank.
SmallVector< AffineExpr, 4 > makeAffineDimExprs(unsigned num, unsigned &startIdx, MLIRContext *context)
Returns num AffineDimExpr dimensions at positions [startIdx, startIdx + num) and increments startIdx ...
Value createOrFoldDimOp(OpBuilder &b, Location loc, Value val, int64_t dim)
Create one memref::DimOp or tensor::DimOp depending on the type of val.
std::pair< int64_t, int64_t > getFmrFromWinogradConv2DFmr(WinogradConv2DFmr fmr)
Converts the given WinogradConv2DFmr enumeration value to a pair of m and r parameters.
ArityGroupAndKind getArityGroupAndKind(ElementwiseKind kind)
std::optional< WinogradConv2DFmr > getWinogradConv2DFmr(int64_t m, int64_t r)
Converts the given m and r parameters to a WinogradConv2DFmr enumeration value.
SmallVector< int64_t > getPackedOuterShapeWithoutTransposition(OpTy packOrUnPack)
Returns the outer shape in the packed domain before applying the transposition.
Include the generated interface declarations.
This represents an operation in an abstracted form, suitable for use with the builder APIs.
Elementwise Arity and Kind groups.
ElementwiseArityGroup arityGroup