//===- OneShotAnalysis.h - One-Shot (Single Pass) Analysis ------*- 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 // //===----------------------------------------------------------------------===// #ifndef MLIR_DIALECT_BUFFERIZATION_TRANSFORMS_ONESHOTANALYSIS_H #define MLIR_DIALECT_BUFFERIZATION_TRANSFORMS_ONESHOTANALYSIS_H #include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h" #include "llvm/ADT/EquivalenceClasses.h" #include <string> namespace mlir { class DominanceInfo; namespace bufferization { struct OneShotBufferizationOptions; struct BufferizationStatistics; class OneShotAnalysisState; /// Options for analysis-enabled bufferization. struct OneShotBufferizationOptions : public BufferizationOptions { … }; /// State for analysis-enabled bufferization. This class keeps track of alias /// sets, equivalence sets, in-place OpOperands and other things. /// /// Note: Modifying the IR generally invalidates the result of the analysis. /// Adding new operations is safe if they are analyzed subsequently. class OneShotAnalysisState : public AnalysisState { … }; /// Analyze `op` and its nested ops. Bufferization decisions are stored in /// `state`. LogicalResult analyzeOp(Operation *op, OneShotAnalysisState &state, BufferizationStatistics *statistics = nullptr); /// Run One-Shot Bufferize on the given op: Analysis + Bufferization LogicalResult runOneShotBufferize(Operation *op, const OneShotBufferizationOptions &options, BufferizationStatistics *statistics = nullptr); } // namespace bufferization } // namespace mlir MLIR_DECLARE_EXPLICIT_TYPE_ID(mlir::bufferization::OneShotAnalysisState) #endif // MLIR_DIALECT_BUFFERIZATION_TRANSFORMS_ONESHOTANALYSIS_H