LLVM 20.0.0git
|
#include "llvm/Analysis/ModuleSummaryAnalysis.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/BlockFrequencyInfo.h"
#include "llvm/Analysis/BranchProbabilityInfo.h"
#include "llvm/Analysis/ConstantFolding.h"
#include "llvm/Analysis/IndirectCallPromotionAnalysis.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/MemoryProfileInfo.h"
#include "llvm/Analysis/ProfileSummaryInfo.h"
#include "llvm/Analysis/StackSafetyAnalysis.h"
#include "llvm/Analysis/TypeMetadataUtils.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/ModuleSummaryIndex.h"
#include "llvm/IR/Use.h"
#include "llvm/IR/User.h"
#include "llvm/InitializePasses.h"
#include "llvm/Object/ModuleSymbolTable.h"
#include "llvm/Object/SymbolicFile.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/FileSystem.h"
#include <cassert>
#include <cstdint>
#include <vector>
Go to the source code of this file.
Namespaces | |
namespace | llvm |
This is an optimization pass for GlobalISel generic memory operations. | |
Macros | |
#define | DEBUG_TYPE "module-summary-analysis" |
Variables | |
FunctionSummary::ForceSummaryHotnessType | llvm::ForceSummaryEdgesCold |
static cl::opt< FunctionSummary::ForceSummaryHotnessType, true > | FSEC ("force-summary-edges-cold", cl::Hidden, cl::location(ForceSummaryEdgesCold), cl::desc("Force all edges in the function summary to cold"), cl::values(clEnumValN(FunctionSummary::FSHT_None, "none", "None."), clEnumValN(FunctionSummary::FSHT_AllNonCritical, "all-non-critical", "All non-critical edges."), clEnumValN(FunctionSummary::FSHT_All, "all", "All edges."))) |
static cl::opt< std::string > | ModuleSummaryDotFile ("module-summary-dot-file", cl::Hidden, cl::value_desc("filename"), cl::desc("File to emit dot graph of new summary into")) |
static cl::opt< bool > | EnableMemProfIndirectCallSupport ("enable-memprof-indirect-call-support", cl::init(false), cl::Hidden, cl::desc("Enable MemProf support for summarizing and cloning indirect calls")) |
cl::opt< bool > | ScalePartialSampleProfileWorkingSetSize |
cl::opt< unsigned > | MaxNumVTableAnnotations |
cl::opt< bool > | MemProfReportHintedSizes |
module summary | analysis |
module summary Module Summary | Analysis |
module summary Module Summary | false |
#define DEBUG_TYPE "module-summary-analysis" |
Definition at line 62 of file ModuleSummaryAnalysis.cpp.
|
static |
If this intrinsic call requires that we add information to the function summary, do so via the non-constant reference arguments.
Definition at line 204 of file ModuleSummaryAnalysis.cpp.
References addVCallToSet(), llvm::any_of(), llvm::findDevirtualizableCallsForTypeCheckedLoad(), llvm::findDevirtualizableCallsForTypeTest(), llvm::CallBase::getArgOperand(), llvm::CallBase::getCalledFunction(), llvm::GlobalValue::getGUID(), llvm::Function::getIntrinsicID(), llvm::Guid, and llvm::Value::uses().
Referenced by computeFunctionSummary().
|
static |
Determine whether this call has all constant integer arguments (excluding "this") and summarize it to VCalls or ConstVCalls as appropriate.
Definition at line 183 of file ModuleSummaryAnalysis.cpp.
References llvm::drop_begin(), and llvm::Guid.
Referenced by addIntrinsicToSummary().
|
static |
Definition at line 884 of file ModuleSummaryAnalysis.cpp.
References A, assert(), llvm::GlobalValueSummary::Definition, llvm::GlobalValue::getGUID(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), and isNonRenamableLocal().
Referenced by llvm::buildModuleSummaryIndex().
|
static |
Definition at line 302 of file ModuleSummaryAnalysis.cpp.
References addIntrinsicToSummary(), assert(), llvm::SmallVectorTemplateCommon< T, typename >::back(), BBFreq, llvm::memprof::CallStack< NodeT, IteratorT >::beginAfterSharedPrefix(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::count(), llvm::SmallVectorBase< Size_T >::empty(), llvm::memprof::CallStack< NodeT, IteratorT >::empty(), EnableMemProfIndirectCallSupport, llvm::memprof::CallStack< NodeT, IteratorT >::end(), llvm::SmallVectorImpl< T >::erase(), F, findRefEdges(), llvm::ForceSummaryEdgesCold, llvm::FunctionSummary::FSHT_All, llvm::FunctionSummary::FSHT_None, llvm::BlockAddress::get(), getHotness(), llvm::memprof::getMIBAllocType(), llvm::memprof::getMIBStackNode(), llvm::MDNode::getNumOperands(), llvm::MDNode::getOperand(), llvm::ProfileSummaryInfo::getProfileCount(), llvm::ICallPromotionAnalysis::getPromotionCandidatesForInstruction(), llvm::ProfileSummaryInfo::hasPartialSampleProfile(), I, llvm::SetVector< T, Vector, Set, N >::insert(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), llvm::SmallPtrSetImpl< PtrType >::insert(), isNonRenamableLocal(), isNonVolatileLoad(), isNonVolatileStore(), llvm::mayHaveMemprofSummary(), MemProfReportHintedSizes, mustBeUnreachableFunction(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SetVector< T, Vector, Set, N >::remove(), ScalePartialSampleProfileWorkingSetSize, llvm::SetVector< T, Vector, Set, N >::size(), llvm::SmallVectorBase< Size_T >::size(), llvm::MapVector< KeyT, ValueT, MapType, VectorType >::takeVector(), llvm::SetVector< T, Vector, Set, N >::takeVector(), and users.
Referenced by llvm::buildModuleSummaryIndex().
|
static |
Definition at line 833 of file ModuleSummaryAnalysis.cpp.
References computeVTableFuncs(), llvm::GlobalValueSummary::Definition, findRefEdges(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), isNonRenamableLocal(), recordTypeIdCompatibleVtableReferences(), and llvm::SetVector< T, Vector, Set, N >::takeVector().
Referenced by llvm::buildModuleSummaryIndex().
|
static |
Definition at line 792 of file ModuleSummaryAnalysis.cpp.
References assert(), findFuncPointers(), and P.
Referenced by computeVariableSummary().
|
static |
Find function pointers referenced within the given vtable initializer (or subset of an initializer) I
.
The starting offset of I
within the vtable initializer is StartingOffset
. Any discovered function pointers are added to VTableFuncs
along with their cumulative offset within the initializer.
Definition at line 720 of file ModuleSummaryAnalysis.cpp.
References A, assert(), llvm::CallingConv::C, DL, llvm::StructType::elements(), llvm::enumerate(), findFuncPointers(), llvm::StructLayout::getElementContainingOffset(), llvm::StructLayout::getElementOffset(), llvm::GlobalVariable::getInitializer(), llvm::Value::getType(), I, llvm::IsConstantOffsetFromGlobal(), LHS, llvm::Offset, and RHS.
Referenced by computeVTableFuncs(), and findFuncPointers().
|
static |
Definition at line 107 of file ModuleSummaryAnalysis.cpp.
References llvm::SmallVectorBase< Size_T >::empty(), llvm::getValueProfDataFromInst(), I, llvm::SmallPtrSetImpl< PtrType >::insert(), MaxNumVTableAnnotations, llvm::SmallVectorImpl< T >::pop_back_val(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by computeFunctionSummary(), and computeVariableSummary().
|
static |
Definition at line 166 of file ModuleSummaryAnalysis.cpp.
References llvm::ProfileSummaryInfo::isColdCount(), and llvm::ProfileSummaryInfo::isHotCount().
Referenced by computeFunctionSummary().
INITIALIZE_PASS | ( | ImmutableModuleSummaryIndexWrapperPass | , |
"module-summary-info" | , | ||
"Module summary info" | , | ||
false | , | ||
true | |||
) |
Definition at line 1216 of file ModuleSummaryAnalysis.cpp.
References assert(), and EnableMemProfIndirectCallSupport.
INITIALIZE_PASS_BEGIN | ( | ModuleSummaryIndexWrapperPass | , |
"module-summary-analysis" | , | ||
"Module Summary Analysis" | , | ||
false | , | ||
true | |||
) |
|
static |
Definition at line 177 of file ModuleSummaryAnalysis.cpp.
References llvm::GlobalValue::hasLocalLinkage(), and llvm::GlobalValue::hasSection().
Referenced by computeAliasSummary(), computeFunctionSummary(), and computeVariableSummary().
|
static |
Definition at line 276 of file ModuleSummaryAnalysis.cpp.
References I.
Referenced by computeFunctionSummary().
|
static |
Definition at line 283 of file ModuleSummaryAnalysis.cpp.
References I.
Referenced by computeFunctionSummary().
Definition at line 295 of file ModuleSummaryAnalysis.cpp.
Referenced by computeFunctionSummary().
|
static |
Record vtable definition V
for each type metadata it references.
Definition at line 816 of file ModuleSummaryAnalysis.cpp.
References llvm::Offset.
Referenced by computeVariableSummary().
|
static |
Definition at line 908 of file ModuleSummaryAnalysis.cpp.
References llvm::GlobalValue::getGUID(), and Name.
Referenced by llvm::buildModuleSummaryIndex().
module summary analysis |
Definition at line 1153 of file ModuleSummaryAnalysis.cpp.
module summary Module Summary Analysis |
Definition at line 1154 of file ModuleSummaryAnalysis.cpp.
|
static |
Referenced by computeFunctionSummary(), and INITIALIZE_PASS().
module summary Module Summary false |
Definition at line 1154 of file ModuleSummaryAnalysis.cpp.
|
static |
Referenced by findRefEdges().
Referenced by computeFunctionSummary().
|
static |
Referenced by llvm::buildModuleSummaryIndex().
Referenced by computeFunctionSummary().