34struct LinalgInlinerInterface :
public DialectInlinerInterface {
35 using DialectInlinerInterface::DialectInlinerInterface;
40 IRMapping &valueMapping)
const final {
44 bool isLegalToInline(Operation *, Region *,
bool, IRMapping &)
const final {
49 void handleTerminator(Operation *op,
ValueRange valuesToRepl)
const final {}
59constexpr const ::llvm::StringLiteral
60 LinalgDialect::kMemoizedIndexingMapsAttrName;
63template <
typename T,
typename... Args>
70template <
typename OpType,
typename = std::enable_if_t<
73 llvm::StringMap<LinalgDialect::RegionBuilderFunType> &map) {
77template <
typename OpType,
78 typename = std::enable_if_t<detect_has_region_builder<OpType>::value>,
81 llvm::StringMap<LinalgDialect::RegionBuilderFunType> &map) {
82 map.insert(std::make_pair(
83 OpType::getOperationName(),
84 static_cast<LinalgDialect::RegionBuilderFunType
>(OpType::regionBuilder)));
87template <
typename... OpTypes>
93void mlir::linalg::LinalgDialect::initialize() {
95#define GET_ATTRDEF_LIST
96#include "mlir/Dialect/Linalg/IR/LinalgOpsAttrDefs.cpp.inc"
100#include "mlir/Dialect/Linalg/IR/LinalgOps.cpp.inc"
104#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
108#include "mlir/Dialect/Linalg/IR/LinalgRelayoutOps.cpp.inc"
114#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
115 >(namedStructuredOpRegionBuilders);
117 addInterfaces<LinalgInlinerInterface>();
119 declarePromisedInterface<shard::ShardingInterface, GenericOp>();
120 declarePromisedInterfaces<shard::ShardingInterface,
122#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
124 declarePromisedInterface<SubsetOpInterface, CopyOp>();
125 declarePromisedInterface<SubsetInsertionOpInterface, CopyOp>();
128 declarePromisedInterface<ValueBoundsOpInterface, IndexOp>();
130 declarePromisedInterface<PartialReductionOpInterface, linalg::GenericOp>();
133 declarePromisedInterface<TilingInterface, linalg::GenericOp>();
134 declarePromisedInterfaces<TilingInterface,
136#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
138 declarePromisedInterfaces<TilingInterface,
140#include "mlir/Dialect/Linalg/IR/LinalgRelayoutOps.cpp.inc"
142 declarePromisedInterfaces<PartialReductionOpInterface,
144#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
146 declarePromisedInterfaces<bufferization::BufferizableOpInterface,
148#include "mlir/Dialect/Linalg/IR/LinalgStructuredOps.cpp.inc"
152LogicalResult LinalgDialect::verifyOperationAttribute(
Operation *op,
154 if (attr.
getName() == LinalgDialect::kMemoizedIndexingMapsAttrName)
157 <<
"' not supported by the linalg dialect";
160#include "mlir/Dialect/Linalg/IR/LinalgOpsEnums.cpp.inc"
162#define GET_ATTRDEF_CLASSES
163#include "mlir/Dialect/Linalg/IR/LinalgOpsAttrDefs.cpp.inc"
165#include "mlir/Dialect/Linalg/IR/LinalgOpsDialect.cpp.inc"
static bool isLegalToInline(InlinerInterface &interface, Region *src, Region *insertRegion, bool shouldCloneInlinedRegion, IRMapping &valueMapping)
Utility to check that all of the operations within 'src' can be inlined.
llvm::is_detected< has_region_builder, T > detect_has_region_builder
decltype(T::regionBuilder) has_region_builder
Trait to check if T provides a regionBuilder method.
static void addNamedOpBuilders(llvm::StringMap< LinalgDialect::RegionBuilderFunType > &map)
static void addNamedOpBuilderImpl(llvm::StringMap< LinalgDialect::RegionBuilderFunType > &map)
SFINAE helper for single C++ class without a regionBuilder method (e.g.
NamedAttribute represents a combination of a name and an Attribute value.
StringAttr getName() const
Return the name of the attribute.
Operation is the basic unit of execution within MLIR.
InFlightDiagnostic emitError(const Twine &message={})
Emit an error about fatal conditions with this operation, reporting up to any diagnostic handlers tha...
Include the generated interface declarations.