diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/MIRParser/MIParser.cpp | 67 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MIRParser/MIParser.h | 54 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MIRParser/MIRParser.cpp | 152 |
3 files changed, 132 insertions, 141 deletions
diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp index 405e508b51e..7448952567c 100644 --- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp +++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp @@ -36,6 +36,10 @@ using namespace llvm; +PerFunctionMIParsingState::PerFunctionMIParsingState(MachineFunction &MF) + : MF(MF) { +} + namespace { /// A wrapper struct around the 'MachineOperand' struct that includes a source @@ -84,9 +88,8 @@ class MIParser { StringMap<unsigned> Names2BitmaskTargetFlags; public: - MIParser(SourceMgr &SM, MachineFunction &MF, SMDiagnostic &Error, - StringRef Source, const PerFunctionMIParsingState &PFS, - const SlotMapping &IRSlots); + MIParser(const PerFunctionMIParsingState &PFS, SourceMgr &SM, + SMDiagnostic &Error, StringRef Source, const SlotMapping &IRSlots); /// \p SkipChar gives the number of characters to skip before looking /// for the next token. @@ -253,10 +256,10 @@ private: } // end anonymous namespace -MIParser::MIParser(SourceMgr &SM, MachineFunction &MF, SMDiagnostic &Error, - StringRef Source, const PerFunctionMIParsingState &PFS, +MIParser::MIParser(const PerFunctionMIParsingState &PFS, SourceMgr &SM, + SMDiagnostic &Error, StringRef Source, const SlotMapping &IRSlots) - : SM(SM), MF(MF), Error(Error), Source(Source), CurrentSource(Source), + : SM(SM), MF(PFS.MF), Error(Error), Source(Source), CurrentSource(Source), PFS(PFS), IRSlots(IRSlots) {} void MIParser::lex(unsigned SkipChar) { @@ -2050,65 +2053,63 @@ bool MIParser::getBitmaskTargetFlag(StringRef Name, unsigned &Flag) { return false; } -bool llvm::parseMachineBasicBlockDefinitions(MachineFunction &MF, StringRef Src, - PerFunctionMIParsingState &PFS, +bool llvm::parseMachineBasicBlockDefinitions(PerFunctionMIParsingState &PFS, + StringRef Src, const SlotMapping &IRSlots, SMDiagnostic &Error) { SourceMgr SM; SM.AddNewSourceBuffer( MemoryBuffer::getMemBuffer(Src, "", /*RequiresNullTerminator=*/false), SMLoc()); - return MIParser(SM, MF, Error, Src, PFS, IRSlots) + return MIParser(PFS, SM, Error, Src, IRSlots) .parseBasicBlockDefinitions(PFS.MBBSlots); } -bool llvm::parseMachineInstructions(MachineFunction &MF, StringRef Src, - const PerFunctionMIParsingState &PFS, - const SlotMapping &IRSlots, +bool llvm::parseMachineInstructions(const PerFunctionMIParsingState &PFS, + StringRef Src, const SlotMapping &IRSlots, SMDiagnostic &Error) { SourceMgr SM; SM.AddNewSourceBuffer( MemoryBuffer::getMemBuffer(Src, "", /*RequiresNullTerminator=*/false), SMLoc()); - return MIParser(SM, MF, Error, Src, PFS, IRSlots).parseBasicBlocks(); + return MIParser(PFS, SM, Error, Src, IRSlots).parseBasicBlocks(); } -bool llvm::parseMBBReference(MachineBasicBlock *&MBB, SourceMgr &SM, - MachineFunction &MF, StringRef Src, - const PerFunctionMIParsingState &PFS, - const SlotMapping &IRSlots, SMDiagnostic &Error) { - return MIParser(SM, MF, Error, Src, PFS, IRSlots).parseStandaloneMBB(MBB); +bool llvm::parseMBBReference(const PerFunctionMIParsingState &PFS, + MachineBasicBlock *&MBB, SourceMgr &SM, + StringRef Src, const SlotMapping &IRSlots, + SMDiagnostic &Error) { + return MIParser(PFS, SM, Error, Src, IRSlots).parseStandaloneMBB(MBB); } -bool llvm::parseNamedRegisterReference(unsigned &Reg, SourceMgr &SM, - MachineFunction &MF, StringRef Src, - const PerFunctionMIParsingState &PFS, +bool llvm::parseNamedRegisterReference(const PerFunctionMIParsingState &PFS, + unsigned &Reg, SourceMgr &SM, + StringRef Src, const SlotMapping &IRSlots, SMDiagnostic &Error) { - return MIParser(SM, MF, Error, Src, PFS, IRSlots) + return MIParser(PFS, SM, Error, Src, IRSlots) .parseStandaloneNamedRegister(Reg); } -bool llvm::parseVirtualRegisterReference(unsigned &Reg, SourceMgr &SM, - MachineFunction &MF, StringRef Src, - const PerFunctionMIParsingState &PFS, +bool llvm::parseVirtualRegisterReference(const PerFunctionMIParsingState &PFS, + unsigned &Reg, SourceMgr &SM, + StringRef Src, const SlotMapping &IRSlots, SMDiagnostic &Error) { - return MIParser(SM, MF, Error, Src, PFS, IRSlots) + return MIParser(PFS, SM, Error, Src, IRSlots) .parseStandaloneVirtualRegister(Reg); } -bool llvm::parseStackObjectReference(int &FI, SourceMgr &SM, - MachineFunction &MF, StringRef Src, - const PerFunctionMIParsingState &PFS, +bool llvm::parseStackObjectReference(const PerFunctionMIParsingState &PFS, + int &FI, SourceMgr &SM, StringRef Src, const SlotMapping &IRSlots, SMDiagnostic &Error) { - return MIParser(SM, MF, Error, Src, PFS, IRSlots) + return MIParser(PFS, SM, Error, Src, IRSlots) .parseStandaloneStackObject(FI); } -bool llvm::parseMDNode(MDNode *&Node, SourceMgr &SM, MachineFunction &MF, - StringRef Src, const PerFunctionMIParsingState &PFS, +bool llvm::parseMDNode(const PerFunctionMIParsingState &PFS, + MDNode *&Node, SourceMgr &SM, StringRef Src, const SlotMapping &IRSlots, SMDiagnostic &Error) { - return MIParser(SM, MF, Error, Src, PFS, IRSlots).parseStandaloneMDNode(Node); + return MIParser(PFS, SM, Error, Src, IRSlots).parseStandaloneMDNode(Node); } diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.h b/llvm/lib/CodeGen/MIRParser/MIParser.h index 3557b9a6d5d..ab160dcf91c 100644 --- a/llvm/lib/CodeGen/MIRParser/MIParser.h +++ b/llvm/lib/CodeGen/MIRParser/MIParser.h @@ -22,14 +22,17 @@ namespace llvm { class StringRef; class BasicBlock; class MachineBasicBlock; -class MachineInstr; class MachineFunction; +class MachineInstr; +class MachineRegisterInfo; class MDNode; struct SlotMapping; class SMDiagnostic; class SourceMgr; struct PerFunctionMIParsingState { + MachineFunction &MF; + DenseMap<unsigned, MachineBasicBlock *> MBBSlots; DenseMap<unsigned, unsigned> VirtualRegisterSlots; DenseMap<unsigned, int> FixedStackObjectSlots; @@ -38,6 +41,8 @@ struct PerFunctionMIParsingState { DenseMap<unsigned, unsigned> JumpTableSlots; /// Hold the generic virtual registers. SmallSet<unsigned, 8> GenericVRegs; + + PerFunctionMIParsingState(MachineFunction &MF); }; /// Parse the machine basic block definitions, and skip the machine @@ -52,8 +57,8 @@ struct PerFunctionMIParsingState { /// resolve the machine basic block references. /// /// Return true if an error occurred. -bool parseMachineBasicBlockDefinitions(MachineFunction &MF, StringRef Src, - PerFunctionMIParsingState &PFS, +bool parseMachineBasicBlockDefinitions(PerFunctionMIParsingState &PFS, + StringRef Src, const SlotMapping &IRSlots, SMDiagnostic &Error); @@ -67,35 +72,32 @@ bool parseMachineBasicBlockDefinitions(MachineFunction &MF, StringRef Src, /// 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, +bool parseMachineInstructions(const PerFunctionMIParsingState &PFS, + StringRef Src, const SlotMapping &IRSlots, + SMDiagnostic &Error); + +bool parseMBBReference(const PerFunctionMIParsingState &PFS, + MachineBasicBlock *&MBB, SourceMgr &SM, + StringRef Src, const SlotMapping &IRSlots, + SMDiagnostic &Error); + +bool parseNamedRegisterReference(const PerFunctionMIParsingState &PFS, + unsigned &Reg, SourceMgr &SM, + StringRef Src, const SlotMapping &IRSlots, SMDiagnostic &Error); -bool parseVirtualRegisterReference(unsigned &Reg, SourceMgr &SM, - MachineFunction &MF, StringRef Src, - const PerFunctionMIParsingState &PFS, - const SlotMapping &IRSlots, +bool parseVirtualRegisterReference(const PerFunctionMIParsingState &PFS, + unsigned &Reg, SourceMgr &SM, + StringRef Src, const SlotMapping &IRSlots, SMDiagnostic &Error); -bool parseStackObjectReference(int &FI, SourceMgr &SM, MachineFunction &MF, - StringRef Src, - const PerFunctionMIParsingState &PFS, +bool parseStackObjectReference(const PerFunctionMIParsingState &PFS, + int &FI, SourceMgr &SM, StringRef Src, const SlotMapping &IRSlots, SMDiagnostic &Error); -bool parseMDNode(MDNode *&Node, SourceMgr &SM, MachineFunction &MF, - StringRef Src, const PerFunctionMIParsingState &PFS, - const SlotMapping &IRSlots, SMDiagnostic &Error); +bool parseMDNode(const PerFunctionMIParsingState &PFS, MDNode *&Node, + SourceMgr &SM, StringRef Src, const SlotMapping &IRSlots, + SMDiagnostic &Error); } // end namespace llvm diff --git a/llvm/lib/CodeGen/MIRParser/MIRParser.cpp b/llvm/lib/CodeGen/MIRParser/MIRParser.cpp index e977973b1a5..4b0f9fe2dfc 100644 --- a/llvm/lib/CodeGen/MIRParser/MIRParser.cpp +++ b/llvm/lib/CodeGen/MIRParser/MIRParser.cpp @@ -102,44 +102,38 @@ public: /// Return true if error occurred. bool initializeMachineFunction(MachineFunction &MF); - bool initializeRegisterInfo(MachineFunction &MF, - const yaml::MachineFunction &YamlMF, - PerFunctionMIParsingState &PFS); + bool initializeRegisterInfo(PerFunctionMIParsingState &PFS, + const yaml::MachineFunction &YamlMF); - void inferRegisterInfo(MachineFunction &MF, + void inferRegisterInfo(const PerFunctionMIParsingState &PFS, const yaml::MachineFunction &YamlMF); - bool initializeFrameInfo(MachineFunction &MF, - const yaml::MachineFunction &YamlMF, - PerFunctionMIParsingState &PFS); + bool initializeFrameInfo(PerFunctionMIParsingState &PFS, + const yaml::MachineFunction &YamlMF); - bool parseCalleeSavedRegister(MachineFunction &MF, - PerFunctionMIParsingState &PFS, + bool parseCalleeSavedRegister(PerFunctionMIParsingState &PFS, std::vector<CalleeSavedInfo> &CSIInfo, const yaml::StringValue &RegisterSource, int FrameIdx); - bool parseStackObjectsDebugInfo(MachineFunction &MF, - PerFunctionMIParsingState &PFS, + bool parseStackObjectsDebugInfo(PerFunctionMIParsingState &PFS, const yaml::MachineStackObject &Object, int FrameIdx); - bool initializeConstantPool(MachineConstantPool &ConstantPool, - const yaml::MachineFunction &YamlMF, - const MachineFunction &MF, - DenseMap<unsigned, unsigned> &ConstantPoolSlots); + bool initializeConstantPool(PerFunctionMIParsingState &PFS, + MachineConstantPool &ConstantPool, + const yaml::MachineFunction &YamlMF); - bool initializeJumpTableInfo(MachineFunction &MF, - const yaml::MachineJumpTable &YamlJTI, - PerFunctionMIParsingState &PFS); + bool initializeJumpTableInfo(PerFunctionMIParsingState &PFS, + const yaml::MachineJumpTable &YamlJTI); private: - bool parseMDNode(MDNode *&Node, const yaml::StringValue &Source, - MachineFunction &MF, const PerFunctionMIParsingState &PFS); + bool parseMDNode(const PerFunctionMIParsingState &PFS, MDNode *&Node, + const yaml::StringValue &Source); - bool parseMBBReference(MachineBasicBlock *&MBB, - const yaml::StringValue &Source, MachineFunction &MF, - const PerFunctionMIParsingState &PFS); + bool parseMBBReference(const PerFunctionMIParsingState &PFS, + MachineBasicBlock *&MBB, + const yaml::StringValue &Source); /// Return a MIR diagnostic converted from an MI string diagnostic. SMDiagnostic diagFromMIStringDiag(const SMDiagnostic &Error, @@ -298,20 +292,19 @@ bool MIRParserImpl::initializeMachineFunction(MachineFunction &MF) { MF.setHasInlineAsm(YamlMF.HasInlineAsm); if (YamlMF.AllVRegsAllocated) MF.getProperties().set(MachineFunctionProperties::Property::AllVRegsAllocated); - PerFunctionMIParsingState PFS; - if (initializeRegisterInfo(MF, YamlMF, PFS)) + PerFunctionMIParsingState PFS(MF); + if (initializeRegisterInfo(PFS, YamlMF)) return true; if (!YamlMF.Constants.empty()) { auto *ConstantPool = MF.getConstantPool(); assert(ConstantPool && "Constant pool must be created"); - if (initializeConstantPool(*ConstantPool, YamlMF, MF, - PFS.ConstantPoolSlots)) + if (initializeConstantPool(PFS, *ConstantPool, YamlMF)) return true; } SMDiagnostic Error; - if (parseMachineBasicBlockDefinitions(MF, YamlMF.Body.Value.Value, PFS, - IRSlots, Error)) { + if (parseMachineBasicBlockDefinitions(PFS, YamlMF.Body.Value.Value, IRSlots, + Error)) { reportDiagnostic( diagFromBlockStringDiag(Error, YamlMF.Body.Value.SourceRange)); return true; @@ -322,17 +315,16 @@ bool MIRParserImpl::initializeMachineFunction(MachineFunction &MF) { "' requires at least one machine basic block in its body"); // Initialize the frame information after creating all the MBBs so that the // MBB references in the frame information can be resolved. - if (initializeFrameInfo(MF, YamlMF, PFS)) + if (initializeFrameInfo(PFS, YamlMF)) return true; // Initialize the jump table after creating all the MBBs so that the MBB // references can be resolved. if (!YamlMF.JumpTableInfo.Entries.empty() && - initializeJumpTableInfo(MF, YamlMF.JumpTableInfo, PFS)) + initializeJumpTableInfo(PFS, YamlMF.JumpTableInfo)) return true; // Parse the machine instructions after creating all of the MBBs so that the // parser can resolve the MBB references. - if (parseMachineInstructions(MF, YamlMF.Body.Value.Value, PFS, IRSlots, - Error)) { + if (parseMachineInstructions(PFS, YamlMF.Body.Value.Value, IRSlots, Error)) { reportDiagnostic( diagFromBlockStringDiag(Error, YamlMF.Body.Value.SourceRange)); return true; @@ -345,9 +337,9 @@ bool MIRParserImpl::initializeMachineFunction(MachineFunction &MF) { return false; } -bool MIRParserImpl::initializeRegisterInfo(MachineFunction &MF, - const yaml::MachineFunction &YamlMF, - PerFunctionMIParsingState &PFS) { +bool MIRParserImpl::initializeRegisterInfo(PerFunctionMIParsingState &PFS, + const yaml::MachineFunction &YamlMF) { + MachineFunction &MF = PFS.MF; MachineRegisterInfo &RegInfo = MF.getRegInfo(); assert(RegInfo.isSSA()); if (!YamlMF.IsSSA) @@ -389,9 +381,9 @@ bool MIRParserImpl::initializeRegisterInfo(MachineFunction &MF, Twine(VReg.ID.Value) + "'"); if (!VReg.PreferredRegister.Value.empty()) { unsigned PreferredReg = 0; - if (parseNamedRegisterReference(PreferredReg, SM, MF, - VReg.PreferredRegister.Value, PFS, - IRSlots, Error)) + if (parseNamedRegisterReference(PFS, PreferredReg, SM, + VReg.PreferredRegister.Value, IRSlots, + Error)) return error(Error, VReg.PreferredRegister.SourceRange); RegInfo.setSimpleHint(Reg, PreferredReg); } @@ -400,13 +392,13 @@ bool MIRParserImpl::initializeRegisterInfo(MachineFunction &MF, // Parse the liveins. for (const auto &LiveIn : YamlMF.LiveIns) { unsigned Reg = 0; - if (parseNamedRegisterReference(Reg, SM, MF, LiveIn.Register.Value, PFS, + if (parseNamedRegisterReference(PFS, Reg, SM, LiveIn.Register.Value, IRSlots, Error)) return error(Error, LiveIn.Register.SourceRange); unsigned VReg = 0; if (!LiveIn.VirtualRegister.Value.empty()) { if (parseVirtualRegisterReference( - VReg, SM, MF, LiveIn.VirtualRegister.Value, PFS, IRSlots, Error)) + PFS, VReg, SM, LiveIn.VirtualRegister.Value, IRSlots, Error)) return error(Error, LiveIn.VirtualRegister.SourceRange); } RegInfo.addLiveIn(Reg, VReg); @@ -418,7 +410,7 @@ bool MIRParserImpl::initializeRegisterInfo(MachineFunction &MF, return false; for (const auto &RegSource : YamlMF.CalleeSavedRegisters.getValue()) { unsigned Reg = 0; - if (parseNamedRegisterReference(Reg, SM, MF, RegSource.Value, PFS, IRSlots, + if (parseNamedRegisterReference(PFS, Reg, SM, RegSource.Value, IRSlots, Error)) return error(Error, RegSource.SourceRange); CalleeSavedRegisterMask[Reg] = true; @@ -427,24 +419,25 @@ bool MIRParserImpl::initializeRegisterInfo(MachineFunction &MF, return false; } -void MIRParserImpl::inferRegisterInfo(MachineFunction &MF, +void MIRParserImpl::inferRegisterInfo(const PerFunctionMIParsingState &PFS, const yaml::MachineFunction &YamlMF) { if (YamlMF.CalleeSavedRegisters) return; - for (const MachineBasicBlock &MBB : MF) { + MachineRegisterInfo &MRI = PFS.MF.getRegInfo(); + for (const MachineBasicBlock &MBB : PFS.MF) { for (const MachineInstr &MI : MBB) { for (const MachineOperand &MO : MI.operands()) { if (!MO.isRegMask()) continue; - MF.getRegInfo().addPhysRegsUsedFromRegMask(MO.getRegMask()); + MRI.addPhysRegsUsedFromRegMask(MO.getRegMask()); } } } } -bool MIRParserImpl::initializeFrameInfo(MachineFunction &MF, - const yaml::MachineFunction &YamlMF, - PerFunctionMIParsingState &PFS) { +bool MIRParserImpl::initializeFrameInfo(PerFunctionMIParsingState &PFS, + const yaml::MachineFunction &YamlMF) { + MachineFunction &MF = PFS.MF; MachineFrameInfo &MFI = *MF.getFrameInfo(); const Function &F = *MF.getFunction(); const yaml::MachineFrameInfo &YamlMFI = YamlMF.FrameInfo; @@ -464,13 +457,13 @@ bool MIRParserImpl::initializeFrameInfo(MachineFunction &MF, MFI.setHasMustTailInVarArgFunc(YamlMFI.HasMustTailInVarArgFunc); if (!YamlMFI.SavePoint.Value.empty()) { MachineBasicBlock *MBB = nullptr; - if (parseMBBReference(MBB, YamlMFI.SavePoint, MF, PFS)) + if (parseMBBReference(PFS, MBB, YamlMFI.SavePoint)) return true; MFI.setSavePoint(MBB); } if (!YamlMFI.RestorePoint.Value.empty()) { MachineBasicBlock *MBB = nullptr; - if (parseMBBReference(MBB, YamlMFI.RestorePoint, MF, PFS)) + if (parseMBBReference(PFS, MBB, YamlMFI.RestorePoint)) return true; MFI.setRestorePoint(MBB); } @@ -491,7 +484,7 @@ bool MIRParserImpl::initializeFrameInfo(MachineFunction &MF, return error(Object.ID.SourceRange.Start, Twine("redefinition of fixed stack object '%fixed-stack.") + Twine(Object.ID.Value) + "'"); - if (parseCalleeSavedRegister(MF, PFS, CSIInfo, Object.CalleeSavedRegister, + if (parseCalleeSavedRegister(PFS, CSIInfo, Object.CalleeSavedRegister, ObjectIdx)) return true; } @@ -522,12 +515,12 @@ bool MIRParserImpl::initializeFrameInfo(MachineFunction &MF, return error(Object.ID.SourceRange.Start, Twine("redefinition of stack object '%stack.") + Twine(Object.ID.Value) + "'"); - if (parseCalleeSavedRegister(MF, PFS, CSIInfo, Object.CalleeSavedRegister, + if (parseCalleeSavedRegister(PFS, CSIInfo, Object.CalleeSavedRegister, ObjectIdx)) return true; if (Object.LocalOffset) MFI.mapLocalFrameObject(ObjectIdx, Object.LocalOffset.getValue()); - if (parseStackObjectsDebugInfo(MF, PFS, Object, ObjectIdx)) + if (parseStackObjectsDebugInfo(PFS, Object, ObjectIdx)) return true; } MFI.setCalleeSavedInfo(CSIInfo); @@ -539,7 +532,7 @@ bool MIRParserImpl::initializeFrameInfo(MachineFunction &MF, if (!YamlMFI.StackProtector.Value.empty()) { SMDiagnostic Error; int FI; - if (parseStackObjectReference(FI, SM, MF, YamlMFI.StackProtector.Value, PFS, + if (parseStackObjectReference(PFS, FI, SM, YamlMFI.StackProtector.Value, IRSlots, Error)) return error(Error, YamlMFI.StackProtector.SourceRange); MFI.setStackProtectorIndex(FI); @@ -547,16 +540,15 @@ bool MIRParserImpl::initializeFrameInfo(MachineFunction &MF, return false; } -bool MIRParserImpl::parseCalleeSavedRegister( - MachineFunction &MF, PerFunctionMIParsingState &PFS, +bool MIRParserImpl::parseCalleeSavedRegister(PerFunctionMIParsingState &PFS, std::vector<CalleeSavedInfo> &CSIInfo, const yaml::StringValue &RegisterSource, int FrameIdx) { if (RegisterSource.Value.empty()) return false; unsigned Reg = 0; SMDiagnostic Error; - if (parseNamedRegisterReference(Reg, SM, MF, RegisterSource.Value, PFS, - IRSlots, Error)) + if (parseNamedRegisterReference(PFS, Reg, SM, RegisterSource.Value, IRSlots, + Error)) return error(Error, RegisterSource.SourceRange); CSIInfo.push_back(CalleeSavedInfo(Reg, FrameIdx)); return false; @@ -577,16 +569,15 @@ static bool typecheckMDNode(T *&Result, MDNode *Node, return false; } -bool MIRParserImpl::parseStackObjectsDebugInfo( - MachineFunction &MF, PerFunctionMIParsingState &PFS, +bool MIRParserImpl::parseStackObjectsDebugInfo(PerFunctionMIParsingState &PFS, const yaml::MachineStackObject &Object, int FrameIdx) { // Debug information can only be attached to stack objects; Fixed stack // objects aren't supported. assert(FrameIdx >= 0 && "Expected a stack object frame index"); MDNode *Var = nullptr, *Expr = nullptr, *Loc = nullptr; - if (parseMDNode(Var, Object.DebugVar, MF, PFS) || - parseMDNode(Expr, Object.DebugExpr, MF, PFS) || - parseMDNode(Loc, Object.DebugLoc, MF, PFS)) + if (parseMDNode(PFS, Var, Object.DebugVar) || + parseMDNode(PFS, Expr, Object.DebugExpr) || + parseMDNode(PFS, Loc, Object.DebugLoc)) return true; if (!Var && !Expr && !Loc) return false; @@ -597,25 +588,24 @@ bool MIRParserImpl::parseStackObjectsDebugInfo( typecheckMDNode(DIExpr, Expr, Object.DebugExpr, "DIExpression", *this) || typecheckMDNode(DILoc, Loc, Object.DebugLoc, "DILocation", *this)) return true; - MF.getMMI().setVariableDbgInfo(DIVar, DIExpr, unsigned(FrameIdx), DILoc); + PFS.MF.getMMI().setVariableDbgInfo(DIVar, DIExpr, unsigned(FrameIdx), DILoc); return false; } -bool MIRParserImpl::parseMDNode(MDNode *&Node, const yaml::StringValue &Source, - MachineFunction &MF, - const PerFunctionMIParsingState &PFS) { +bool MIRParserImpl::parseMDNode(const PerFunctionMIParsingState &PFS, + MDNode *&Node, const yaml::StringValue &Source) { if (Source.Value.empty()) return false; SMDiagnostic Error; - if (llvm::parseMDNode(Node, SM, MF, Source.Value, PFS, IRSlots, Error)) + if (llvm::parseMDNode(PFS, Node, SM, Source.Value, IRSlots, Error)) return error(Error, Source.SourceRange); return false; } -bool MIRParserImpl::initializeConstantPool( - MachineConstantPool &ConstantPool, const yaml::MachineFunction &YamlMF, - const MachineFunction &MF, - DenseMap<unsigned, unsigned> &ConstantPoolSlots) { +bool MIRParserImpl::initializeConstantPool(PerFunctionMIParsingState &PFS, + MachineConstantPool &ConstantPool, const yaml::MachineFunction &YamlMF) { + DenseMap<unsigned, unsigned> &ConstantPoolSlots = PFS.ConstantPoolSlots; + const MachineFunction &MF = PFS.MF; const auto &M = *MF.getFunction()->getParent(); SMDiagnostic Error; for (const auto &YamlConstant : YamlMF.Constants) { @@ -637,15 +627,14 @@ bool MIRParserImpl::initializeConstantPool( return false; } -bool MIRParserImpl::initializeJumpTableInfo( - MachineFunction &MF, const yaml::MachineJumpTable &YamlJTI, - PerFunctionMIParsingState &PFS) { - MachineJumpTableInfo *JTI = MF.getOrCreateJumpTableInfo(YamlJTI.Kind); +bool MIRParserImpl::initializeJumpTableInfo(PerFunctionMIParsingState &PFS, + const yaml::MachineJumpTable &YamlJTI) { + MachineJumpTableInfo *JTI = PFS.MF.getOrCreateJumpTableInfo(YamlJTI.Kind); for (const auto &Entry : YamlJTI.Entries) { std::vector<MachineBasicBlock *> Blocks; for (const auto &MBBSource : Entry.Blocks) { MachineBasicBlock *MBB = nullptr; - if (parseMBBReference(MBB, MBBSource.Value, MF, PFS)) + if (parseMBBReference(PFS, MBB, MBBSource.Value)) return true; Blocks.push_back(MBB); } @@ -659,12 +648,11 @@ bool MIRParserImpl::initializeJumpTableInfo( return false; } -bool MIRParserImpl::parseMBBReference(MachineBasicBlock *&MBB, - const yaml::StringValue &Source, - MachineFunction &MF, - const PerFunctionMIParsingState &PFS) { +bool MIRParserImpl::parseMBBReference(const PerFunctionMIParsingState &PFS, + MachineBasicBlock *&MBB, + const yaml::StringValue &Source) { SMDiagnostic Error; - if (llvm::parseMBBReference(MBB, SM, MF, Source.Value, PFS, IRSlots, Error)) + if (llvm::parseMBBReference(PFS, MBB, SM, Source.Value, IRSlots, Error)) return error(Error, Source.SourceRange); return false; } |