//===- Passes.h - Bufferization pipeline entry points -----------*- C++ -*-===// // // 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 // //===----------------------------------------------------------------------===// // // This header file defines prototypes of all bufferization pipelines. // //===----------------------------------------------------------------------===// #ifndef MLIR_DIALECT_BUFFERIZATION_PIPELINES_PASSES_H #define MLIR_DIALECT_BUFFERIZATION_PIPELINES_PASSES_H #include "mlir/Dialect/Bufferization/IR/BufferDeallocationOpInterface.h" #include "mlir/Pass/PassOptions.h" namespace mlir { namespace bufferization { /// Options for the buffer deallocation pipeline. struct BufferDeallocationPipelineOptions : public PassPipelineOptions { PassOptions::Option privateFunctionDynamicOwnership{ *this, "private-function-dynamic-ownership", llvm::cl::desc( "Allows to add additional results to private functions to return " "ownership of returned memrefs to callers. This can avoid spurious " "buffer clones in the callee."), llvm::cl::init(false)}; /// Implicit conversion to `DeallocationOptions`. operator DeallocationOptions() const { DeallocationOptions options; options.privateFuncDynamicOwnership = privateFunctionDynamicOwnership; return options; } }; //===----------------------------------------------------------------------===// // Building and Registering. //===----------------------------------------------------------------------===// /// Adds the buffer deallocation pipeline to the `OpPassManager`. This /// is the standard pipeline for deallocating the MemRefs introduced by the /// One-Shot bufferization pass. void buildBufferDeallocationPipeline( OpPassManager &pm, const BufferDeallocationPipelineOptions &options); void buildBufferDeallocationPipeline(OpPassManager &pm); /// Registers all pipelines for the `bufferization` dialect. Currently, /// this includes only the "buffer-deallocation-pipeline". void registerBufferizationPipelines(); } // namespace bufferization } // namespace mlir #endif // MLIR_DIALECT_BUFFERIZATION_PIPELINES_PASSES_H