//===- MIParser.h - Machine Instructions Parser ---------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file declares the function that parses the machine instructions. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_CODEGEN_MIRPARSER_MIPARSER_H #define LLVM_LIB_CODEGEN_MIRPARSER_MIPARSER_H #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/StringRef.h" namespace llvm { class BasicBlock; class MachineBasicBlock; class MachineInstr; class MachineFunction; class MDNode; struct SlotMapping; class SMDiagnostic; class SourceMgr; struct PerFunctionMIParsingState { DenseMap MBBSlots; DenseMap VirtualRegisterSlots; DenseMap FixedStackObjectSlots; DenseMap StackObjectSlots; DenseMap ConstantPoolSlots; DenseMap JumpTableSlots; }; /// Parse the machine basic block definitions, and skip the machine /// instructions. /// /// This function runs the first parsing pass on the machine function's body. /// It parses only the machine basic block definitions and creates the machine /// basic blocks in the given machine function. /// /// The machine instructions aren't parsed during the first pass because all /// the machine basic blocks aren't defined yet - this makes it impossible to /// resolve the machine basic block references. /// /// Return true if an error occurred. bool parseMachineBasicBlockDefinitions(MachineFunction &MF, StringRef Src, PerFunctionMIParsingState &PFS, const SlotMapping &IRSlots, SMDiagnostic &Error); /// Parse the machine instructions. /// /// This function runs the second parsing pass on the machine function's body. /// It skips the machine basic block definitions and parses only the machine /// instructions and basic block attributes like liveins and successors. /// /// The second parsing pass assumes that the first parsing pass already ran /// on the given source string. /// /// Return true if an error occurred. bool parseMachineInstructions(MachineFunction &MF, StringRef Src, const PerFunctionMIParsingState &PFS, const SlotMapping &IRSlots, SMDiagnostic &Error); bool parseMBBReference(MachineBasicBlock *&MBB, SourceMgr &SM, MachineFunction &MF, StringRef Src, const PerFunctionMIParsingState &PFS, const SlotMapping &IRSlots, SMDiagnostic &Error); bool parseNamedRegisterReference(unsigned &Reg, SourceMgr &SM, MachineFunction &MF, StringRef Src, const PerFunctionMIParsingState &PFS, const SlotMapping &IRSlots, SMDiagnostic &Error); bool parseVirtualRegisterReference(unsigned &Reg, SourceMgr &SM, MachineFunction &MF, StringRef Src, const PerFunctionMIParsingState &PFS, const SlotMapping &IRSlots, SMDiagnostic &Error); bool parseStackObjectReference(int &FI, SourceMgr &SM, MachineFunction &MF, StringRef Src, const PerFunctionMIParsingState &PFS, const SlotMapping &IRSlots, SMDiagnostic &Error); bool parseMDNode(MDNode *&Node, SourceMgr &SM, MachineFunction &MF, StringRef Src, const PerFunctionMIParsingState &PFS, const SlotMapping &IRSlots, SMDiagnostic &Error); } // end namespace llvm #endif