//===- PassManager.h - Pass Management Interface ----------------*- 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_PASS_PASSMANAGER_H #define MLIR_PASS_PASSMANAGER_H #include "mlir/IR/Dialect.h" #include "mlir/IR/OperationSupport.h" #include "mlir/Support/Timing.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/iterator.h" #include "llvm/Support/raw_ostream.h" #include <functional> #include <optional> #include <vector> namespace mlir { class AnalysisManager; class MLIRContext; class Operation; class Pass; class PassInstrumentation; class PassInstrumentor; namespace detail { struct OpPassManagerImpl; class OpToOpPassAdaptor; class PassCrashReproducerGenerator; struct PassExecutionState; } // namespace detail //===----------------------------------------------------------------------===// // OpPassManager //===----------------------------------------------------------------------===// /// This class represents a pass manager that runs passes on either a specific /// operation type, or any isolated operation. This pass manager can not be run /// on an operation directly, but must be run either as part of a top-level /// `PassManager`(e.g. when constructed via `nest` calls), or dynamically within /// a pass by using the `Pass::runPipeline` API. class OpPassManager { … }; //===----------------------------------------------------------------------===// // PassManager //===----------------------------------------------------------------------===// /// An enum describing the different display modes for the information within /// the pass manager. enum class PassDisplayMode { … }; /// Streams on which to output crash reproducer. struct ReproducerStream { … }; /// Method type for constructing ReproducerStream. ReproducerStreamFactory; std::string makeReproducer(StringRef anchorName, const llvm::iterator_range<OpPassManager::pass_iterator> &passes, Operation *op, StringRef outputFile, bool disableThreads = false, bool verifyPasses = false); /// The main pass manager and pipeline builder. class PassManager : public OpPassManager { … }; /// Register a set of useful command-line options that can be used to configure /// a pass manager. The values of these options can be applied via the /// 'applyPassManagerCLOptions' method below. void registerPassManagerCLOptions(); /// Apply any values provided to the pass manager options that were registered /// with 'registerPassManagerOptions'. LogicalResult applyPassManagerCLOptions(PassManager &pm); /// Apply any values provided to the timing manager options that were registered /// with `registerDefaultTimingManagerOptions`. This is a handy helper function /// if you do not want to bother creating your own timing manager and passing it /// to the pass manager. void applyDefaultTimingPassManagerCLOptions(PassManager &pm); } // namespace mlir #endif // MLIR_PASS_PASSMANAGER_H