|
LLVM 23.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/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 64 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 240 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 219 of file ModuleSummaryAnalysis.cpp.
References Call, llvm::drop_begin(), llvm::dyn_cast(), and llvm::Guid.
Referenced by addIntrinsicToSummary().
|
static |
Definition at line 934 of file ModuleSummaryAnalysis.cpp.
References A(), assert(), llvm::GlobalValueSummary::Definition, llvm::GlobalValue::getGUID(), llvm::detail::DenseSetImpl< ValueT, MapTy, ValueInfoT >::insert(), llvm::isa(), and isNonRenamableLocal().
Referenced by llvm::buildModuleSummaryIndex().
|
static |
Definition at line 340 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, ValueInfoT >::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, ValueInfoT >::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 883 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 842 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 770 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 186 of file ModuleSummaryAnalysis.cpp.
References llvm::dyn_cast(), llvm::dyn_cast_or_null(), and F.
Referenced by computeFunctionSummary().
|
static |
Definition at line 122 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 202 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 1263 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 213 of file ModuleSummaryAnalysis.cpp.
References llvm::GlobalValue::hasLocalLinkage(), and llvm::GlobalValue::hasSection().
Referenced by computeAliasSummary(), computeFunctionSummary(), and computeVariableSummary().
|
static |
Definition at line 314 of file ModuleSummaryAnalysis.cpp.
References llvm::dyn_cast(), and I.
Referenced by computeFunctionSummary().
|
static |
Definition at line 321 of file ModuleSummaryAnalysis.cpp.
References llvm::dyn_cast(), and I.
Referenced by computeFunctionSummary().
Definition at line 333 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 866 of file ModuleSummaryAnalysis.cpp.
References llvm::cast(), llvm::dyn_cast(), and llvm::Offset.
Referenced by computeVariableSummary().
|
static |
Definition at line 958 of file ModuleSummaryAnalysis.cpp.
References llvm::GlobalValue::getGUIDAssumingExternalLinkage().
Referenced by llvm::buildModuleSummaryIndex().
| module summary Module Summary Analysis |
Definition at line 1206 of file ModuleSummaryAnalysis.cpp.
| module summary analysis |
Definition at line 1205 of file ModuleSummaryAnalysis.cpp.
| module summary Module Summary false |
Definition at line 1206 of file ModuleSummaryAnalysis.cpp.