25 #include "mlir/Dialect/MemRef/IR/MemRefOpsDialect.cpp.inc"
45 void mlir::memref::MemRefDialect::initialize() {
48 #include "mlir/Dialect/MemRef/IR/MemRefOps.cpp.inc"
50 addInterfaces<MemRefInlinerInterface>();
51 declarePromisedInterface<ConvertToEmitCPatternInterface, MemRefDialect>();
52 declarePromisedInterface<ConvertToLLVMPatternInterface, MemRefDialect>();
53 declarePromisedInterfaces<bufferization::AllocationOpInterface, AllocOp,
54 AllocaOp, ReallocOp>();
55 declarePromisedInterfaces<RuntimeVerifiableOpInterface, CastOp, ExpandShapeOp,
56 LoadOp, ReinterpretCastOp, StoreOp, SubViewOp>();
57 declarePromisedInterfaces<ValueBoundsOpInterface, AllocOp, AllocaOp, CastOp,
58 DimOp, GetGlobalOp, RankOp, SubViewOp>();
59 declarePromisedInterface<DestructurableTypeInterface, MemRefType>();
66 if (!hasEffect<MemoryEffects::Free>(user, allocValue))
69 if (isa<memref::ReallocOp>(user))
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.
This is the interface that must be implemented by the dialects of operations to be inlined.
DialectInlinerInterface(Dialect *dialect)
This is a utility class for mapping one set of IR entities to another.
Operation is the basic unit of execution within MLIR.
This class contains a list of basic blocks and a link to the parent operation it is attached to.
This class represents an instance of an SSA value in the MLIR system, representing a computable value...
user_range getUsers() const
std::optional< Operation * > findDealloc(Value allocValue)
Finds a single dealloc operation for the given allocated value.
Include the generated interface declarations.