//===- BufferizationBase.td - Bufferization dialect base ---*- 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 // //===----------------------------------------------------------------------===// #ifndef BUFFERIZATION_BASE #define BUFFERIZATION_BASE include "mlir/IR/OpBase.td" def Bufferization_Dialect : Dialect { let name = "bufferization"; let cppNamespace = "::mlir::bufferization"; let description = [{ Bufferization in MLIR is the process of converting the `tensor` type to the `memref` type. Simply put, bufferization is the process of converting computations on the mathematical tensor construct to computations on physical memory buffers. The `bufferization` dialect contains operations/interfaces specific to the bufferization passes. An overview of the bufferization infrastructure and important conceptual details related to using the MLIR dialect conversion infrastructure can be found in [bufferization](/docs/Bufferization/) and [ownership-based buffer deallocation](/docs/OwnershipBasedBufferDeallocation/). }]; let dependentDialects = [ "affine::AffineDialect", "memref::MemRefDialect", "tensor::TensorDialect", "arith::ArithDialect" ]; let extraClassDeclaration = [{ /// Verify an attribute from this dialect on the argument at 'argIndex' for /// the region at 'regionIndex' on the given operation. Returns failure if /// the verification failed, success otherwise. This hook may optionally be /// invoked from any operation containing a region. LogicalResult verifyRegionArgAttribute(Operation *, unsigned regionIndex, unsigned argIndex, NamedAttribute) override; /// An attribute that can override writability of buffers of tensor function /// arguments during One-Shot Module Bufferize. constexpr const static ::llvm::StringLiteral kWritableAttrName = "bufferization.writable"; /// An attribute for function arguments that describes how the function /// accesses the buffer. Can be one "none", "read", "write" or "read-write". /// /// When no attribute is specified, the analysis tries to infer the access /// behavior from its body. In case of external functions, for which no /// function body is available, "read-write" is assumed by default. constexpr const static ::llvm::StringLiteral kBufferAccessAttrName = "bufferization.access"; /// Attribute name used to mark the bufferization layout for region /// arguments during One-Shot Module Bufferize. constexpr const static ::llvm::StringLiteral kBufferLayoutAttrName = "bufferization.buffer_layout"; /// An attribute that can be attached to ops with an allocation and/or /// deallocation side effect. It indicates that the op is under a "manual /// deallocation" scheme. In the case of an allocation op, the returned /// value is *not* an automatically managed allocation and assigned an /// ownership of "false". Furthermore, only deallocation ops that are /// guaranteed to deallocate a buffer under "manual deallocation" are /// allowed to have this attribute. (Deallocation ops without this /// attribute are rejected by the ownership-based buffer deallocation pass.) constexpr const static ::llvm::StringLiteral kManualDeallocation = "bufferization.manual_deallocation"; }]; let hasOperationAttrVerify = 1; } #endif // BUFFERIZATION_BASE