1//===- MIRParser.h - MIR serialization format parser ------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This MIR serialization library is currently a work in progress. It can't
11// serialize machine functions at this time.
12//
13// This file declares the functions that parse the MIR serialization format
14// files.
15//
16//===----------------------------------------------------------------------===//
17
18#ifndef LLVM_CODEGEN_MIRPARSER_MIRPARSER_H
19#define LLVM_CODEGEN_MIRPARSER_MIRPARSER_H
20
21#include "llvm/IR/Module.h"
22#include "llvm/Support/MemoryBuffer.h"
23#include <memory>
24
25namespace llvm {
26
27class StringRef;
28class MIRParserImpl;
29class MachineModuleInfo;
30class SMDiagnostic;
31
32/// This class initializes machine functions by applying the state loaded from
33/// a MIR file.
34class MIRParser {
35  std::unique_ptr<MIRParserImpl> Impl;
36
37public:
38  MIRParser(std::unique_ptr<MIRParserImpl> Impl);
39  MIRParser(const MIRParser &) = delete;
40  ~MIRParser();
41
42  /// Parses the optional LLVM IR module in the MIR file.
43  ///
44  /// A new, empty module is created if the LLVM IR isn't present.
45  /// \returns nullptr if a parsing error occurred.
46  std::unique_ptr<Module> parseIRModule();
47
48  /// \brief Parses MachineFunctions in the MIR file and add them to the given
49  /// MachineModuleInfo \p MMI.
50  ///
51  /// \returns true if an error occurred.
52  bool parseMachineFunctions(Module &M, MachineModuleInfo &MMI);
53};
54
55/// This function is the main interface to the MIR serialization format parser.
56///
57/// It reads in a MIR file and returns a MIR parser that can parse the embedded
58/// LLVM IR module and initialize the machine functions by parsing the machine
59/// function's state.
60///
61/// \param Filename - The name of the file to parse.
62/// \param Error - Error result info.
63/// \param Context - Context which will be used for the parsed LLVM IR module.
64std::unique_ptr<MIRParser> createMIRParserFromFile(StringRef Filename,
65                                                   SMDiagnostic &Error,
66                                                   LLVMContext &Context);
67
68/// This function is another interface to the MIR serialization format parser.
69///
70/// It returns a MIR parser that works with the given memory buffer and that can
71/// parse the embedded LLVM IR module and initialize the machine functions by
72/// parsing the machine function's state.
73///
74/// \param Contents - The MemoryBuffer containing the machine level IR.
75/// \param Context - Context which will be used for the parsed LLVM IR module.
76std::unique_ptr<MIRParser>
77createMIRParser(std::unique_ptr<MemoryBuffer> Contents, LLVMContext &Context);
78
79} // end namespace llvm
80
81#endif // LLVM_CODEGEN_MIRPARSER_MIRPARSER_H
82