//===- MlirOptMain.h - MLIR Optimizer Driver main ---------------*- 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 // //===----------------------------------------------------------------------===// // // Main entry function for mlir-opt for when built as standalone binary. // //===----------------------------------------------------------------------===// #ifndef MLIR_TOOLS_MLIROPT_MLIROPTMAIN_H #define MLIR_TOOLS_MLIROPT_MLIROPTMAIN_H #include "mlir/Debug/CLOptionsSetup.h" #include "mlir/Support/ToolUtilities.h" #include "llvm/ADT/StringRef.h" #include <cstdlib> #include <functional> #include <memory> namespace llvm { class raw_ostream; class MemoryBuffer; } // namespace llvm namespace mlir { class DialectRegistry; class PassPipelineCLParser; class PassManager; /// Configuration options for the mlir-opt tool. /// This is intended to help building tools like mlir-opt by collecting the /// supported options. /// The API is fluent, and the options are sorted in alphabetical order below. /// The options can be exposed to the LLVM command line by registering them /// with `MlirOptMainConfig::registerCLOptions(DialectRegistry &);` and creating /// a config using `auto config = MlirOptMainConfig::createFromCLOptions();`. class MlirOptMainConfig { … }; /// This defines the function type used to setup the pass manager. This can be /// used to pass in a callback to setup a default pass pipeline to be applied on /// the loaded IR. PassPipelineFn; /// Register and parse command line options. /// - toolName is used for the header displayed by `--help`. /// - registry should contain all the dialects that can be parsed in the source. /// - return std::pair<std::string, std::string> for /// inputFilename and outputFilename command line option values. std::pair<std::string, std::string> registerAndParseCLIOptions(int argc, char **argv, llvm::StringRef toolName, DialectRegistry ®istry); /// Perform the core processing behind `mlir-opt`. /// - outputStream is the stream where the resulting IR is printed. /// - buffer is the in-memory file to parser and process. /// - registry should contain all the dialects that can be parsed in the source. /// - config contains the configuration options for the tool. LogicalResult MlirOptMain(llvm::raw_ostream &outputStream, std::unique_ptr<llvm::MemoryBuffer> buffer, DialectRegistry ®istry, const MlirOptMainConfig &config); /// Implementation for tools like `mlir-opt`. /// - toolName is used for the header displayed by `--help`. /// - registry should contain all the dialects that can be parsed in the source. LogicalResult MlirOptMain(int argc, char **argv, llvm::StringRef toolName, DialectRegistry ®istry); /// Implementation for tools like `mlir-opt`. /// This function can be used with registrationAndParseCLIOptions so that /// CLI options can be accessed before running MlirOptMain. /// - inputFilename is the name of the input mlir file. /// - outputFilename is the name of the output file. /// - registry should contain all the dialects that can be parsed in the source. LogicalResult MlirOptMain(int argc, char **argv, llvm::StringRef inputFilename, llvm::StringRef outputFilename, DialectRegistry ®istry); /// Helper wrapper to return the result of MlirOptMain directly from main. /// /// Example: /// /// int main(int argc, char **argv) { /// // ... /// return mlir::asMainReturnCode(mlir::MlirOptMain( /// argc, argv, /* ... */); /// } /// inline int asMainReturnCode(LogicalResult r) { … } } // namespace mlir #endif // MLIR_TOOLS_MLIROPT_MLIROPTMAIN_H