LLVM  7.0.0svn
Public Types | Public Member Functions | Static Public Member Functions | List of all members
llvm::ModuleSummaryIndex Class Reference

Class to hold module path string table and global value map, and encapsulate methods for operating on them. More...

#include "llvm/IR/ModuleSummaryIndex.h"

Public Types

typedef ModulePathStringTableTy::value_type ModuleInfo
 

Public Member Functions

 ModuleSummaryIndex (bool HaveGVs)
 
bool haveGVs () const
 
gvsummary_iterator begin ()
 
const_gvsummary_iterator begin () const
 
gvsummary_iterator end ()
 
const_gvsummary_iterator end () const
 
size_t size () const
 
FunctionSummary calculateCallGraphRoot ()
 
bool withGlobalValueDeadStripping () const
 
void setWithGlobalValueDeadStripping ()
 
bool skipModuleByDistributedBackend () const
 
void setSkipModuleByDistributedBackend ()
 
bool isGlobalValueLive (const GlobalValueSummary *GVS) const
 
bool isGUIDLive (GlobalValue::GUID GUID) const
 
ValueInfo getValueInfo (const GlobalValueSummaryMapTy::value_type &R) const
 Return a ValueInfo for the index value_type (convenient when iterating index). More...
 
ValueInfo getValueInfo (GlobalValue::GUID GUID) const
 Return a ValueInfo for GUID if it exists, otherwise return ValueInfo(). More...
 
ValueInfo getOrInsertValueInfo (GlobalValue::GUID GUID)
 Return a ValueInfo for GUID. More...
 
ValueInfo getOrInsertValueInfo (GlobalValue::GUID GUID, StringRef Name)
 Return a ValueInfo for GUID setting value Name. More...
 
ValueInfo getOrInsertValueInfo (const GlobalValue *GV)
 Return a ValueInfo for GV and mark it as belonging to GV. More...
 
GlobalValue::GUID getGUIDFromOriginalID (GlobalValue::GUID OriginalID) const
 Return the GUID for OriginalId in the OidGuidMap. More...
 
std::set< std::string > & cfiFunctionDefs ()
 
const std::set< std::string > & cfiFunctionDefs () const
 
std::set< std::string > & cfiFunctionDecls ()
 
const std::set< std::string > & cfiFunctionDecls () const
 
void addGlobalValueSummary (StringRef ValueName, std::unique_ptr< GlobalValueSummary > Summary)
 Add a global value summary for a value of the given name. More...
 
void addGlobalValueSummary (ValueInfo VI, std::unique_ptr< GlobalValueSummary > Summary)
 Add a global value summary for the given ValueInfo. More...
 
void addOriginalName (GlobalValue::GUID ValueGUID, GlobalValue::GUID OrigGUID)
 Add an original name for the value of the given GUID. More...
 
GlobalValueSummaryfindSummaryInModule (GlobalValue::GUID ValueGUID, StringRef ModuleId) const
 Find the summary for global GUID in module ModuleId, or nullptr if not found. More...
 
GlobalValueSummarygetGlobalValueSummary (const GlobalValue &GV, bool PerModuleIndex=true) const
 Returns the first GlobalValueSummary for GV, asserting that there is only one if PerModuleIndex. More...
 
GlobalValueSummarygetGlobalValueSummary (GlobalValue::GUID ValueGUID, bool PerModuleIndex=true) const
 Returns the first GlobalValueSummary for ValueGUID, asserting that there is only one if PerModuleIndex. More...
 
const StringMap< std::pair< uint64_t, ModuleHash > > & modulePaths () const
 Table of modules, containing module hash and id. More...
 
StringMap< std::pair< uint64_t, ModuleHash > > & modulePaths ()
 Table of modules, containing hash and id. More...
 
uint64_t getModuleId (const StringRef ModPath) const
 Get the module ID recorded for the given module path. More...
 
const ModuleHashgetModuleHash (const StringRef ModPath) const
 Get the module SHA1 hash recorded for the given module path. More...
 
ModuleInfoaddModule (StringRef ModPath, uint64_t ModId, ModuleHash Hash=ModuleHash{{0}})
 Add a new module with the given Hash, mapped to the given ModID, and return a reference to the module. More...
 
bool hasExportedFunctions (const Module &M) const
 Check if the given Module has any functions available for exporting in the index. More...
 
const std::map< std::string, TypeIdSummary > & typeIds () const
 
TypeIdSummarygetOrInsertTypeIdSummary (StringRef TypeId)
 This accessor should only be used when exporting because it can mutate the map. More...
 
const TypeIdSummarygetTypeIdSummary (StringRef TypeId) const
 This returns either a pointer to the type id summary (if present in the summary map) or null (if not present). More...
 
void collectDefinedFunctionsForModule (StringRef ModulePath, GVSummaryMapTy &GVSummaryMap) const
 Collect for the given module the list of function it defines (GUID -> Summary). More...
 
void collectDefinedGVSummariesPerModule (StringMap< GVSummaryMapTy > &ModuleToDefinedGVSummaries) const
 Collect for each module the list of Summaries it defines (GUID -> Summary). More...
 
void print (raw_ostream &OS, bool IsForDebug=false) const
 Print to an output stream. More...
 
void dump () const
 Dump to stderr (for debugging). More...
 
void exportToDot (raw_ostream &OS) const
 Export summary to dot file for GraphViz. More...
 
void dumpSCCs (raw_ostream &OS)
 Print out strongly connected components for debugging. More...
 

Static Public Member Functions

static void discoverNodes (ValueInfo V, std::map< ValueInfo, bool > &FunctionHasParent)
 Convenience function for doing a DFS on a ValueInfo. More...
 
static std::string getGlobalNameForLocal (StringRef Name, ModuleHash ModHash)
 Convenience method for creating a promoted global name for the given value name of a local, and its original module's ID. More...
 
static StringRef getOriginalNameBeforePromote (StringRef Name)
 Helper to obtain the unpromoted name for a global value (or the original name if not promoted). More...
 

Detailed Description

Class to hold module path string table and global value map, and encapsulate methods for operating on them.

Definition at line 731 of file ModuleSummaryIndex.h.

Member Typedef Documentation

◆ ModuleInfo

Definition at line 1017 of file ModuleSummaryIndex.h.

Constructor & Destructor Documentation

◆ ModuleSummaryIndex()

llvm::ModuleSummaryIndex::ModuleSummaryIndex ( bool  HaveGVs)
inline

Definition at line 780 of file ModuleSummaryIndex.h.

Member Function Documentation

◆ addGlobalValueSummary() [1/2]

void llvm::ModuleSummaryIndex::addGlobalValueSummary ( StringRef  ValueName,
std::unique_ptr< GlobalValueSummary Summary 
)
inline

Add a global value summary for a value of the given name.

Definition at line 918 of file ModuleSummaryIndex.h.

References llvm::GlobalValue::getGUID().

Referenced by llvm::buildModuleSummaryIndex(), computeAliasSummary(), computeFunctionSummary(), computeVariableSummary(), and parseTypeIdSummaryRecord().

◆ addGlobalValueSummary() [2/2]

void llvm::ModuleSummaryIndex::addGlobalValueSummary ( ValueInfo  VI,
std::unique_ptr< GlobalValueSummary Summary 
)
inline

Add a global value summary for the given ValueInfo.

Definition at line 925 of file ModuleSummaryIndex.h.

References llvm::ValueInfo::getGUID(), llvm::ValueInfo::getRef(), and second.

◆ addModule()

ModuleInfo* llvm::ModuleSummaryIndex::addModule ( StringRef  ModPath,
uint64_t  ModId,
ModuleHash  Hash = ModuleHash{{0}} 
)
inline

Add a new module with the given Hash, mapped to the given ModID, and return a reference to the module.

Definition at line 1021 of file ModuleSummaryIndex.h.

References first, and llvm::StringMap< ValueTy, AllocatorTy >::insert().

Referenced by parseTypeIdSummaryRecord(), and readWideAPInt().

◆ addOriginalName()

void llvm::ModuleSummaryIndex::addOriginalName ( GlobalValue::GUID  ValueGUID,
GlobalValue::GUID  OrigGUID 
)
inline

Add an original name for the value of the given GUID.

Definition at line 935 of file ModuleSummaryIndex.h.

Referenced by parseTypeIdSummaryRecord().

◆ begin() [1/2]

gvsummary_iterator llvm::ModuleSummaryIndex::begin ( )
inline

Definition at line 784 of file ModuleSummaryIndex.h.

◆ begin() [2/2]

const_gvsummary_iterator llvm::ModuleSummaryIndex::begin ( ) const
inline

Definition at line 785 of file ModuleSummaryIndex.h.

◆ calculateCallGraphRoot()

FunctionSummary llvm::ModuleSummaryIndex::calculateCallGraphRoot ( )
inline

◆ cfiFunctionDecls() [1/2]

std::set<std::string>& llvm::ModuleSummaryIndex::cfiFunctionDecls ( )
inline

◆ cfiFunctionDecls() [2/2]

const std::set<std::string>& llvm::ModuleSummaryIndex::cfiFunctionDecls ( ) const
inline

Definition at line 915 of file ModuleSummaryIndex.h.

◆ cfiFunctionDefs() [1/2]

std::set<std::string>& llvm::ModuleSummaryIndex::cfiFunctionDefs ( )
inline

◆ cfiFunctionDefs() [2/2]

const std::set<std::string>& llvm::ModuleSummaryIndex::cfiFunctionDefs ( ) const
inline

Definition at line 912 of file ModuleSummaryIndex.h.

◆ collectDefinedFunctionsForModule()

void ModuleSummaryIndex::collectDefinedFunctionsForModule ( StringRef  ModulePath,
GVSummaryMapTy GVSummaryMap 
) const

Collect for the given module the list of function it defines (GUID -> Summary).

Definition at line 35 of file ModuleSummaryIndex.cpp.

Referenced by llvm::ComputeCrossModuleImportForModule().

◆ collectDefinedGVSummariesPerModule()

void ModuleSummaryIndex::collectDefinedGVSummariesPerModule ( StringMap< GVSummaryMapTy > &  ModuleToDefinedGVSummaries) const

◆ discoverNodes()

static void llvm::ModuleSummaryIndex::discoverNodes ( ValueInfo  V,
std::map< ValueInfo, bool > &  FunctionHasParent 
)
inlinestatic

Convenience function for doing a DFS on a ValueInfo.

Marks the function in the FunctionHasParent map.

Definition at line 792 of file ModuleSummaryIndex.h.

References assert(), C, llvm::FunctionSummary::calls(), llvm::dyn_cast(), F(), and llvm::ValueInfo::getSummaryList().

◆ dump()

LLVM_DUMP_METHOD void ModuleSummaryIndex::dump ( ) const

Dump to stderr (for debugging).

Definition at line 4217 of file AsmWriter.cpp.

References llvm::dbgs(), and print().

◆ dumpSCCs()

LLVM_DUMP_METHOD void ModuleSummaryIndex::dumpSCCs ( raw_ostream OS)

Print out strongly connected components for debugging.

Definition at line 90 of file ModuleSummaryIndex.cpp.

References llvm::ARM_AM::add, llvm::AMDGPU::HSAMD::Kernel::Key::Attrs, F(), I, llvm::Twine::isTriviallyEmpty(), llvm::MipsISD::Ret, llvm::Twine::str(), and llvm::utostr().

◆ end() [1/2]

gvsummary_iterator llvm::ModuleSummaryIndex::end ( )
inline

Definition at line 786 of file ModuleSummaryIndex.h.

◆ end() [2/2]

const_gvsummary_iterator llvm::ModuleSummaryIndex::end ( ) const
inline

Definition at line 787 of file ModuleSummaryIndex.h.

◆ exportToDot()

void ModuleSummaryIndex::exportToDot ( raw_ostream OS) const

Export summary to dot file for GraphViz.

Definition at line 230 of file ModuleSummaryIndex.cpp.

References AS, assert(), defineExternalNode(), E, llvm::sys::path::filename(), getNodeLabel(), llvm::to_string(), and VI.

◆ findSummaryInModule()

GlobalValueSummary* llvm::ModuleSummaryIndex::findSummaryInModule ( GlobalValue::GUID  ValueGUID,
StringRef  ModuleId 
) const
inline

Find the summary for global GUID in module ModuleId, or nullptr if not found.

Definition at line 947 of file ModuleSummaryIndex.h.

References llvm::find_if().

Referenced by computeCacheKey(), llvm::FunctionImportGlobalProcessing::doImportAsDefinition(), and parseTypeIdSummaryRecord().

◆ getGlobalNameForLocal()

static std::string llvm::ModuleSummaryIndex::getGlobalNameForLocal ( StringRef  Name,
ModuleHash  ModHash 
)
inlinestatic

Convenience method for creating a promoted global name for the given value name of a local, and its original module's ID.

Definition at line 1002 of file ModuleSummaryIndex.h.

References llvm::SmallString< InternalLen >::str(), and llvm::utostr().

Referenced by llvm::FunctionImportGlobalProcessing::doImportAsDefinition().

◆ getGlobalValueSummary() [1/2]

GlobalValueSummary* llvm::ModuleSummaryIndex::getGlobalValueSummary ( const GlobalValue GV,
bool  PerModuleIndex = true 
) const
inline

Returns the first GlobalValueSummary for GV, asserting that there is only one if PerModuleIndex.

Definition at line 965 of file ModuleSummaryIndex.h.

References assert(), llvm::GlobalValue::getGUID(), llvm::Value::getName(), and llvm::Value::hasName().

Referenced by llvm::buildModuleSummaryIndex(), and computeAliasSummary().

◆ getGlobalValueSummary() [2/2]

GlobalValueSummary * ModuleSummaryIndex::getGlobalValueSummary ( GlobalValue::GUID  ValueGUID,
bool  PerModuleIndex = true 
) const

Returns the first GlobalValueSummary for ValueGUID, asserting that there is only one if PerModuleIndex.

Definition at line 64 of file ModuleSummaryIndex.cpp.

References assert(), and VI.

◆ getGUIDFromOriginalID()

GlobalValue::GUID llvm::ModuleSummaryIndex::getGUIDFromOriginalID ( GlobalValue::GUID  OriginalID) const
inline

Return the GUID for OriginalId in the OidGuidMap.

Definition at line 906 of file ModuleSummaryIndex.h.

References I.

Referenced by updateValueInfoForIndirectCalls().

◆ getModuleHash()

const ModuleHash& llvm::ModuleSummaryIndex::getModuleHash ( const StringRef  ModPath) const
inline

◆ getModuleId()

uint64_t llvm::ModuleSummaryIndex::getModuleId ( const StringRef  ModPath) const
inline

Get the module ID recorded for the given module path.

Definition at line 989 of file ModuleSummaryIndex.h.

References llvm::StringMap< ValueTy, AllocatorTy >::lookup().

◆ getOriginalNameBeforePromote()

static StringRef llvm::ModuleSummaryIndex::getOriginalNameBeforePromote ( StringRef  Name)
inlinestatic

Helper to obtain the unpromoted name for a global value (or the original name if not promoted).

Definition at line 1012 of file ModuleSummaryIndex.h.

References llvm::StringRef::split().

Referenced by llvm::thinLTOInternalizeModule().

◆ getOrInsertTypeIdSummary()

TypeIdSummary& llvm::ModuleSummaryIndex::getOrInsertTypeIdSummary ( StringRef  TypeId)
inline

This accessor should only be used when exporting because it can mutate the map.

Definition at line 1039 of file ModuleSummaryIndex.h.

Referenced by parseTypeIdSummaryRecord().

◆ getOrInsertValueInfo() [1/3]

ValueInfo llvm::ModuleSummaryIndex::getOrInsertValueInfo ( GlobalValue::GUID  GUID)
inline

Return a ValueInfo for GUID.

Definition at line 885 of file ModuleSummaryIndex.h.

Referenced by computeFunctionSummary(), findRefEdges(), parseTypeIdSummaryRecord(), and readWideAPInt().

◆ getOrInsertValueInfo() [2/3]

ValueInfo llvm::ModuleSummaryIndex::getOrInsertValueInfo ( GlobalValue::GUID  GUID,
StringRef  Name 
)
inline

Return a ValueInfo for GUID setting value Name.

Definition at line 890 of file ModuleSummaryIndex.h.

References assert().

◆ getOrInsertValueInfo() [3/3]

ValueInfo llvm::ModuleSummaryIndex::getOrInsertValueInfo ( const GlobalValue GV)
inline

Return a ValueInfo for GV and mark it as belonging to GV.

Definition at line 898 of file ModuleSummaryIndex.h.

References assert(), and llvm::GlobalValue::getGUID().

◆ getTypeIdSummary()

const TypeIdSummary* llvm::ModuleSummaryIndex::getTypeIdSummary ( StringRef  TypeId) const
inline

This returns either a pointer to the type id summary (if present in the summary map) or null (if not present).

This may be used when importing.

Definition at line 1045 of file ModuleSummaryIndex.h.

References llvm::dump(), I, and print().

◆ getValueInfo() [1/2]

ValueInfo llvm::ModuleSummaryIndex::getValueInfo ( const GlobalValueSummaryMapTy::value_type &  R) const
inline

Return a ValueInfo for the index value_type (convenient when iterating index).

Definition at line 874 of file ModuleSummaryIndex.h.

Referenced by llvm::computeDeadSymbols(), llvm::FunctionImportGlobalProcessing::doImportAsDefinition(), isGlobalVarSummary(), setLiveRoot(), and updateValueInfoForIndirectCalls().

◆ getValueInfo() [2/2]

ValueInfo llvm::ModuleSummaryIndex::getValueInfo ( GlobalValue::GUID  GUID) const
inline

Return a ValueInfo for GUID if it exists, otherwise return ValueInfo().

Definition at line 879 of file ModuleSummaryIndex.h.

References I.

◆ hasExportedFunctions()

bool llvm::ModuleSummaryIndex::hasExportedFunctions ( const Module M) const
inline

Check if the given Module has any functions available for exporting in the index.

We consider any module present in the ModulePathStringTable to have exported functions.

Definition at line 1029 of file ModuleSummaryIndex.h.

References llvm::StringMap< ValueTy, AllocatorTy >::count(), and llvm::Module::getModuleIdentifier().

Referenced by llvm::FunctionImportGlobalProcessing::FunctionImportGlobalProcessing().

◆ haveGVs()

bool llvm::ModuleSummaryIndex::haveGVs ( ) const
inline

◆ isGlobalValueLive()

bool llvm::ModuleSummaryIndex::isGlobalValueLive ( const GlobalValueSummary GVS) const
inline

◆ isGUIDLive()

bool ModuleSummaryIndex::isGUIDLive ( GlobalValue::GUID  GUID) const

Definition at line 74 of file ModuleSummaryIndex.cpp.

References I, LLVM_DUMP_METHOD, and VI.

◆ modulePaths() [1/2]

const StringMap<std::pair<uint64_t, ModuleHash> >& llvm::ModuleSummaryIndex::modulePaths ( ) const
inline

◆ modulePaths() [2/2]

StringMap<std::pair<uint64_t, ModuleHash> >& llvm::ModuleSummaryIndex::modulePaths ( )
inline

Table of modules, containing hash and id.

Definition at line 984 of file ModuleSummaryIndex.h.

◆ print()

void ModuleSummaryIndex::print ( raw_ostream OS,
bool  IsForDebug = false 
) const

Print to an output stream.

Definition at line 4175 of file AsmWriter.cpp.

References LLVM_DUMP_METHOD, and llvm::RISCVFenceField::W.

◆ setSkipModuleByDistributedBackend()

void llvm::ModuleSummaryIndex::setSkipModuleByDistributedBackend ( )
inline

Definition at line 863 of file ModuleSummaryIndex.h.

Referenced by parseTypeIdSummaryRecord().

◆ setWithGlobalValueDeadStripping()

void llvm::ModuleSummaryIndex::setWithGlobalValueDeadStripping ( )
inline

Definition at line 856 of file ModuleSummaryIndex.h.

Referenced by parseTypeIdSummaryRecord().

◆ size()

size_t llvm::ModuleSummaryIndex::size ( ) const
inline

Definition at line 788 of file ModuleSummaryIndex.h.

◆ skipModuleByDistributedBackend()

bool llvm::ModuleSummaryIndex::skipModuleByDistributedBackend ( ) const
inline

Definition at line 860 of file ModuleSummaryIndex.h.

◆ typeIds()

const std::map<std::string, TypeIdSummary>& llvm::ModuleSummaryIndex::typeIds ( ) const
inline

Definition at line 1033 of file ModuleSummaryIndex.h.

Referenced by llvm::lto::ThinBackendProc::~ThinBackendProc().

◆ withGlobalValueDeadStripping()

bool llvm::ModuleSummaryIndex::withGlobalValueDeadStripping ( ) const
inline

Definition at line 853 of file ModuleSummaryIndex.h.

Referenced by llvm::computeDeadSymbols().


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