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