//===- BufferUtils.h - Buffer optimization utilities ------------*- 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 file provides utilities for passes optimizing code that has already // been converted to buffers. // //===----------------------------------------------------------------------===// #ifndef MLIR_DIALECT_BUFFERIZATION_TRANSFORMS_BUFFERUTILS_H #define MLIR_DIALECT_BUFFERIZATION_TRANSFORMS_BUFFERUTILS_H #include "mlir/Analysis/Liveness.h" #include "mlir/Dialect/Arith/IR/Arith.h" #include "mlir/Dialect/Bufferization/Transforms/BufferViewFlowAnalysis.h" #include "mlir/IR/Builders.h" #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/Dominance.h" #include "mlir/IR/Operation.h" #include "mlir/Transforms/DialectConversion.h" namespace mlir { namespace memref { class GlobalOp; } // namespace memref namespace bufferization { /// A simple analysis that detects allocation operations. class BufferPlacementAllocs { … }; /// Finds a common dominator for the given value while taking the positions /// of the values in the value set into account. It supports dominator and /// post-dominator analyses via template arguments. If no common dominator /// can be found, this function will return "nullptr". template <typename DominatorT> Block *findCommonDominator(Value value, const BufferViewFlowAnalysis::ValueSetT &values, const DominatorT &doms) { … } /// The base class for all BufferPlacement transformations. class BufferPlacementTransformationBase { … }; // Create a global op for the given tensor-valued constant in the program. // Globals are created lazily at the top of the enclosing ModuleOp with pretty // names. Duplicates are avoided. FailureOr<memref::GlobalOp> getGlobalFor(arith::ConstantOp constantOp, uint64_t alignment, Attribute memorySpace = { … }; } // namespace bufferization } // namespace mlir #endif // MLIR_DIALECT_BUFFERIZATION_TRANSFORMS_BUFFERUTILS_H