| //===-- AllocationOpInterface.td - Allocation op interface -*- 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 |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // Defines the interface with allocation-related methods. It is used by the |
| // buffer deallocation pass. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef ALLOCATION_OP_INTERFACE |
| #define ALLOCATION_OP_INTERFACE |
| |
| include "mlir/IR/OpBase.td" |
| |
| //===----------------------------------------------------------------------===// |
| // AllocationOpInterface |
| //===----------------------------------------------------------------------===// |
| |
| def AllocationOpInterface : OpInterface<"AllocationOpInterface"> { |
| let description = [{ |
| This interface provides general allocation-related methods that are |
| designed for allocation operations. For example, it offers the ability to |
| construct associated deallocation and clone operations that are compatible |
| with the current allocation operation. |
| }]; |
| let cppNamespace = "::mlir::bufferization"; |
| |
| let methods = [ |
| StaticInterfaceMethod<[{ |
| Builds a deallocation operation using the provided builder and the |
| current allocation value (which refers to the current Op implementing |
| this interface). The allocation value is a result of the current |
| operation implementing this interface. If there is no compatible |
| deallocation operation, this method can return ::llvm::None. |
| }], |
| "::mlir::Optional<::mlir::Operation*>", "buildDealloc", |
| (ins "::mlir::OpBuilder&":$builder, "::mlir::Value":$alloc), [{}], |
| /*defaultImplementation=*/[{ return llvm::None; }] |
| >, |
| StaticInterfaceMethod<[{ |
| Builds a clone operation using the provided builder and the current |
| allocation value (which refers to the current Op implementing this |
| interface). The allocation value is a result of the current operation |
| implementing this interface. If there is no compatible clone operation, |
| this method can return ::llvm::None. |
| }], |
| "::mlir::Optional<::mlir::Value>", "buildClone", |
| (ins "::mlir::OpBuilder&":$builder, "::mlir::Value":$alloc), [{}], |
| /*defaultImplementation=*/[{ return llvm::None; }] |
| > |
| ]; |
| } |
| |
| #endif // ALLOCATION_OP_INTERFACE |