//===- mlir-opt.cpp - MLIR Optimizer Driver -------------------------------===// // // Part of the MLIR 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. // //===----------------------------------------------------------------------===// #include "mlir/Analysis/Passes.h" #include "mlir/Pass/Pass.h" #include "mlir/Pass/PassManager.h" #include "mlir/Support/FileUtilities.h" #include "mlir/Support/MlirOptMain.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/InitLLVM.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/ToolOutputFile.h" using namespace llvm; using namespace mlir; static cl::opt inputFilename(cl::Positional, cl::desc(""), cl::init("-")); static cl::opt outputFilename("o", cl::desc("Output filename"), cl::value_desc("filename"), cl::init("-")); static cl::opt splitInputFile("split-input-file", cl::desc("Split the input file into pieces and process each " "chunk independently"), cl::init(false)); static cl::opt verifyDiagnostics("verify-diagnostics", cl::desc("Check that emitted diagnostics match " "expected-* lines on the corresponding line"), cl::init(false)); static cl::opt verifyPasses("verify-each", cl::desc("Run the verifier after each transformation pass"), cl::init(true)); int main(int argc, char **argv) { InitLLVM y(argc, argv); // Register any pass manager command line options. registerPassManagerCLOptions(); PassPipelineCLParser passPipeline("", "Compiler passes to run"); // Parse pass names in main to ensure static initialization completed. cl::ParseCommandLineOptions(argc, argv, "MLIR modular optimizer driver\n"); // Set up the input file. std::string errorMessage; auto file = openInputFile(inputFilename, &errorMessage); if (!file) { llvm::errs() << errorMessage << "\n"; return 1; } auto output = openOutputFile(outputFilename, &errorMessage); if (!output) { llvm::errs() << errorMessage << "\n"; exit(1); } return failed(MlirOptMain(output->os(), std::move(file), passPipeline, splitInputFile, verifyDiagnostics, verifyPasses)); }