//===-- 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 ::std::nullopt.
}],
"::std::optional<::mlir::Operation*>", "buildDealloc",
(ins "::mlir::OpBuilder&":$builder, "::mlir::Value":$alloc), [{}],
/*defaultImplementation=*/[{ return std::nullopt; }]
>,
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 ::std::nullopt.
}],
"::std::optional<::mlir::Value>", "buildClone",
(ins "::mlir::OpBuilder&":$builder, "::mlir::Value":$alloc), [{}],
/*defaultImplementation=*/[{ return std::nullopt; }]
>,
StaticInterfaceMethod<[{
Returns the kind of hoisting supported for the buffer allocated by this
operation.
}],
"::mlir::HoistingKind", "getHoistingKind",
(ins), [{}],
/*defaultImplementation=*/[{ return HoistingKind::None; }]
>,
StaticInterfaceMethod<[{
Builds a stack allocation 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
stack allocation operation, this method can return ::std::nullopt.
}],
"::std::optional<::mlir::Operation*>", "buildPromotedAlloc",
(ins "::mlir::OpBuilder&":$builder, "::mlir::Value":$alloc), [{}],
/*defaultImplementation=*/[{ return std::nullopt; }]
>
];
}
#endif // ALLOCATION_OP_INTERFACE