LLVM
8.0.1
|
The main class in the implementation of the target independent software pipeliner pass. More...
#include "llvm/CodeGen/MachinePipeliner.h"
Classes | |
struct | LoopInfo |
Cache the target analysis information about the loop. More... | |
Public Member Functions | |
MachinePipeliner () | |
bool | runOnMachineFunction (MachineFunction &MF) override |
The "main" function for implementing Swing Modulo Scheduling. More... | |
void | getAnalysisUsage (AnalysisUsage &AU) const override |
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this. More... | |
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. More... | |
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. More... | |
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. More... | |
PassManagerType | getPotentialPassManagerType () const override |
Return what kind of Pass Manager can manage this pass. More... | |
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. More... | |
AnalysisID | getPassID () const |
getPassID - Return the PassID number that corresponds to this pass. More... | |
virtual bool | doFinalization (Module &) |
doFinalization - Virtual method overriden by subclasses to do any necessary clean up after all passes have run. More... | |
virtual void | print (raw_ostream &OS, const Module *M) const |
print - Print out the internal state of the pass. More... | |
void | dump () const |
virtual void | preparePassManager (PMStack &) |
Check if available pass managers are suitable for this pass or not. More... | |
void | setResolver (AnalysisResolver *AR) |
AnalysisResolver * | getResolver () const |
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. More... | |
virtual void * | getAdjustedAnalysisPointer (AnalysisID ID) |
getAdjustedAnalysisPointer - This method is used when a pass implements an analysis interface through multiple inheritance. More... | |
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. More... | |
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. More... | |
bool | mustPreserveAnalysisID (char &AID) const |
mustPreserveAnalysisID - This method serves the same function as getAnalysisIfAvailable, but works if you just have an AnalysisID. More... | |
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. More... | |
template<typename AnalysisType > | |
AnalysisType & | getAnalysis (Function &F) |
getAnalysis<AnalysisType>() - This function is used by subclasses to get to the analysis information that they claim to use by overriding the getAnalysisUsage function. More... | |
template<typename AnalysisType > | |
AnalysisType & | getAnalysisID (AnalysisID PI) const |
template<typename AnalysisType > | |
AnalysisType & | getAnalysisID (AnalysisID PI, Function &F) |
Public Attributes | |
MachineFunction * | MF = nullptr |
const MachineLoopInfo * | MLI = nullptr |
const MachineDominatorTree * | MDT = nullptr |
const InstrItineraryData * | InstrItins |
const TargetInstrInfo * | TII = nullptr |
RegisterClassInfo | RegClassInfo |
LoopInfo | LI |
Static Public Attributes | |
static int | NumTries = 0 |
static char | ID = 0 |
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) |
Protected Member Functions inherited from llvm::MachineFunctionPass | |
MachineFunctionPass (char &ID) | |
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. More... | |
The main class in the implementation of the target independent software pipeliner pass.
Definition at line 58 of file MachinePipeliner.h.
|
inline |
Definition at line 83 of file MachinePipeliner.h.
References llvm::PassRegistry::getPassRegistry(), llvm::initializeMachinePipelinerPass(), and runOnMachineFunction().
|
inlineoverridevirtual |
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
For MachineFunctionPasses, calling AU.preservesCFG() indicates that the pass does not modify the MachineBasicBlock CFG.
Reimplemented from llvm::MachineFunctionPass.
Definition at line 89 of file MachinePipeliner.h.
References llvm::AnalysisUsage::addPreserved(), llvm::AnalysisUsage::addRequired(), B, and llvm::MachineFunctionPass::getAnalysisUsage().
|
overridevirtual |
The "main" function for implementing Swing Modulo Scheduling.
Implements llvm::MachineFunctionPass.
Definition at line 171 of file MachinePipeliner.cpp.
References llvm::TargetInstrInfo::analyzeBranch(), llvm::TargetInstrInfo::analyzeLoop(), assert(), B, llvm::MachineBasicBlock::begin(), llvm::MachinePipeliner::LoopInfo::BrCond, llvm::BuildMI(), llvm::MachineRegisterInfo::createVirtualRegister(), E, EnableSWP, EnableSWPOptSize, llvm::MachinePipeliner::LoopInfo::FBB, llvm::MachineBasicBlock::findDebugLoc(), llvm::AttributeList::FunctionIndex, llvm::MCInstrInfo::get(), llvm::LoopBase< BlockT, LoopT >::getBlocks(), llvm::MachineBasicBlock::getFirstNonPHI(), llvm::MachineBasicBlock::getFirstTerminator(), llvm::LoopBase< BlockT, LoopT >::getHeader(), llvm::LoopBase< BlockT, LoopT >::getLoopPreheader(), llvm::LoopBase< BlockT, LoopT >::getNumBlocks(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getRegClass(), llvm::MachineFunction::getRegInfo(), llvm::getRegState(), llvm::MachineOperand::getSubReg(), I, llvm::SlotIndexes::insertMachineInstrInMaps(), llvm::MachineBasicBlock::instr_end(), LI, llvm::MachinePipeliner::LoopInfo::LoopCompare, llvm::MachinePipeliner::LoopInfo::LoopInductionVar, llvm::make_range(), MF, MRI, NumTries, llvm::Attribute::OptimizeForSize, RegClassInfo, llvm::MachineOperand::setReg(), llvm::MachineOperand::setSubReg(), llvm::MachineBasicBlock::size(), llvm::size(), SwpLoopLimit, llvm::MachinePipeliner::LoopInfo::TBB, TII, and TII.
Referenced by MachinePipeliner().
|
static |
Definition at line 81 of file MachinePipeliner.h.
const InstrItineraryData* llvm::MachinePipeliner::InstrItins |
Definition at line 63 of file MachinePipeliner.h.
Referenced by getUnderlyingObjects().
LoopInfo llvm::MachinePipeliner::LI |
Definition at line 79 of file MachinePipeliner.h.
Referenced by runOnMachineFunction().
const MachineDominatorTree* llvm::MachinePipeliner::MDT = nullptr |
Definition at line 62 of file MachinePipeliner.h.
MachineFunction* llvm::MachinePipeliner::MF = nullptr |
Definition at line 60 of file MachinePipeliner.h.
Referenced by llvm::SwingSchedulerDAG::applyInstrChange(), computeLiveOuts(), llvm::SwingSchedulerDAG::finishBlock(), llvm::SwingSchedulerDAG::fixupRegisterOverlaps(), getUnderlyingObjects(), hasUseAfterLoop(), isIntersect(), llvm::SwingSchedulerDAG::isLoopCarriedDep(), removePhis(), runOnMachineFunction(), and llvm::SwingSchedulerDAG::SwingSchedulerDAG().
const MachineLoopInfo* llvm::MachinePipeliner::MLI = nullptr |
Definition at line 61 of file MachinePipeliner.h.
Referenced by isIntersect().
|
static |
Definition at line 68 of file MachinePipeliner.h.
Referenced by runOnMachineFunction().
RegisterClassInfo llvm::MachinePipeliner::RegClassInfo |
Definition at line 65 of file MachinePipeliner.h.
Referenced by computeLiveOuts(), and runOnMachineFunction().
const TargetInstrInfo* llvm::MachinePipeliner::TII = nullptr |
Definition at line 64 of file MachinePipeliner.h.
Referenced by llvm::SwingSchedulerDAG::applyInstrChange(), llvm::SwingSchedulerDAG::fixupRegisterOverlaps(), getUnderlyingObjects(), hasUseAfterLoop(), isIntersect(), llvm::SwingSchedulerDAG::isLoopCarriedDep(), removePhis(), and runOnMachineFunction().