|
LLVM 24.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/CycleInfo.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/LLVMContext.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/Compiler.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" |
| #define DEBUG_TYPE "module-summary-analysis" |
Definition at line 65 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 241 of file ModuleSummaryAnalysis.cpp.
References addVCallToSet(), llvm::any_of(), Call, llvm::cast(), llvm::dyn_cast(), llvm::findDevirtualizableCallsForTypeCheckedLoad(), llvm::findDevirtualizableCallsForTypeTest(), llvm::CallBase::getArgOperand(), llvm::CallBase::getCalledFunction(), llvm::GlobalValue::getGUIDAssumingExternalLinkage(), 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 220 of file ModuleSummaryAnalysis.cpp.
References Call, llvm::drop_begin(), llvm::dyn_cast(), and llvm::Guid.
Referenced by addIntrinsicToSummary().
|
static |
Definition at line 935 of file ModuleSummaryAnalysis.cpp.
References A(), assert(), llvm::GlobalValueSummary::Definition, llvm::GlobalValue::getGUID(), llvm::detail::DenseSetImpl< ValueT, MapTy >::insert(), llvm::isa(), and isNonRenamableLocal().
Referenced by llvm::buildModuleSummaryIndex().
|
static |
Definition at line 341 of file ModuleSummaryAnalysis.cpp.
References addIntrinsicToSummary(), assert(), llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::memprof::CallStack< NodeT, IteratorT >::beginAfterSharedPrefix(), llvm::cast(), llvm::CalleeInfo::Cold, llvm::detail::DenseSetImpl< ValueT, MapTy >::count(), llvm::CalleeInfo::Critical, llvm::GlobalValueSummary::Definition, llvm::dyn_cast(), llvm::dyn_cast_if_present(), llvm::mdconst::dyn_extract(), llvm::memprof::CallStack< NodeT, IteratorT >::empty(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::EnableMemProfIndirectCallSupport, llvm::memprof::CallStack< NodeT, IteratorT >::end(), llvm::mdconst::extract_or_null(), F, findImplicitRefEdges(), 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::detail::DenseSetImpl< ValueT, MapTy >::insert(), llvm::SetVector< T, Vector, Set, N >::insert(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::SetVector< T, Vector, Set, N >::insert_range(), llvm::isa(), isNonRenamableLocal(), isNonVolatileLoad(), isNonVolatileStore(), llvm::MaxSummaryIndirectEdges, llvm::mayHaveMemprofSummary(), llvm::memprof::metadataIncludesAllContextSizeInfo(), mustBeUnreachableFunction(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SetVector< T, Vector, Set, N >::remove(), llvm::ScalePartialSampleProfileWorkingSetSize, llvm::SetVector< T, Vector, Set, N >::size(), llvm::SmallVectorTemplateCommon< T, typename >::size(), llvm::MapVector< KeyT, ValueT, MapType, VectorType, N >::takeVector(), llvm::SetVector< T, Vector, Set, N >::takeVector(), llvm::CalleeInfo::Unknown, and users.
Referenced by llvm::buildModuleSummaryIndex().
|
static |
Definition at line 884 of file ModuleSummaryAnalysis.cpp.
References computeVTableFuncs(), llvm::GlobalValueSummary::Definition, findRefEdges(), llvm::detail::DenseSetImpl< ValueT, MapTy >::insert(), isNonRenamableLocal(), recordTypeIdCompatibleVtableReferences(), and llvm::SetVector< T, Vector, Set, N >::takeVector().
Referenced by llvm::buildModuleSummaryIndex().
|
static |
Definition at line 843 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 771 of file ModuleSummaryAnalysis.cpp.
References A(), assert(), llvm::CallingConv::C, llvm::cast(), DL, llvm::dyn_cast(), llvm::StructType::elements(), llvm::enumerate(), findFuncPointers(), llvm::StructLayout::getElementContainingOffset(), llvm::StructLayout::getElementOffset(), llvm::GlobalVariable::getInitializer(), llvm::Value::getType(), I, llvm::isa(), llvm::IsConstantOffsetFromGlobal(), LHS, llvm::Offset, and RHS.
Referenced by computeVTableFuncs(), and findFuncPointers().
|
static |
Collect globals referenced via !implicit.ref metadata on a function and add them as reference edges in the module summary.
This ensures ThinLTO liveness analysis treats them as live when the function is live, and imports them alongside the function during cross-module importing.
Definition at line 187 of file ModuleSummaryAnalysis.cpp.
References llvm::dyn_cast(), llvm::dyn_cast_or_null(), and F.
Referenced by computeFunctionSummary().
|
static |
Definition at line 123 of file ModuleSummaryAnalysis.cpp.
References llvm::dyn_cast(), llvm::dyn_cast_if_present(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::getValueProfDataFromInst(), I, llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::isa(), llvm::MaxNumVTableAnnotations, llvm::SmallVectorImpl< T >::pop_back_val(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by computeFunctionSummary(), and computeVariableSummary().
|
static |
Definition at line 203 of file ModuleSummaryAnalysis.cpp.
References llvm::CalleeInfo::Cold, llvm::CalleeInfo::Hot, llvm::ProfileSummaryInfo::isColdCount(), llvm::ProfileSummaryInfo::isHotCount(), llvm::CalleeInfo::None, and llvm::CalleeInfo::Unknown.
Referenced by computeFunctionSummary().
| INITIALIZE_PASS | ( | ImmutableModuleSummaryIndexWrapperPass | , |
| "module-summary-info" | , | ||
| "Module summary info" | , | ||
| false | , | ||
| true | ) |
Definition at line 1267 of file ModuleSummaryAnalysis.cpp.
References assert(), const, llvm::dyn_cast(), llvm::EnableMemProfIndirectCallSupport, if(), llvm::isa(), and llvm::mayHaveMemprofSummary().
| INITIALIZE_PASS_BEGIN | ( | ModuleSummaryIndexWrapperPass | , |
| "module-summary-analysis" | , | ||
| "Module Summary Analysis" | , | ||
| false | , | ||
| true | ) |
References INITIALIZE_PASS_DEPENDENCY.
|
static |
Definition at line 214 of file ModuleSummaryAnalysis.cpp.
References llvm::GlobalValue::hasLocalLinkage(), and llvm::GlobalValue::hasSection().
Referenced by computeAliasSummary(), computeFunctionSummary(), and computeVariableSummary().
|
static |
Definition at line 315 of file ModuleSummaryAnalysis.cpp.
References llvm::dyn_cast(), and I.
Referenced by computeFunctionSummary().
|
static |
Definition at line 322 of file ModuleSummaryAnalysis.cpp.
References llvm::dyn_cast(), and I.
Referenced by computeFunctionSummary().
Definition at line 334 of file ModuleSummaryAnalysis.cpp.
References assert(), F, and llvm::isa().
Referenced by computeFunctionSummary().
|
static |
Record vtable definition V for each type metadata it references.
Definition at line 867 of file ModuleSummaryAnalysis.cpp.
References llvm::cast(), llvm::dyn_cast(), and llvm::Offset.
Referenced by computeVariableSummary().
|
static |
Definition at line 959 of file ModuleSummaryAnalysis.cpp.
References llvm::GlobalValue::getGUIDAssumingExternalLinkage().
Referenced by llvm::buildModuleSummaryIndex().
| module summary Module Summary Analysis |
Definition at line 1210 of file ModuleSummaryAnalysis.cpp.
| module summary analysis |
Definition at line 1209 of file ModuleSummaryAnalysis.cpp.
| module summary Module Summary false |
Definition at line 1210 of file ModuleSummaryAnalysis.cpp.