LLVM 20.0.0git
Classes | Public Member Functions | List of all members
llvm::MIRParserImpl Class Reference

This class implements the parsing of LLVM IR that's embedded inside a MIR file. More...

Classes

struct  VarExprLoc
 

Public Member Functions

 MIRParserImpl (std::unique_ptr< MemoryBuffer > Contents, StringRef Filename, LLVMContext &Context, std::function< void(Function &)> ProcessIRFunction)
 
void reportDiagnostic (const SMDiagnostic &Diag)
 
bool error (const Twine &Message)
 Report an error with the given message at unknown location.
 
bool error (SMLoc Loc, const Twine &Message)
 Report an error with the given message at the given location.
 
bool error (const SMDiagnostic &Error, SMRange SourceRange)
 Report a given error with the location translated from the location in an embedded string literal to a location in the MIR file.
 
std::unique_ptr< ModuleparseIRModule (DataLayoutCallbackTy DataLayoutCallback)
 Try to parse the optional LLVM module and the machine functions in the MIR file.
 
FunctioncreateDummyFunction (StringRef Name, Module &M)
 Create an empty function with the given name.
 
bool parseMachineFunctions (Module &M, MachineModuleInfo &MMI, ModuleAnalysisManager *FAM=nullptr)
 
bool parseMachineFunction (Module &M, MachineModuleInfo &MMI, ModuleAnalysisManager *FAM)
 Parse the machine function in the current YAML document.
 
bool initializeMachineFunction (const yaml::MachineFunction &YamlMF, MachineFunction &MF)
 Initialize the machine function to the state that's described in the MIR file.
 
bool parseRegisterInfo (PerFunctionMIParsingState &PFS, const yaml::MachineFunction &YamlMF)
 
bool setupRegisterInfo (const PerFunctionMIParsingState &PFS, const yaml::MachineFunction &YamlMF)
 
bool initializeFrameInfo (PerFunctionMIParsingState &PFS, const yaml::MachineFunction &YamlMF)
 
bool initializeCallSiteInfo (PerFunctionMIParsingState &PFS, const yaml::MachineFunction &YamlMF)
 
bool parseCalleeSavedRegister (PerFunctionMIParsingState &PFS, std::vector< CalleeSavedInfo > &CSIInfo, const yaml::StringValue &RegisterSource, bool IsRestored, int FrameIdx)
 
std::optional< VarExprLocparseVarExprLoc (PerFunctionMIParsingState &PFS, const yaml::StringValue &VarStr, const yaml::StringValue &ExprStr, const yaml::StringValue &LocStr)
 
template<typename T >
bool parseStackObjectsDebugInfo (PerFunctionMIParsingState &PFS, const T &Object, int FrameIdx)
 
bool initializeConstantPool (PerFunctionMIParsingState &PFS, MachineConstantPool &ConstantPool, const yaml::MachineFunction &YamlMF)
 
bool initializeJumpTableInfo (PerFunctionMIParsingState &PFS, const yaml::MachineJumpTable &YamlJTI)
 
bool parseMachineMetadataNodes (PerFunctionMIParsingState &PFS, MachineFunction &MF, const yaml::MachineFunction &YMF)
 

Detailed Description

This class implements the parsing of LLVM IR that's embedded inside a MIR file.

Definition at line 51 of file MIRParser.cpp.

Constructor & Destructor Documentation

◆ MIRParserImpl()

MIRParserImpl::MIRParserImpl ( std::unique_ptr< MemoryBuffer Contents,
StringRef  Filename,
LLVMContext Context,
std::function< void(Function &)>  ProcessIRFunction 
)

Definition at line 193 of file MIRParser.cpp.

Member Function Documentation

◆ createDummyFunction()

Function * MIRParserImpl::createDummyFunction ( StringRef  Name,
Module M 
)

Create an empty function with the given name.

Definition at line 296 of file MIRParser.cpp.

References llvm::Function::Create(), llvm::BasicBlock::Create(), llvm::GlobalValue::ExternalLinkage, F, llvm::FunctionType::get(), llvm::Type::getVoidTy(), and Name.

Referenced by parseMachineFunction().

◆ error() [1/3]

bool MIRParserImpl::error ( const SMDiagnostic Error,
SMRange  SourceRange 
)

Report a given error with the location translated from the location in an embedded string literal to a location in the MIR file.

Always returns true.

Definition at line 216 of file MIRParser.cpp.

References assert(), llvm::SourceMgr::DK_Error, and reportDiagnostic().

◆ error() [2/3]

bool MIRParserImpl::error ( const Twine Message)

Report an error with the given message at unknown location.

Always returns true.

Definition at line 204 of file MIRParser.cpp.

References llvm::LLVMContext::diagnose(), llvm::SourceMgr::DK_Error, llvm::DS_Error, and llvm::Twine::str().

Referenced by typecheckMDNode().

◆ error() [3/3]

bool MIRParserImpl::error ( SMLoc  Loc,
const Twine Message 
)

Report an error with the given message at the given location.

Always returns true.

Definition at line 210 of file MIRParser.cpp.

References llvm::LLVMContext::diagnose(), llvm::SourceMgr::DK_Error, llvm::DS_Error, and llvm::SourceMgr::GetMessage().

◆ initializeCallSiteInfo()

bool MIRParserImpl::initializeCallSiteInfo ( PerFunctionMIParsingState PFS,
const yaml::MachineFunction YamlMF 
)

◆ initializeConstantPool()

bool MIRParserImpl::initializeConstantPool ( PerFunctionMIParsingState PFS,
MachineConstantPool ConstantPool,
const yaml::MachineFunction YamlMF 
)

◆ initializeFrameInfo()

bool MIRParserImpl::initializeFrameInfo ( PerFunctionMIParsingState PFS,
const yaml::MachineFunction YamlMF 
)

Definition at line 758 of file MIRParser.cpp.

References llvm::yaml::MachineFrameInfo::AdjustsStack, llvm::MachineFrameInfo::CreateFixedObject(), llvm::MachineFrameInfo::CreateFixedSpillStackObject(), llvm::MachineFrameInfo::CreateStackObject(), llvm::MachineFrameInfo::CreateVariableSizedObject(), llvm::yaml::MachineFrameInfo::CVBytesOfCalleeSavedRegisters, llvm::MachineFrameInfo::ensureMaxAlignment(), llvm::yaml::MachineFunction::EntryValueObjects, error, F, llvm::yaml::MachineFunction::FixedStackObjects, llvm::PerFunctionMIParsingState::FixedStackObjectSlots, llvm::yaml::MachineFunction::FrameInfo, llvm::yaml::MachineFrameInfo::FunctionContext, llvm::MachineFunction::getFrameInfo(), llvm::TargetSubtargetInfo::getFrameLowering(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getSubtarget(), llvm::yaml::MachineFrameInfo::HasCalls, llvm::yaml::MachineFrameInfo::HasMustTailInVarArgFunc, llvm::yaml::MachineFrameInfo::HasOpaqueSPAdjustment, llvm::yaml::MachineFrameInfo::HasPatchPoint, llvm::yaml::MachineFrameInfo::HasStackMap, llvm::yaml::MachineFrameInfo::HasTailCall, llvm::yaml::MachineFrameInfo::HasVAStart, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::insert(), llvm::yaml::MachineFrameInfo::IsCalleeSavedInfoValid, llvm::yaml::MachineFrameInfo::IsFrameAddressTaken, llvm::yaml::MachineFrameInfo::IsReturnAddressTaken, llvm::TargetFrameLowering::isSupportedStackID(), llvm::yaml::MachineFrameInfo::LocalFrameSize, llvm::MachineFrameInfo::mapLocalFrameObject(), llvm::yaml::MachineFrameInfo::MaxAlignment, llvm::yaml::MachineFrameInfo::MaxCallFrameSize, MBB, llvm::PerFunctionMIParsingState::MF, Name, llvm::yaml::MachineFrameInfo::OffsetAdjustment, parseCalleeSavedRegister(), llvm::parseNamedRegisterReference(), llvm::parseStackObjectReference(), parseStackObjectsDebugInfo(), parseVarExprLoc(), llvm::yaml::MachineFrameInfo::RestorePoint, llvm::yaml::MachineFrameInfo::SavePoint, llvm::MachineFrameInfo::setAdjustsStack(), llvm::MachineFrameInfo::setCalleeSavedInfo(), llvm::MachineFrameInfo::setCalleeSavedInfoValid(), llvm::MachineFrameInfo::setCVBytesOfCalleeSavedRegisters(), llvm::MachineFrameInfo::setFrameAddressIsTaken(), llvm::MachineFrameInfo::setFunctionContextIndex(), llvm::MachineFrameInfo::setHasCalls(), llvm::MachineFrameInfo::setHasMustTailInVarArgFunc(), llvm::MachineFrameInfo::setHasOpaqueSPAdjustment(), llvm::MachineFrameInfo::setHasPatchPoint(), llvm::MachineFrameInfo::setHasStackMap(), llvm::MachineFrameInfo::setHasTailCall(), llvm::MachineFrameInfo::setHasVAStart(), llvm::MachineFrameInfo::setLocalFrameSize(), llvm::MachineFrameInfo::setMaxCallFrameSize(), llvm::MachineFrameInfo::setObjectAlignment(), llvm::MachineFrameInfo::setObjectOffset(), llvm::MachineFrameInfo::setOffsetAdjustment(), llvm::MachineFrameInfo::setRestorePoint(), llvm::MachineFrameInfo::setReturnAddressIsTaken(), llvm::MachineFrameInfo::setSavePoint(), llvm::MachineFrameInfo::setStackID(), llvm::MachineFrameInfo::setStackProtectorIndex(), llvm::MachineFrameInfo::setStackSize(), llvm::MachineFunction::setVariableDbgInfo(), llvm::yaml::StringValue::SourceRange, llvm::yaml::MachineStackObject::SpillSlot, llvm::yaml::FixedMachineStackObject::SpillSlot, llvm::yaml::MachineFunction::StackObjects, llvm::PerFunctionMIParsingState::StackObjectSlots, llvm::yaml::MachineFrameInfo::StackProtector, llvm::yaml::MachineFrameInfo::StackSize, llvm::yaml::StringValue::Value, and llvm::yaml::MachineStackObject::VariableSized.

Referenced by initializeMachineFunction().

◆ initializeJumpTableInfo()

bool MIRParserImpl::initializeJumpTableInfo ( PerFunctionMIParsingState PFS,
const yaml::MachineJumpTable YamlJTI 
)

◆ initializeMachineFunction()

bool MIRParserImpl::initializeMachineFunction ( const yaml::MachineFunction YamlMF,
MachineFunction MF 
)

Initialize the machine function to the state that's described in the MIR file.

Return true if error occurred.

Definition at line 480 of file MIRParser.cpp.

References llvm::SourceMgr::AddNewSourceBuffer(), llvm::yaml::MachineFunction::Alignment, assert(), llvm::MachineFunction::assignBeginEndSections(), llvm::yaml::MachineFunction::Body, llvm::yaml::MachineFunction::CallsEHReturn, llvm::yaml::MachineFunction::CallsUnwindInit, llvm::yaml::MachineFunction::Constants, llvm::yaml::MachineJumpTable::Entries, error, llvm::yaml::MachineFunction::ExposesReturnsTwice, llvm::MachineFunctionProperties::FailedISel, llvm::yaml::MachineFunction::FailedISel, llvm::MachineFunctionProperties::FailsVerification, llvm::yaml::MachineFunction::FailsVerification, llvm::TargetMachine::getBBSectionsType(), llvm::MachineFunction::getConstantPool(), llvm::MemoryBuffer::getMemBuffer(), llvm::MachineFunction::getProperties(), llvm::MachineFunction::getRegInfo(), llvm::MachineFunction::getSubtarget(), llvm::MachineFunction::getTarget(), llvm::MachineFunction::hasBBSections(), llvm::yaml::MachineFunction::HasEHCatchret, llvm::yaml::MachineFunction::HasEHFunclets, llvm::yaml::MachineFunction::HasEHScopes, llvm::yaml::MachineFunction::HasWinCFI, initializeCallSiteInfo(), initializeConstantPool(), initializeFrameInfo(), initializeJumpTableInfo(), llvm::yaml::MachineFunction::IsOutlined, llvm::yaml::MachineFunction::JumpTableInfo, llvm::Labels, llvm::MachineFunctionProperties::Legalized, llvm::yaml::MachineFunction::Legalized, llvm::yaml::MachineFunction::MachineFuncInfo, llvm::yaml::MachineFunction::MachineMetadataNodes, llvm::TargetSubtargetInfo::mirFileLoaded(), MRI, llvm::parseMachineBasicBlockDefinitions(), llvm::parseMachineInstructions(), parseMachineMetadataNodes(), parseRegisterInfo(), llvm::MachineFunctionProperties::RegBankSelected, llvm::yaml::MachineFunction::RegBankSelected, reportDiagnostic(), llvm::MachineFunctionProperties::Selected, llvm::yaml::MachineFunction::Selected, llvm::MachineFunctionProperties::set(), llvm::MachineFunction::setAlignment(), llvm::MachineFunction::setBBSectionsType(), llvm::MachineFunction::setCallsEHReturn(), llvm::MachineFunction::setCallsUnwindInit(), llvm::MachineFunction::setExposesReturnsTwice(), llvm::MachineFunction::setHasEHCatchret(), llvm::MachineFunction::setHasEHFunclets(), llvm::MachineFunction::setHasEHScopes(), llvm::MachineFunction::setHasWinCFI(), llvm::MachineFunction::setIsOutlined(), setupRegisterInfo(), llvm::PerFunctionMIParsingState::SM, llvm::yaml::StringValue::SourceRange, llvm::MachineFunctionProperties::TracksDebugUserValues, llvm::yaml::MachineFunction::TracksDebugUserValues, llvm::yaml::StringValue::Value, llvm::yaml::BlockStringValue::Value, llvm::MaybeAlign::valueOrOne(), and llvm::MachineFunction::verify().

Referenced by parseMachineFunction().

◆ parseCalleeSavedRegister()

bool MIRParserImpl::parseCalleeSavedRegister ( PerFunctionMIParsingState PFS,
std::vector< CalleeSavedInfo > &  CSIInfo,
const yaml::StringValue RegisterSource,
bool  IsRestored,
int  FrameIdx 
)

◆ parseIRModule()

std::unique_ptr< Module > MIRParserImpl::parseIRModule ( DataLayoutCallbackTy  DataLayoutCallback)

Try to parse the optional LLVM module and the machine functions in the MIR file.

Return null if an error occurred.

Definition at line 242 of file MIRParser.cpp.

References llvm::parseAssembly(), and reportDiagnostic().

◆ parseMachineFunction()

bool MIRParserImpl::parseMachineFunction ( Module M,
MachineModuleInfo MMI,
ModuleAnalysisManager FAM 
)

◆ parseMachineFunctions()

bool MIRParserImpl::parseMachineFunctions ( Module M,
MachineModuleInfo MMI,
ModuleAnalysisManager FAM = nullptr 
)

Definition at line 281 of file MIRParser.cpp.

References MAM, and parseMachineFunction().

◆ parseMachineMetadataNodes()

bool MIRParserImpl::parseMachineMetadataNodes ( PerFunctionMIParsingState PFS,
MachineFunction MF,
const yaml::MachineFunction YMF 
)

◆ parseRegisterInfo()

bool MIRParserImpl::parseRegisterInfo ( PerFunctionMIParsingState PFS,
const yaml::MachineFunction YamlMF 
)

◆ parseStackObjectsDebugInfo()

template<typename T >
bool MIRParserImpl::parseStackObjectsDebugInfo ( PerFunctionMIParsingState PFS,
const T Object,
int  FrameIdx 
)

◆ parseVarExprLoc()

std::optional< MIRParserImpl::VarExprLoc > MIRParserImpl::parseVarExprLoc ( PerFunctionMIParsingState PFS,
const yaml::StringValue VarStr,
const yaml::StringValue ExprStr,
const yaml::StringValue LocStr 
)

Definition at line 938 of file MIRParser.cpp.

References typecheckMDNode().

Referenced by initializeFrameInfo(), and parseStackObjectsDebugInfo().

◆ reportDiagnostic()

void MIRParserImpl::reportDiagnostic ( const SMDiagnostic Diag)

◆ setupRegisterInfo()

bool MIRParserImpl::setupRegisterInfo ( const PerFunctionMIParsingState PFS,
const yaml::MachineFunction YamlMF 
)

The documentation for this class was generated from the following file: