1e7f8b459SMehdi Amini //===- mlir-cat.cpp ---------------------------------------------*- C++ -*-===// 2e7f8b459SMehdi Amini // 3e7f8b459SMehdi Amini // This file is licensed under the Apache License v2.0 with LLVM Exceptions. 4e7f8b459SMehdi Amini // See https://llvm.org/LICENSE.txt for license information. 5e7f8b459SMehdi Amini // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e7f8b459SMehdi Amini // 7e7f8b459SMehdi Amini //===----------------------------------------------------------------------===// 8e7f8b459SMehdi Amini 9e7f8b459SMehdi Amini #include "mlir/IR/MLIRContext.h" 10*e59f76e9SMehdi Amini #include "mlir/IR/Operation.h" 11*e59f76e9SMehdi Amini #include "mlir/IR/OwningOpRef.h" 12e7f8b459SMehdi Amini #include "mlir/Parser/Parser.h" 13e7f8b459SMehdi Amini #include "mlir/Support/FileUtilities.h" 14e7f8b459SMehdi Amini #include "mlir/Support/LLVM.h" 15e7f8b459SMehdi Amini #include "llvm/Support/SourceMgr.h" 16e7f8b459SMehdi Amini #include "llvm/Support/ToolOutputFile.h" 17e7f8b459SMehdi Amini #include "llvm/Support/raw_ostream.h" 18*e59f76e9SMehdi Amini #include <cstdlib> 19*e59f76e9SMehdi Amini #include <string> 20*e59f76e9SMehdi Amini #include <utility> 21e7f8b459SMehdi Amini 22e7f8b459SMehdi Amini using namespace mlir; 23e7f8b459SMehdi Amini 24e7f8b459SMehdi Amini /// This example parse its input, either from a file or its standard input (in 25e7f8b459SMehdi Amini /// bytecode or textual assembly) and print it back. 26e7f8b459SMehdi Amini main(int argc,char ** argv)27e7f8b459SMehdi Aminiint main(int argc, char **argv) { 28e7f8b459SMehdi Amini // Set up the input file. 29e7f8b459SMehdi Amini StringRef inputFile; 30e7f8b459SMehdi Amini if (argc <= 1) { 31e7f8b459SMehdi Amini llvm::errs() << "Reading from stdin...\n"; 32e7f8b459SMehdi Amini inputFile = "-"; 33e7f8b459SMehdi Amini } else { 34e7f8b459SMehdi Amini inputFile = argv[1]; 35e7f8b459SMehdi Amini } 36e7f8b459SMehdi Amini std::string errorMessage; 37e7f8b459SMehdi Amini auto file = openInputFile(inputFile, &errorMessage); 38e7f8b459SMehdi Amini if (!file) { 39e7f8b459SMehdi Amini llvm::errs() << errorMessage << "\n"; 40e7f8b459SMehdi Amini exit(1); 41e7f8b459SMehdi Amini } 42e7f8b459SMehdi Amini llvm::SourceMgr sourceMgr; 43e7f8b459SMehdi Amini sourceMgr.AddNewSourceBuffer(std::move(file), SMLoc()); 44e7f8b459SMehdi Amini 45e7f8b459SMehdi Amini auto output = openOutputFile("-", &errorMessage); 46e7f8b459SMehdi Amini if (!output) { 47e7f8b459SMehdi Amini llvm::errs() << errorMessage << "\n"; 48e7f8b459SMehdi Amini exit(1); 49e7f8b459SMehdi Amini } 50e7f8b459SMehdi Amini 51e7f8b459SMehdi Amini DialectRegistry registry; 52e7f8b459SMehdi Amini MLIRContext context(registry, MLIRContext::Threading::DISABLED); 53e7f8b459SMehdi Amini context.allowUnregisteredDialects(true); 54e7f8b459SMehdi Amini OwningOpRef<Operation *> op = parseSourceFile(sourceMgr, &context); 55e7f8b459SMehdi Amini if (!op) { 56e7f8b459SMehdi Amini llvm::errs() << "Failed to parse input file"; 57e7f8b459SMehdi Amini exit(1); 58e7f8b459SMehdi Amini } 59e7f8b459SMehdi Amini output->os() << *(op.get()) << "\n"; 60e7f8b459SMehdi Amini } 61