LLVM 20.0.0git
|
This pass is responsible for selecting generic machine instructions to target-specific instructions. More...
#include "llvm/CodeGen/GlobalISel/InstructionSelect.h"
Classes | |
class | MIIteratorMaintainer |
This class observes instruction insertions/removals. More... | |
Public Member Functions | |
StringRef | getPassName () const override |
getPassName - Return a nice clean name for a pass. | |
void | getAnalysisUsage (AnalysisUsage &AU) const override |
getAnalysisUsage - This function should be overriden by passes that need analysis information to do their job. | |
MachineFunctionProperties | getRequiredProperties () const override |
MachineFunctionProperties | getSetProperties () const override |
InstructionSelect (CodeGenOptLevel OL=CodeGenOptLevel::Default, char &PassID=ID) | |
bool | runOnMachineFunction (MachineFunction &MF) override |
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformation or analysis. | |
bool | selectMachineFunction (MachineFunction &MF) |
void | setInstructionSelector (InstructionSelector *NewISel) |
Public Member Functions inherited from llvm::MachineFunctionPass | |
bool | doInitialization (Module &) override |
doInitialization - Virtual method overridden by subclasses to do any necessary initialization before any pass is run. | |
Public Member Functions inherited from llvm::FunctionPass | |
FunctionPass (char &pid) | |
Pass * | createPrinterPass (raw_ostream &OS, const std::string &Banner) const override |
createPrinterPass - Get a function printer pass. | |
virtual bool | runOnFunction (Function &F)=0 |
runOnFunction - Virtual method overriden by subclasses to do the per-function processing of the pass. | |
void | assignPassManager (PMStack &PMS, PassManagerType T) override |
Find appropriate Function Pass Manager or Call Graph Pass Manager in the PM Stack and add self into that manager. | |
PassManagerType | getPotentialPassManagerType () const override |
Return what kind of Pass Manager can manage this pass. | |
Public Member Functions inherited from llvm::Pass | |
Pass (PassKind K, char &pid) | |
Pass (const Pass &)=delete | |
Pass & | operator= (const Pass &)=delete |
virtual | ~Pass () |
PassKind | getPassKind () const |
virtual StringRef | getPassName () const |
getPassName - Return a nice clean name for a pass. | |
AnalysisID | getPassID () const |
getPassID - Return the PassID number that corresponds to this pass. | |
virtual bool | doInitialization (Module &) |
doInitialization - Virtual method overridden by subclasses to do any necessary initialization before any pass is run. | |
virtual bool | doFinalization (Module &) |
doFinalization - Virtual method overriden by subclasses to do any necessary clean up after all passes have run. | |
virtual void | print (raw_ostream &OS, const Module *M) const |
print - Print out the internal state of the pass. | |
void | dump () const |
virtual Pass * | createPrinterPass (raw_ostream &OS, const std::string &Banner) const =0 |
createPrinterPass - Get a Pass appropriate to print the IR this pass operates on (Module, Function or MachineFunction). | |
virtual void | assignPassManager (PMStack &, PassManagerType) |
Each pass is responsible for assigning a pass manager to itself. | |
virtual void | preparePassManager (PMStack &) |
Check if available pass managers are suitable for this pass or not. | |
virtual PassManagerType | getPotentialPassManagerType () const |
Return what kind of Pass Manager can manage this pass. | |
void | setResolver (AnalysisResolver *AR) |
AnalysisResolver * | getResolver () const |
virtual void | getAnalysisUsage (AnalysisUsage &) const |
getAnalysisUsage - This function should be overriden by passes that need analysis information to do their job. | |
virtual void | releaseMemory () |
releaseMemory() - This member can be implemented by a pass if it wants to be able to release its memory when it is no longer needed. | |
virtual void * | getAdjustedAnalysisPointer (AnalysisID ID) |
getAdjustedAnalysisPointer - This method is used when a pass implements an analysis interface through multiple inheritance. | |
virtual ImmutablePass * | getAsImmutablePass () |
virtual PMDataManager * | getAsPMDataManager () |
virtual void | verifyAnalysis () const |
verifyAnalysis() - This member can be implemented by a analysis pass to check state of analysis information. | |
virtual void | dumpPassStructure (unsigned Offset=0) |
template<typename AnalysisType > | |
AnalysisType * | getAnalysisIfAvailable () const |
getAnalysisIfAvailable<AnalysisType>() - Subclasses use this function to get analysis information that might be around, for example to update it. | |
bool | mustPreserveAnalysisID (char &AID) const |
mustPreserveAnalysisID - This method serves the same function as getAnalysisIfAvailable, but works if you just have an AnalysisID. | |
template<typename AnalysisType > | |
AnalysisType & | getAnalysis () const |
getAnalysis<AnalysisType>() - This function is used by subclasses to get to the analysis information that they claim to use by overriding the getAnalysisUsage function. | |
template<typename AnalysisType > | |
AnalysisType & | getAnalysis (Function &F, bool *Changed=nullptr) |
getAnalysis<AnalysisType>() - This function is used by subclasses to get to the analysis information that they claim to use by overriding the getAnalysisUsage function. | |
template<typename AnalysisType > | |
AnalysisType & | getAnalysisID (AnalysisID PI) const |
template<typename AnalysisType > | |
AnalysisType & | getAnalysisID (AnalysisID PI, Function &F, bool *Changed=nullptr) |
Static Public Attributes | |
static char | ID = 0 |
Protected Member Functions | |
bool | selectInstr (MachineInstr &MI) |
Protected Member Functions inherited from llvm::MachineFunctionPass | |
MachineFunctionPass (char &ID) | |
virtual bool | runOnMachineFunction (MachineFunction &MF)=0 |
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformation or analysis. | |
void | getAnalysisUsage (AnalysisUsage &AU) const override |
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this. | |
virtual MachineFunctionProperties | getRequiredProperties () const |
virtual MachineFunctionProperties | getSetProperties () const |
virtual MachineFunctionProperties | getClearedProperties () const |
Protected Member Functions inherited from llvm::FunctionPass | |
bool | skipFunction (const Function &F) const |
Optional passes call this function to check whether the pass should be skipped. | |
Protected Attributes | |
InstructionSelector * | ISel = nullptr |
GISelKnownBits * | KB = nullptr |
BlockFrequencyInfo * | BFI = nullptr |
ProfileSummaryInfo * | PSI = nullptr |
CodeGenOptLevel | OptLevel = CodeGenOptLevel::None |
Additional Inherited Members | |
Static Public Member Functions inherited from llvm::Pass | |
static const PassInfo * | lookupPassInfo (const void *TI) |
static const PassInfo * | lookupPassInfo (StringRef Arg) |
static Pass * | createPass (AnalysisID ID) |
This pass is responsible for selecting generic machine instructions to target-specific instructions.
It relies on the InstructionSelector provided by the target. Selection is done by examining blocks in post-order, and instructions in reverse order.
Definition at line 35 of file InstructionSelect.h.
Select target instructions out of generic false InstructionSelect::InstructionSelect | ( | CodeGenOptLevel | OL = CodeGenOptLevel::Default , |
char & | PassID = ID |
||
) |
Definition at line 66 of file InstructionSelect.cpp.
|
overridevirtual |
getAnalysisUsage - This function should be overriden by passes that need analysis information to do their job.
If a pass specifies that it uses a particular analysis result to this function, it can then use the getAnalysis<AnalysisType>() function, below.
Reimplemented from llvm::Pass.
Definition at line 121 of file InstructionSelect.cpp.
References llvm::AnalysisUsage::addPreserved(), llvm::AnalysisUsage::addRequired(), llvm::MachineFunctionPass::getAnalysisUsage(), llvm::LazyBlockFrequencyInfoPass::getLazyBFIAnalysisUsage(), llvm::getSelectionDAGFallbackAnalysisUsage(), llvm::None, and OptLevel.
|
inlineoverridevirtual |
getPassName - Return a nice clean name for a pass.
This usually implemented in terms of the name that is registered by one of the Registration templates, but can be overloaded directly.
Reimplemented from llvm::Pass.
Definition at line 38 of file InstructionSelect.h.
|
inlineoverridevirtual |
Reimplemented from llvm::MachineFunctionPass.
Definition at line 42 of file InstructionSelect.h.
References llvm::MachineFunctionProperties::IsSSA, llvm::MachineFunctionProperties::Legalized, llvm::MachineFunctionProperties::RegBankSelected, and llvm::MachineFunctionProperties::set().
|
inlineoverridevirtual |
Reimplemented from llvm::MachineFunctionPass.
Definition at line 49 of file InstructionSelect.h.
References llvm::MachineFunctionProperties::Selected, and llvm::MachineFunctionProperties::set().
|
overridevirtual |
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformation or analysis.
Implements llvm::MachineFunctionPass.
Definition at line 134 of file InstructionSelect.cpp.
References BFI, llvm::MachineFunctionProperties::FailedISel, llvm::MachineFunction::getFunction(), llvm::TargetSubtargetInfo::getInstructionSelector(), llvm::TargetMachine::getOptLevel(), llvm::MachineFunction::getProperties(), llvm::MachineFunction::getSubtarget(), llvm::MachineFunction::getTarget(), llvm::Function::hasOptNone(), llvm::ProfileSummaryInfo::hasProfileSummary(), llvm::MachineFunctionProperties::hasProperty(), ISel, KB, llvm::make_scope_exit(), llvm::None, OptLevel, PSI, selectMachineFunction(), and llvm::InstructionSelector::TPC.
|
protected |
Definition at line 351 of file InstructionSelect.cpp.
References assert(), llvm::canReplaceReg(), llvm::dbgs(), llvm::MachineFunction::getRegInfo(), ISel, llvm::isPreISelGenericOptimizationHint(), llvm::isTriviallyDead(), LLVM_DEBUG, llvm::GIMatchTableExecutor::MF, MI, MRI, llvm::salvageDebugInfo(), and llvm::InstructionSelector::select().
Referenced by selectMachineFunction().
bool InstructionSelect::selectMachineFunction | ( | MachineFunction & | MF | ) |
Definition at line 159 of file InstructionSelect.cpp.
References llvm::GISelObserverWrapper::addObserver(), llvm::InstructionSelector::AllObservers, assert(), BFI, llvm::MachineBasicBlock::clear(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::contains(), CoveragePrefix, llvm::CodeGenCoverage::covered(), llvm::GIMatchTableExecutor::CurMBB, llvm::dbgs(), llvm::DisableGISelLegalityCheck, llvm::CodeGenCoverage::emit(), llvm::MachineBasicBlock::empty(), End, llvm::MachineFunctionProperties::FailedISel, llvm::TargetLoweringBase::finalizeLowering(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getName(), llvm::MachineFunction::getProperties(), llvm::MachineFunction::getRegInfo(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::LLT::getSizeInBits(), llvm::Function::getSubprogram(), llvm::MachineFunction::getSubtarget(), llvm::TargetSubtargetInfo::getTargetLowering(), llvm::MachineFrameInfo::hasCalls(), llvm::MachineFunction::hasInlineAsm(), I, llvm::Register::index2VirtReg(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), ISel, llvm::details::FixedOrScalableQuantity< TypeSize, uint64_t >::isKnownGT(), llvm::LLT::isValid(), llvm::Register::isVirtual(), KB, LLVM_DEBUG, llvm::machineFunctionIsIllegal(), MBB, MI, llvm::InstructionSelect::MIIteratorMaintainer::MII, llvm::InstructionSelector::MORE, MORE, MRI, llvm::post_order(), PSI, llvm::MachineBasicBlock::rbegin(), llvm::MachineBasicBlock::rend(), llvm::InstructionSelect::MIIteratorMaintainer::reportFullyCreatedInstrs(), llvm::reportGISelFailure(), selectInstr(), llvm::MachineFunctionProperties::set(), llvm::MachineFrameInfo::setHasCalls(), llvm::MachineFunction::setHasInlineAsm(), llvm::GIMatchTableExecutor::setupMF(), llvm::DebugCounter::shouldExecute(), llvm::MachineFunction::size(), llvm::InstructionSelector::TPC, and TRI.
Referenced by runOnMachineFunction().
|
inline |
Definition at line 59 of file InstructionSelect.h.
References ISel.
|
protected |
Definition at line 66 of file InstructionSelect.h.
Referenced by runOnMachineFunction(), and selectMachineFunction().
|
static |
Definition at line 37 of file InstructionSelect.h.
|
protected |
Definition at line 64 of file InstructionSelect.h.
Referenced by runOnMachineFunction(), selectInstr(), selectMachineFunction(), and setInstructionSelector().
|
protected |
Definition at line 65 of file InstructionSelect.h.
Referenced by runOnMachineFunction(), and selectMachineFunction().
|
protected |
Definition at line 69 of file InstructionSelect.h.
Referenced by getAnalysisUsage(), and runOnMachineFunction().
|
protected |
Definition at line 67 of file InstructionSelect.h.
Referenced by runOnMachineFunction(), and selectMachineFunction().