LLVM
8.0.1
|
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 EnableSplitLTOUnit=false) | |
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 | hasSyntheticEntryCounts () const |
void | setHasSyntheticEntryCounts () |
bool | skipModuleByDistributedBackend () const |
void | setSkipModuleByDistributedBackend () |
bool | enableSplitLTOUnit () const |
void | setEnableSplitLTOUnit () |
bool | partiallySplitLTOUnits () const |
void | setPartiallySplitLTOUnits () |
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... | |
StringRef | saveString (StringRef String) |
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 (const GlobalValue &GV, std::unique_ptr< GlobalValueSummary > Summary) |
Add a global value summary for a value. More... | |
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... | |
GlobalValueSummary * | findSummaryInModule (GlobalValue::GUID ValueGUID, StringRef ModuleId) const |
Find the summary for global GUID in module ModuleId , or nullptr if not found. More... | |
GlobalValueSummary * | getGlobalValueSummary (const GlobalValue &GV, bool PerModuleIndex=true) const |
Returns the first GlobalValueSummary for GV , asserting that there is only one if PerModuleIndex . More... | |
GlobalValueSummary * | getGlobalValueSummary (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 ModuleHash & | getModuleHash (const StringRef ModPath) const |
Get the module SHA1 hash recorded for the given module path. More... | |
ModuleInfo * | addModule (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... | |
ModuleInfo * | getModule (StringRef ModPath) |
Return module entry for module with the given ModPath . More... | |
bool | hasExportedFunctions (const Module &M) const |
Check if the given Module has any functions available for exporting in the index. More... | |
const TypeIdSummaryMapTy & | typeIds () const |
TypeIdSummary & | getOrInsertTypeIdSummary (StringRef TypeId) |
Return an existing or new TypeIdSummary entry for TypeId . More... | |
const TypeIdSummary * | getTypeIdSummary (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 functions 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... | |
void | propagateConstants (const DenseSet< GlobalValue::GUID > &PreservedSymbols) |
Analyze index and detect unmodified globals. 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... | |
Class to hold module path string table and global value map, and encapsulate methods for operating on them.
Definition at line 796 of file ModuleSummaryIndex.h.
Definition at line 1118 of file ModuleSummaryIndex.h.
|
inline |
Definition at line 860 of file ModuleSummaryIndex.h.
|
inline |
Add a global value summary for a value.
Definition at line 1014 of file ModuleSummaryIndex.h.
Referenced by llvm::buildModuleSummaryIndex(), computeAliasSummary(), computeFunctionSummary(), computeVariableSummary(), and setImmutableRefs().
|
inline |
Add a global value summary for a value of the given name.
Definition at line 1020 of file ModuleSummaryIndex.h.
References llvm::GlobalValue::getGUID().
|
inline |
Add a global value summary for the given ValueInfo.
Definition at line 1027 of file ModuleSummaryIndex.h.
References llvm::ValueInfo::getGUID(), llvm::ValueInfo::getRef(), and second.
|
inline |
Add a new module with the given Hash
, mapped to the given ModID
, and return a reference to the module.
Definition at line 1122 of file ModuleSummaryIndex.h.
References first, and llvm::StringMap< ValueTy, AllocatorTy >::insert().
Referenced by setImmutableRefs().
|
inline |
Add an original name for the value of the given GUID.
Definition at line 1037 of file ModuleSummaryIndex.h.
Referenced by setImmutableRefs().
|
inline |
Definition at line 866 of file ModuleSummaryIndex.h.
|
inline |
Definition at line 867 of file ModuleSummaryIndex.h.
|
inline |
Definition at line 906 of file ModuleSummaryIndex.h.
References llvm::FunctionSummary::makeDummyFunctionSummary(), and P.
Referenced by llvm::GraphTraits< ModuleSummaryIndex * >::getEntryNode(), and initializeCounts().
|
inline |
Definition at line 1010 of file ModuleSummaryIndex.h.
Referenced by isDirectCall(), and setImmutableRefs().
|
inline |
Definition at line 1011 of file ModuleSummaryIndex.h.
|
inline |
Definition at line 1007 of file ModuleSummaryIndex.h.
Referenced by isDirectCall(), and setImmutableRefs().
|
inline |
Definition at line 1008 of file ModuleSummaryIndex.h.
void ModuleSummaryIndex::collectDefinedFunctionsForModule | ( | StringRef | ModulePath, |
GVSummaryMapTy & | GVSummaryMap | ||
) | const |
Collect for the given module the list of functions it defines (GUID -> Summary).
Definition at line 52 of file ModuleSummaryIndex.cpp.
Referenced by llvm::ComputeCrossModuleImportForModule().
void ModuleSummaryIndex::collectDefinedGVSummariesPerModule | ( | StringMap< GVSummaryMapTy > & | ModuleToDefinedGVSummaries | ) | const |
Collect for each module the list of Summaries it defines (GUID -> Summary).
Definition at line 70 of file ModuleSummaryIndex.cpp.
Referenced by llvm::ThinLTOCodeGenerator::crossModuleImport(), llvm::ThinLTOCodeGenerator::emitImports(), llvm::ThinLTOCodeGenerator::gatherImportedSummariesForModule(), llvm::ThinLTOCodeGenerator::internalize(), and llvm::ThinLTOCodeGenerator::promote().
|
inlinestatic |
Convenience function for doing a DFS on a ValueInfo.
Marks the function in the FunctionHasParent map.
Definition at line 874 of file ModuleSummaryIndex.h.
References assert(), C, llvm::FunctionSummary::calls(), llvm::dyn_cast(), F(), and llvm::ValueInfo::getSummaryList().
LLVM_DUMP_METHOD void ModuleSummaryIndex::dump | ( | ) | const |
Dump to stderr (for debugging).
Definition at line 4330 of file AsmWriter.cpp.
References llvm::dbgs(), and print().
LLVM_DUMP_METHOD void ModuleSummaryIndex::dumpSCCs | ( | raw_ostream & | OS | ) |
Print out strongly connected components for debugging.
Definition at line 181 of file ModuleSummaryIndex.cpp.
References llvm::ARM_AM::add, llvm::AMDGPU::HSAMD::Kernel::Key::Attrs, F(), I, llvm::Twine::isTriviallyEmpty(), Name, llvm::MipsISD::Ret, llvm::Twine::str(), and llvm::utostr().
|
inline |
Definition at line 952 of file ModuleSummaryIndex.h.
|
inline |
Definition at line 868 of file ModuleSummaryIndex.h.
|
inline |
Definition at line 869 of file ModuleSummaryIndex.h.
void ModuleSummaryIndex::exportToDot | ( | raw_ostream & | OS | ) | const |
Export summary to dot file for GraphViz.
Definition at line 342 of file ModuleSummaryIndex.cpp.
References assert(), defineExternalNode(), E, llvm::sys::path::filename(), getNodeLabel(), hasReadOnlyFlag(), llvm::to_string(), and VI.
|
inline |
Find the summary for global GUID
in module ModuleId
, or nullptr if not found.
Definition at line 1049 of file ModuleSummaryIndex.h.
References llvm::find_if().
Referenced by llvm::computeLTOCacheKey(), llvm::FunctionImportGlobalProcessing::doImportAsDefinition(), and setImmutableRefs().
|
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 1103 of file ModuleSummaryIndex.h.
References llvm::SmallString< InternalLen >::str(), and llvm::utostr().
Referenced by llvm::FunctionImportGlobalProcessing::doImportAsDefinition().
|
inline |
Returns the first GlobalValueSummary for GV
, asserting that there is only one if PerModuleIndex
.
Definition at line 1067 of file ModuleSummaryIndex.h.
References assert(), llvm::GlobalValue::getGUID(), and llvm::Value::hasName().
Referenced by llvm::buildModuleSummaryIndex(), and computeAliasSummary().
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 81 of file ModuleSummaryIndex.cpp.
|
inline |
Return the GUID for OriginalId
in the OidGuidMap.
Definition at line 1002 of file ModuleSummaryIndex.h.
References I.
Referenced by updateValueInfoForIndirectCalls().
|
inline |
Return module entry for module with the given ModPath
.
Definition at line 1128 of file ModuleSummaryIndex.h.
References assert(), llvm::StringMap< ValueTy, AllocatorTy >::end(), and llvm::StringMap< ValueTy, AllocatorTy >::find().
|
inline |
Get the module SHA1 hash recorded for the given module path.
Definition at line 1095 of file ModuleSummaryIndex.h.
References assert(), llvm::StringMap< ValueTy, AllocatorTy >::end(), and llvm::StringMap< ValueTy, AllocatorTy >::find().
Referenced by llvm::computeLTOCacheKey(), and llvm::FunctionImportGlobalProcessing::doImportAsDefinition().
Get the module ID recorded for the given module path.
Definition at line 1090 of file ModuleSummaryIndex.h.
References llvm::StringMap< ValueTy, AllocatorTy >::lookup().
|
inlinestatic |
Helper to obtain the unpromoted name for a global value (or the original name if not promoted).
Definition at line 1113 of file ModuleSummaryIndex.h.
References llvm::StringRef::split().
Referenced by llvm::thinLTOInternalizeModule().
|
inline |
Return an existing or new TypeIdSummary entry for TypeId
.
This accessor can mutate the map and therefore should not be used in the ThinLTO backends.
Definition at line 1146 of file ModuleSummaryIndex.h.
References llvm::GlobalValue::getGUID().
Referenced by parseTypeIdSummaryRecord().
|
inline |
Return a ValueInfo for GUID
.
Definition at line 976 of file ModuleSummaryIndex.h.
Referenced by computeFunctionSummary(), findRefEdges(), and setImmutableRefs().
|
inline |
Return a ValueInfo for GUID
setting value Name
.
Definition at line 986 of file ModuleSummaryIndex.h.
|
inline |
Return a ValueInfo for GV
and mark it as belonging to GV.
Definition at line 994 of file ModuleSummaryIndex.h.
References assert(), and llvm::GlobalValue::getGUID().
|
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 1158 of file ModuleSummaryIndex.h.
References llvm::dump(), llvm::GlobalValue::getGUID(), and print().
|
inline |
Return a ValueInfo for the index value_type (convenient when iterating index).
Definition at line 965 of file ModuleSummaryIndex.h.
Referenced by llvm::computeDeadSymbols(), ComputeImportForModule(), llvm::FunctionImportGlobalProcessing::doImportAsDefinition(), isGlobalVarSummary(), setLiveRoot(), and updateValueInfoForIndirectCalls().
|
inline |
Return a ValueInfo for GUID if it exists, otherwise return ValueInfo().
Definition at line 970 of file ModuleSummaryIndex.h.
References I.
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 1137 of file ModuleSummaryIndex.h.
References llvm::StringMap< ValueTy, AllocatorTy >::count(), and llvm::Module::getModuleIdentifier().
Referenced by llvm::FunctionImportGlobalProcessing::FunctionImportGlobalProcessing().
|
inline |
Definition at line 942 of file ModuleSummaryIndex.h.
Referenced by llvm::FunctionImportGlobalProcessing::doImportAsDefinition().
|
inline |
Definition at line 864 of file ModuleSummaryIndex.h.
Referenced by llvm::GraphTraits< ModuleSummaryIndex * >::getEntryNode().
|
inline |
Definition at line 958 of file ModuleSummaryIndex.h.
References llvm::GlobalValueSummary::isLive().
Referenced by ComputeImportForModule(), dropDeadSymbols(), and selectCallee().
bool ModuleSummaryIndex::isGUIDLive | ( | GlobalValue::GUID | GUID | ) | const |
Definition at line 91 of file ModuleSummaryIndex.cpp.
|
inline |
Table of modules, containing module hash and id.
Definition at line 1080 of file ModuleSummaryIndex.h.
Referenced by llvm::ThinLTOCodeGenerator::crossModuleImport(), llvm::ThinLTOCodeGenerator::emitImports(), llvm::ThinLTOCodeGenerator::gatherImportedSummariesForModule(), llvm::ThinLTOCodeGenerator::internalize(), and llvm::ThinLTOCodeGenerator::promote().
|
inline |
Table of modules, containing hash and id.
Definition at line 1085 of file ModuleSummaryIndex.h.
|
inline |
Definition at line 955 of file ModuleSummaryIndex.h.
Referenced by isDirectCall().
void ModuleSummaryIndex::print | ( | raw_ostream & | OS, |
bool | IsForDebug = false |
||
) | const |
Print to an output stream.
Definition at line 4288 of file AsmWriter.cpp.
References LLVM_DUMP_METHOD, and llvm::RISCVFenceField::W.
void ModuleSummaryIndex::propagateConstants | ( | const DenseSet< GlobalValue::GUID > & | PreservedSymbols | ) |
Analyze index and detect unmodified globals.
Definition at line 145 of file ModuleSummaryIndex.cpp.
References llvm::AreStatisticsEnabled(), llvm::canImportGlobalVar(), llvm::detail::DenseSetImpl< ValueT, DenseMap< ValueT, detail::DenseSetEmpty, ValueInfoT, detail::DenseSetPair< ValueT > >, ValueInfoT >::count(), LLVM_DUMP_METHOD, P, and propagateConstantsToRefs().
Referenced by llvm::computeDeadSymbolsWithConstProp().
Definition at line 983 of file ModuleSummaryIndex.h.
References llvm::StringSaver::save().
|
inline |
Definition at line 953 of file ModuleSummaryIndex.h.
Referenced by setImmutableRefs().
|
inline |
Definition at line 943 of file ModuleSummaryIndex.h.
Referenced by llvm::computeSyntheticCounts(), and setImmutableRefs().
|
inline |
Definition at line 956 of file ModuleSummaryIndex.h.
Referenced by setImmutableRefs().
|
inline |
Definition at line 948 of file ModuleSummaryIndex.h.
Referenced by setImmutableRefs().
|
inline |
Definition at line 938 of file ModuleSummaryIndex.h.
Referenced by setImmutableRefs().
|
inline |
Definition at line 870 of file ModuleSummaryIndex.h.
|
inline |
Definition at line 945 of file ModuleSummaryIndex.h.
|
inline |
Definition at line 1141 of file ModuleSummaryIndex.h.
Referenced by llvm::computeLTOCacheKey().
|
inline |
Definition at line 935 of file ModuleSummaryIndex.h.
Referenced by llvm::computeDeadSymbols(), and llvm::FunctionImportGlobalProcessing::doImportAsDefinition().