LLVM  6.0.0svn
Public Member Functions | Protected Attributes | List of all members
llvm::LegacyInlinerBase Struct Referenceabstract

This class contains all of the helper code which is used to perform the inlining operations that do not depend on the policy. More...

#include "llvm/Transforms/IPO/Inliner.h"

Inheritance diagram for llvm::LegacyInlinerBase:
Inheritance graph
[legend]
Collaboration diagram for llvm::LegacyInlinerBase:
Collaboration graph
[legend]

Public Member Functions

 LegacyInlinerBase (char &ID)
 
 LegacyInlinerBase (char &ID, bool InsertLifetime)
 
void getAnalysisUsage (AnalysisUsage &Info) const override
 For this class, we declare that we require and preserve the call graph. More...
 
bool doInitialization (CallGraph &CG) override
 doInitialization - This method is called before the SCC's of the program has been processed, allowing the pass to do initialization as necessary. More...
 
bool runOnSCC (CallGraphSCC &SCC) override
 Main run interface method, this implements the interface required by the Pass class. More...
 
bool doFinalization (CallGraph &CG) override
 Remove now-dead linkonce functions at the end of processing to avoid breaking the SCC traversal. More...
 
virtual InlineCost getInlineCost (CallSite CS)=0
 This method must be implemented by the subclass to determine the cost of inlining the specified call site. More...
 
bool removeDeadFunctions (CallGraph &CG, bool AlwaysInlineOnly=false)
 Remove dead functions. More...
 
bool inlineCalls (CallGraphSCC &SCC)
 This function performs the main work of the pass. More...
 
- Public Member Functions inherited from llvm::CallGraphSCCPass
 CallGraphSCCPass (char &pid)
 
PasscreatePrinterPass (raw_ostream &OS, const std::string &Banner) const override
 createPrinterPass - Get a pass that prints the Module corresponding to a CallGraph. More...
 
void assignPassManager (PMStack &PMS, PassManagerType PMT) override
 Assign pass manager to manager this pass. 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
 
Passoperator= (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 doInitialization (Module &)
 doInitialization - Virtual method overridden by subclasses to do any necessary initialization before any pass is run. 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)
 
AnalysisResolvergetResolver () 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 ImmutablePassgetAsImmutablePass ()
 
virtual PMDataManagergetAsPMDataManager ()
 
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)
 

Protected Attributes

AssumptionCacheTrackerACT
 
ProfileSummaryInfoPSI
 
ImportedFunctionsInliningStatistics ImportedFunctionsStats
 

Additional Inherited Members

- Static Public Member Functions inherited from llvm::Pass
static const PassInfolookupPassInfo (const void *TI)
 
static const PassInfolookupPassInfo (StringRef Arg)
 
static PasscreatePass (AnalysisID ID)
 
- Protected Member Functions inherited from llvm::CallGraphSCCPass
bool skipSCC (CallGraphSCC &SCC) const
 Optional passes call this function to check whether the pass should be skipped. More...
 

Detailed Description

This class contains all of the helper code which is used to perform the inlining operations that do not depend on the policy.

It contains the core bottom-up inlining infrastructure that specific inliner passes use.

Definition at line 31 of file Inliner.h.

Constructor & Destructor Documentation

◆ LegacyInlinerBase() [1/2]

LegacyInlinerBase::LegacyInlinerBase ( char ID)
explicit

Definition at line 115 of file Inliner.cpp.

◆ LegacyInlinerBase() [2/2]

LegacyInlinerBase::LegacyInlinerBase ( char ID,
bool  InsertLifetime 
)
explicit

Definition at line 117 of file Inliner.cpp.

Member Function Documentation

◆ doFinalization()

bool LegacyInlinerBase::doFinalization ( CallGraph CG)
overridevirtual

Remove now-dead linkonce functions at the end of processing to avoid breaking the SCC traversal.

Reimplemented from llvm::CallGraphSCCPass.

Definition at line 707 of file Inliner.cpp.

References llvm::ImportedFunctionsInliningStatistics::dump(), ImportedFunctionsStats, and removeDeadFunctions().

◆ doInitialization()

bool LegacyInlinerBase::doInitialization ( CallGraph CG)
overridevirtual

doInitialization - This method is called before the SCC's of the program has been processed, allowing the pass to do initialization as necessary.

Reimplemented from llvm::CallGraphSCCPass.

Definition at line 452 of file Inliner.cpp.

References llvm::CallGraph::getModule(), ImportedFunctionsStats, and llvm::ImportedFunctionsInliningStatistics::setModuleInfo().

◆ getAnalysisUsage()

void LegacyInlinerBase::getAnalysisUsage ( AnalysisUsage AU) const
overridevirtual

For this class, we declare that we require and preserve the call graph.

If the derived class implements this method, it should always explicitly call the implementation here.

Reimplemented from llvm::CallGraphSCCPass.

Definition at line 123 of file Inliner.cpp.

References llvm::AnalysisUsage::addRequired(), llvm::getAAResultsAnalysisUsage(), and llvm::CallGraphSCCPass::getAnalysisUsage().

Referenced by llvm::createAMDGPUFunctionInliningPass(), and llvm::createFunctionInliningPass().

◆ getInlineCost()

virtual InlineCost llvm::LegacyInlinerBase::getInlineCost ( CallSite  CS)
pure virtual

This method must be implemented by the subclass to determine the cost of inlining the specified call site.

If the cost returned is greater than the current inline threshold, the call site is not inlined.

Referenced by inlineCalls(), and llvm::InlinerPass::run().

◆ inlineCalls()

bool LegacyInlinerBase::inlineCalls ( CallGraphSCC SCC)

This function performs the main work of the pass.

The default of Inlinter::runOnSCC() calls skipSCC() before calling this method, but derived classes which cannot be skipped can override that method and call this function unconditionally.

Definition at line 692 of file Inliner.cpp.

References ACT, F(), llvm::AssumptionCacheTracker::getAssumptionCache(), getInlineCost(), ImportedFunctionsStats, and inlineCallsImpl().

Referenced by runOnSCC().

◆ removeDeadFunctions()

bool LegacyInlinerBase::removeDeadFunctions ( CallGraph CG,
bool  AlwaysInlineOnly = false 
)

Remove dead functions.

Remove dead functions that are not included in DNR (Do Not Remove) list.

This also includes a hack in the form of the 'AlwaysInlineOnly' flag which restricts it to deleting functions with an 'AlwaysInline' attribute. This is useful for the InlineAlways pass that only wants to deal with that subset of the functions.

Definition at line 715 of file Inliner.cpp.

References llvm::array_pod_sort(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorBase::empty(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::SmallVectorImpl< T >::erase(), F(), llvm::filterDeadComdatFunctions(), llvm::CallGraph::getExternalCallingNode(), llvm::CallGraphNode::getFunction(), llvm::GlobalObject::hasComdat(), llvm::Function::hasFnAttribute(), llvm::GlobalValue::hasLocalLinkage(), I, llvm::GlobalValue::isDeclaration(), llvm::Function::isDefTriviallyDead(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::CallGraphNode::removeAnyCallEdgeTo(), and llvm::Constant::removeDeadConstantUsers().

Referenced by doFinalization().

◆ runOnSCC()

bool LegacyInlinerBase::runOnSCC ( CallGraphSCC SCC)
overridevirtual

Main run interface method, this implements the interface required by the Pass class.

Implements llvm::CallGraphSCCPass.

Definition at line 458 of file Inliner.cpp.

References inlineCalls(), and llvm::CallGraphSCCPass::skipSCC().

Referenced by llvm::createAMDGPUFunctionInliningPass(), and llvm::createFunctionInliningPass().

Member Data Documentation

◆ ACT

AssumptionCacheTracker* llvm::LegacyInlinerBase::ACT
protected

Definition at line 76 of file Inliner.h.

Referenced by inlineCalls().

◆ ImportedFunctionsStats

ImportedFunctionsInliningStatistics llvm::LegacyInlinerBase::ImportedFunctionsStats
protected

Definition at line 78 of file Inliner.h.

Referenced by doFinalization(), doInitialization(), and inlineCalls().

◆ PSI

ProfileSummaryInfo* llvm::LegacyInlinerBase::PSI
protected

Definition at line 77 of file Inliner.h.

Referenced by llvm::InlinerPass::run().


The documentation for this struct was generated from the following files: