xref: /llvm-project/mlir/examples/minimal-opt/mlir-cat.cpp (revision e59f76e9f57696c2f3c816947314be097d1c2942)
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 Amini int 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