LLVM 20.0.0git
Classes | Public Member Functions | List of all members
llvm::AnalysisManager< IRUnitT, ExtraArgTs > Class Template Reference

A container for analyses that lazily runs them and caches their results. More...

#include "llvm/IR/PassManager.h"

Classes

class  Invalidator
 API to communicate dependencies between analyses during invalidation. More...
 

Public Member Functions

 AnalysisManager ()
 Construct an empty analysis manager.
 
 AnalysisManager (AnalysisManager &&)
 
AnalysisManageroperator= (AnalysisManager &&)
 
bool empty () const
 Returns true if the analysis manager has an empty results cache.
 
void clear (IRUnitT &IR, llvm::StringRef Name)
 Clear any cached analysis results for a single unit of IR.
 
void clear ()
 Clear all analysis results cached by this AnalysisManager.
 
template<typename PassT >
PassT::Result & getResult (IRUnitT &IR, ExtraArgTs... ExtraArgs)
 Get the result of an analysis pass for a given IR unit.
 
template<typename PassT >
PassT::Result * getCachedResult (IRUnitT &IR) const
 Get the cached result of an analysis pass for a given IR unit.
 
template<typename PassT >
void verifyNotInvalidated (IRUnitT &IR, typename PassT::Result *Result) const
 Verify that the given Result cannot be invalidated, assert otherwise.
 
template<typename PassBuilderT >
bool registerPass (PassBuilderT &&PassBuilder)
 Register an analysis pass with the manager.
 
void invalidate (IRUnitT &IR, const PreservedAnalyses &PA)
 Invalidate cached analyses for an IR unit.
 

Detailed Description

template<typename IRUnitT, typename... ExtraArgTs>
class llvm::AnalysisManager< IRUnitT, ExtraArgTs >

A container for analyses that lazily runs them and caches their results.

This class can manage analyses for any IR unit where the address of the IR unit sufficies as its identity.

Definition at line 253 of file PassManager.h.

Constructor & Destructor Documentation

◆ AnalysisManager() [1/2]

template<typename IRUnitT , typename... ExtraArgTs>
llvm::AnalysisManager< IRUnitT, ExtraArgTs >::AnalysisManager ( )
inlinedefault

Construct an empty analysis manager.

◆ AnalysisManager() [2/2]

template<typename IRUnitT , typename... ExtraArgTs>
llvm::AnalysisManager< IRUnitT, ExtraArgTs >::AnalysisManager ( AnalysisManager< IRUnitT, ExtraArgTs > &&  )
inlinedefault

Member Function Documentation

◆ clear() [1/2]

template<typename IRUnitT , typename... ExtraArgTs>
void llvm::AnalysisManager< IRUnitT, ExtraArgTs >::clear ( )
inline

Clear all analysis results cached by this AnalysisManager.

Like clear(IRUnitT&), this doesn't invalidate the results; it simply deletes them. This lets you clean up the AnalysisManager when the set of IR units itself has potentially changed, and thus we can't even look up a a result and invalidate/clear it directly.

Definition at line 396 of file PassManager.h.

References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::clear().

◆ clear() [2/2]

template<typename IRUnitT , typename... ExtraArgTs>
void llvm::AnalysisManager< IRUnitT, ExtraArgTs >::clear ( IRUnitT &  IR,
llvm::StringRef  Name 
)
inline

Clear any cached analysis results for a single unit of IR.

This doesn't invalidate, but instead simply deletes, the relevant results. It is useful when the IR is being removed and we want to clear out all the memory pinned for it.

Definition at line 119 of file PassManagerImpl.h.

References IR, and Name.

Referenced by llvm::CallGraphUpdater::finalize(), llvm::AnalysisGetter::invalidateAnalyses(), llvm::LPMUpdater::markLoopAsDeleted(), llvm::CallGraphUpdater::removeFunction(), llvm::LoopUnrollPass::run(), llvm::ArgumentPromotionPass::run(), and llvm::GlobalOptPass::run().

◆ empty()

template<typename IRUnitT , typename... ExtraArgTs>
bool llvm::AnalysisManager< IRUnitT, ExtraArgTs >::empty ( ) const
inline

Returns true if the analysis manager has an empty results cache.

Definition at line 376 of file PassManager.h.

References assert(), and llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::empty().

◆ getCachedResult()

template<typename IRUnitT , typename... ExtraArgTs>
template<typename PassT >
PassT::Result * llvm::AnalysisManager< IRUnitT, ExtraArgTs >::getCachedResult ( IRUnitT &  IR) const
inline

Get the cached result of an analysis pass for a given IR unit.

This method never runs the analysis.

Returns
null if there is no cached result.

Definition at line 424 of file PassManager.h.

References assert(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::count(), and IR.

Referenced by llvm::AnalysisGetter::getAnalysis(), incorporateNewSCCRange(), llvm::AMDGPULibCalls::initFunction(), llvm::SelectionDAGISel::initializeAnalysisResults(), llvm::FunctionAnalysisManagerCGSCCProxy::Result::invalidate(), llvm::MIRParserImpl::parseMachineFunction(), llvm::PreservedCFGCheckerInstrumentation::registerCallbacks(), llvm::AMDGPUCodeGenPreparePass::run(), llvm::ADCEPass::run(), llvm::LowerConstantIntrinsicsPass::run(), llvm::InstCombinePass::run(), llvm::GuardWideningPass::run(), llvm::GVNPass::run(), llvm::InferAddressSpacesPass::run(), llvm::JumpTableToSwitchPass::run(), llvm::LoopUnrollPass::run(), llvm::MergeICmpsPass::run(), llvm::PartiallyInlineLibCallsPass::run(), llvm::ScalarizeMaskedMemIntrinPass::run(), llvm::SCCPPass::run(), llvm::TailCallElimPass::run(), llvm::AssumeSimplifyPass::run(), llvm::AssumeBuilderPass::run(), llvm::BreakCriticalEdgesPass::run(), llvm::LCSSAPass::run(), llvm::LoopSimplifyPass::run(), llvm::LowerSwitchPass::run(), llvm::ExtraVectorPassManager::run(), llvm::SLPVectorizerPass::run(), llvm::DwarfEHPreparePass::run(), llvm::ExpandMemCmpPass::run(), llvm::IndirectBrExpandPass::run(), llvm::StackProtectorPass::run(), llvm::LibCallsShrinkWrapPass::run(), llvm::PGOMemOPSizeOpt::run(), llvm::CGSCCToFunctionPassAdaptor::run(), llvm::PassManager< IRUnitT, AnalysisManagerT, ExtraArgTs >::run(), llvm::ExtraSimpleLoopUnswitchPassManager::run(), llvm::ModuleInlinerPass::run(), llvm::PartialInlinerPass::run(), llvm::ModuleToPostOrderCGSCCPassAdaptor::run(), llvm::RecomputeGlobalsAAPass::run(), llvm::HotColdSplittingPass::run(), llvm::LoopExtractorPass::run(), llvm::InlineAdvisorAnalysisPrinterPass::run(), llvm::ShadowStackGCLoweringPass::run(), runIPSCCP(), updateCGAndAnalysisManagerForPass(), and updateNewSCCFunctionAnalyses().

◆ getResult()

template<typename IRUnitT , typename... ExtraArgTs>
template<typename PassT >
PassT::Result & llvm::AnalysisManager< IRUnitT, ExtraArgTs >::getResult ( IRUnitT &  IR,
ExtraArgTs...  ExtraArgs 
)
inline

Get the result of an analysis pass for a given IR unit.

Runs the analysis if a cached result is not available.

Definition at line 405 of file PassManager.h.

References assert(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::count(), and IR.

Referenced by computeVirtualCallSiteTypeInfoMap(), doPromotion(), llvm::FunctionPropertiesUpdater::finish(), llvm::MLInlineAdvisor::getAdviceImpl(), llvm::ReplayInlineAdvisor::getAdviceImpl(), llvm::AnalysisGetter::getAnalysis(), llvm::MLInlineAdvisor::getCachedFPI(), llvm::InlineAdvisor::getCallerORE(), getDefaultInlineAdvice(), llvm::FunctionPropertiesInfo::getFunctionPropertiesInfo(), llvm::getInlineOrder(), llvm::InlineAdvisor::getMandatoryKind(), llvm::AMDGPULibCalls::initFunction(), llvm::CallGraphUpdater::initialize(), llvm::SelectionDAGISel::initializeAnalysisResults(), llvm::orc::BlockFreqQuery::operator()(), llvm::MIRParserImpl::parseMachineFunction(), llvm::MIRParser::parseMachineFunctions(), promoteArguments(), promoteIndirectCalls(), llvm::PreservedCFGCheckerInstrumentation::registerCallbacks(), llvm::DebugifyEachInstrumentation::registerCallbacks(), llvm::VerifyInstrumentation::registerCallbacks(), llvm::AMDGPUCodeGenPreparePass::run(), llvm::AMDGPULateCodeGenPreparePass::run(), llvm::NewGVNPass::run(), llvm::AssumptionAnalysis::run(), llvm::UniformityInfoAnalysis::run(), llvm::ADCEPass::run(), llvm::ConstraintEliminationPass::run(), llvm::DivRemPairsPass::run(), llvm::LowerConstantIntrinsicsPass::run(), llvm::SeparateConstOffsetFromGEPPass::run(), llvm::VectorCombinePass::run(), llvm::AAManager::run(), llvm::AAEvaluator::run(), llvm::AliasSetsPrinterPass::run(), llvm::AssumptionPrinterPass::run(), llvm::BasicAA::run(), llvm::BlockFrequencyAnalysis::run(), llvm::BlockFrequencyPrinterPass::run(), llvm::BranchProbabilityAnalysis::run(), llvm::BranchProbabilityPrinterPass::run(), llvm::CFGViewerPass::run(), llvm::CFGOnlyViewerPass::run(), llvm::CFGPrinterPass::run(), llvm::CFGOnlyPrinterPass::run(), llvm::CostModelPrinterPass::run(), llvm::CycleInfoPrinterPass::run(), llvm::DelinearizationPrinterPass::run(), llvm::DemandedBitsAnalysis::run(), llvm::DemandedBitsPrinterPass::run(), llvm::DominanceFrontierAnalysis::run(), llvm::DominanceFrontierPrinterPass::run(), llvm::FunctionPropertiesPrinterPass::run(), llvm::InlineSizeEstimatorAnalysisPrinterPass::run(), llvm::LazyValueInfoPrinterPass::run(), llvm::LintPass::run(), llvm::LoopAccessAnalysis::run(), llvm::LoopAnalysis::run(), llvm::LoopPrinterPass::run(), llvm::LoopVerifierPass::run(), llvm::MemoryDependenceAnalysis::run(), llvm::MemorySSAAnalysis::run(), llvm::MemorySSAPrinterPass::run(), llvm::MemorySSAWalkerPrinterPass::run(), llvm::MemorySSAVerifierPass::run(), llvm::MustExecutePrinterPass::run(), llvm::OptimizationRemarkEmitterAnalysis::run(), llvm::PhiValuesPrinterPass::run(), llvm::PostDominatorTreePrinterPass::run(), llvm::RegionInfoAnalysis::run(), llvm::RegionInfoPrinterPass::run(), llvm::RegionInfoVerifierPass::run(), llvm::ScalarEvolutionAnalysis::run(), llvm::ScalarEvolutionVerifierPass::run(), llvm::ScalarEvolutionPrinterPass::run(), llvm::SCEVAA::run(), llvm::StackSafetyAnalysis::run(), llvm::StackSafetyPrinterPass::run(), llvm::UniformityInfoPrinterPass::run(), llvm::ExpandReductionsPass::run(), llvm::HardwareLoopsPass::run(), llvm::ReplaceWithVeclib::run(), llvm::TypePromotionPass::run(), llvm::DominatorTreePrinterPass::run(), llvm::DominatorTreeVerifierPass::run(), llvm::SafepointIRVerifierPass::run(), llvm::AggressiveInstCombinePass::run(), llvm::CoroElidePass::run(), llvm::InstCombinePass::run(), llvm::BoundsCheckingPass::run(), llvm::LowerAllowCheckPass::run(), llvm::ObjCARCOptPass::run(), llvm::ObjCARCContractPass::run(), llvm::PAEvalPass::run(), llvm::AlignmentFromAssumptionsPass::run(), llvm::AnnotationRemarksPass::run(), llvm::BDCEPass::run(), llvm::CallSiteSplittingPass::run(), llvm::ConstantHoistingPass::run(), llvm::CorrelatedValuePropagationPass::run(), llvm::DCEPass::run(), llvm::DFAJumpThreadingPass::run(), llvm::EarlyCSEPass::run(), llvm::FlattenCFGPass::run(), llvm::Float2IntPass::run(), llvm::GuardWideningPass::run(), llvm::GVNPass::run(), llvm::GVNHoistPass::run(), llvm::IRCEPass::run(), llvm::InferAddressSpacesPass::run(), llvm::InferAlignmentPass::run(), llvm::InstSimplifyPass::run(), llvm::JumpTableToSwitchPass::run(), llvm::JumpThreadingPass::run(), llvm::LoopAccessInfoPrinterPass::run(), llvm::LoopDataPrefetchPass::run(), llvm::LoopDistributePass::run(), llvm::LoopFusePass::run(), llvm::LoopLoadEliminationPass::run(), llvm::FunctionToLoopPassAdaptor::run(), llvm::LoopUnrollPass::run(), llvm::LowerMatrixIntrinsicsPass::run(), llvm::MemCpyOptPass::run(), llvm::MergedLoadStoreMotionPass::run(), llvm::MergeICmpsPass::run(), llvm::NaryReassociatePass::run(), llvm::PartiallyInlineLibCallsPass::run(), llvm::PlaceSafepointsPass::run(), llvm::RegToMemPass::run(), llvm::ScalarizeMaskedMemIntrinPass::run(), llvm::ScalarizerPass::run(), llvm::SCCPPass::run(), llvm::SimplifyCFGPass::run(), llvm::SinkingPass::run(), llvm::SpeculativeExecutionPass::run(), llvm::SROAPass::run(), llvm::StraightLineStrengthReducePass::run(), llvm::StructurizeCFGPass::run(), llvm::TailCallElimPass::run(), llvm::TLSVariableHoistPass::run(), llvm::WarnMissedTransformationsPass::run(), llvm::AssumeSimplifyPass::run(), llvm::AssumeBuilderPass::run(), llvm::FixIrreduciblePass::run(), llvm::InjectTLIMappings::run(), llvm::LCSSAPass::run(), llvm::LoopSimplifyPass::run(), llvm::LowerSwitchPass::run(), llvm::PromotePass::run(), llvm::MoveAutoInitPass::run(), llvm::PredicateInfoPrinterPass::run(), llvm::PredicateInfoVerifierPass::run(), llvm::UnifyLoopExitsPass::run(), llvm::LoadStoreVectorizerPass::run(), llvm::LoopVectorizePass::run(), llvm::SLPVectorizerPass::run(), llvm::AMDGPUPromoteKernelArgumentsPass::run(), llvm::AMDGPUPromoteAllocaToVectorPass::run(), llvm::AMDGPUAtomicOptimizerPass::run(), llvm::AMDGPUAnnotateUniformValuesPass::run(), llvm::AMDGPURewriteUndefForPHIPass::run(), llvm::SIAnnotateControlFlowPass::run(), llvm::AMDGPUUnifyDivergentExitNodesPass::run(), llvm::SPIRVConvergenceRegionAnalysis::run(), llvm::DependenceAnalysis::run(), llvm::DependenceAnalysisPrinterPass::run(), llvm::InlineCostAnnotationPrinterPass::run(), llvm::LazyValueAnalysis::run(), llvm::DebugAssignmentTrackingPrinterPass::run(), llvm::DwarfEHPreparePass::run(), llvm::ExpandMemCmpPass::run(), llvm::GCFunctionAnalysis::run(), llvm::GCLoweringPass::run(), llvm::InterleavedAccessPass::run(), llvm::InterleavedLoadCombinePass::run(), llvm::MachineFunctionAnalysis::run(), llvm::FunctionToMachineFunctionPassAdaptor::run(), llvm::SafeStackPass::run(), llvm::StackProtectorPass::run(), llvm::ControlHeightReductionPass::run(), llvm::ThreadSanitizerPass::run(), llvm::DSEPass::run(), llvm::LoopSinkPass::run(), llvm::LibCallsShrinkWrapPass::run(), llvm::LoopVersioningPass::run(), llvm::PGOMemOPSizeOpt::run(), llvm::CallBrPreparePass::run(), llvm::FunctionAnalysisManagerCGSCCProxy::run(), llvm::CGSCCToFunctionPassAdaptor::run(), llvm::CoroSplitPass::run(), llvm::ArgumentPromotionPass::run(), llvm::AttributorCGSCCPass::run(), llvm::AttributorLightCGSCCPass::run(), llvm::PostOrderFunctionAttrsPass::run(), llvm::InlinerPass::run(), llvm::OpenMPOptCGSCCPass::run(), llvm::DevirtSCCRepeatedPass::run(), llvm::InlineAdvisorAnalysisPrinterPass::run(), llvm::PassManager< IRUnitT, AnalysisManagerT, ExtraArgTs >::run(), llvm::DDGAnalysisPrinterPass::run(), llvm::DDGDotPrinterPass::run(), llvm::IndVarSimplifyPass::run(), llvm::IVUsersPrinterPass::run(), llvm::LoopStrengthReducePass::run(), llvm::SimpleLoopUnswitchPass::run(), llvm::LiveIntervalsAnalysis::run(), llvm::LiveIntervalsPrinterPass::run(), llvm::LiveVariablesPrinterPass::run(), llvm::MachineBlockFrequencyAnalysis::run(), llvm::MachineBlockFrequencyPrinterPass::run(), llvm::MachineBranchProbabilityPrinterPass::run(), llvm::MachineDominatorTreePrinterPass::run(), llvm::MachineLoopAnalysis::run(), llvm::MachineLoopPrinterPass::run(), llvm::MachineOptimizationRemarkEmitterAnalysis::run(), llvm::MachinePostDominatorTreePrinterPass::run(), llvm::PrintMIRPass::run(), llvm::SlotIndexesPrinterPass::run(), llvm::SILowerI1CopiesPass::run(), llvm::AMDGPUISelDAGToDAGPass::run(), llvm::SIFixSGPRCopiesPass::run(), llvm::ModuleInlinerWrapperPass::run(), llvm::ModuleInlinerPass::run(), llvm::MetaRenamerPass::run(), llvm::PrintModulePass::run(), llvm::BitcodeWriterPass::run(), llvm::AlwaysInlinerPass::run(), llvm::PartialInlinerPass::run(), llvm::WholeProgramDevirtPass::run(), llvm::CallGraphPrinterPass::run(), llvm::CallGraphSCCsPrinterPass::run(), llvm::CallGraphDOTPrinterPass::run(), llvm::CallGraphViewerPass::run(), llvm::ModuleToPostOrderCGSCCPassAdaptor::run(), llvm::DXILMetadataAnalysisPrinterPass::run(), llvm::DXILResourcePrinterPass::run(), llvm::GlobalsAA::run(), llvm::RecomputeGlobalsAAPass::run(), llvm::IRSimilarityAnalysisPrinterPass::run(), llvm::LazyCallGraphAnalysis::run(), llvm::LazyCallGraphPrinterPass::run(), llvm::LazyCallGraphDOTPrinterPass::run(), llvm::ModuleSummaryIndexAnalysis::run(), llvm::MustBeExecutedContextPrinterPass::run(), llvm::ProfileSummaryPrinterPass::run(), llvm::StackSafetyGlobalAnalysis::run(), llvm::StackSafetyGlobalPrinterPass::run(), llvm::PreISelIntrinsicLoweringPass::run(), llvm::ModuleToFunctionPassAdaptor::run(), llvm::VerifierPass::run(), llvm::AddressSanitizerPass::run(), llvm::CGProfilePass::run(), llvm::DataFlowSanitizerPass::run(), llvm::GCOVProfilerPass::run(), llvm::InstrProfilingLoweringPass::run(), llvm::MemorySanitizerPass::run(), llvm::MemProfUsePass::run(), llvm::NumericalStabilitySanitizerPass::run(), llvm::PGOForceFunctionAttrsPass::run(), llvm::SanitizerCoveragePass::run(), llvm::AttributorPass::run(), llvm::AttributorLightPass::run(), llvm::ReversePostOrderFunctionAttrsPass::run(), llvm::GlobalOptPass::run(), llvm::HotColdSplittingPass::run(), llvm::InferFunctionAttrsPass::run(), llvm::IROutlinerPass::run(), llvm::LoopExtractorPass::run(), llvm::MemProfContextDisambiguation::run(), llvm::OpenMPOptPass::run(), llvm::SampleProfileLoaderPass::run(), llvm::PseudoProbeUpdatePass::run(), llvm::IPSCCPPass::run(), llvm::ThinLTOBitcodeWriterPass::run(), llvm::RewriteStatepointsForGC::run(), llvm::RelLookupTableConverterPass::run(), llvm::AMDGPUAttributorPass::run(), llvm::AMDGPUPerfHintAnalysisPass::run(), llvm::DXILResourceMDPrinterPass::run(), llvm::dxil::ShaderFlagsAnalysisPrinter::run(), llvm::CtxProfAnalysisPrinterPass::run(), llvm::ShadowStackGCLoweringPass::run(), llvm::CoroCleanupPass::run(), llvm::HipStdParAcceleratorCodeSelectionPass::run(), llvm::HWAddressSanitizerPass::run(), llvm::PGOInstrumentationGen::run(), llvm::PGOInstrumentationUse::run(), llvm::PGOIndirectCallPromotion::run(), llvm::SyntheticCountsPropagation::run(), llvm::AMDGPUSplitModulePass::run(), runCGProfilePass(), llvm::PassManager< Loop, LoopAnalysisManager, LoopStandardAnalysisResults &, LPMUpdater & >::runWithLoopNestPasses(), llvm::PassManager< Loop, LoopAnalysisManager, LoopStandardAnalysisResults &, LPMUpdater & >::runWithoutLoopNestPasses(), shouldRunOnFunction(), llvm::InlineAdvisorAnalysis::Result::tryCreate(), updateCGAndAnalysisManagerForPass(), and updateNewSCCFunctionAnalyses().

◆ invalidate()

template<typename IRUnitT , typename... ExtraArgTs>
void llvm::AnalysisManager< IRUnitT, ExtraArgTs >::invalidate ( IRUnitT &  IR,
const PreservedAnalyses PA 
)
inline

◆ operator=()

template<typename IRUnitT , typename... ExtraArgTs>
AnalysisManager< IRUnitT, ExtraArgTs... > & llvm::AnalysisManager< IRUnitT, ExtraArgTs >::operator= ( AnalysisManager< IRUnitT, ExtraArgTs > &&  )
inlinedefault

◆ registerPass()

template<typename IRUnitT , typename... ExtraArgTs>
template<typename PassBuilderT >
bool llvm::AnalysisManager< IRUnitT, ExtraArgTs >::registerPass ( PassBuilderT &&  PassBuilder)
inline

Register an analysis pass with the manager.

The parameter is a callable whose result is an analysis pass. This allows passing in a lambda to construct the analysis.

The analysis type to register is the type returned by calling the PassBuilder argument. If that type has already been registered, then the argument will not be called and this function will return false. Otherwise, we register the analysis returned by calling PassBuilder(), and this function returns true.

(Note: Although the return value of this function indicates whether or not an analysis was previously registered, there intentionally isn't a way to query this directly. Instead, you should just register all the analyses you might want and let this class run them lazily. This idiom lets us minimize the number of times we have to look up analyses in our hashtable.)

Definition at line 467 of file PassManager.h.

Referenced by llvm::OpenMPIRBuilder::applySimd(), computeHeuristicUnrollFactor(), llvm::PassBuilder::crossRegisterProxies(), eliminateDeadCode(), if(), llvm::lintFunction(), llvm::PreservedCFGCheckerInstrumentation::registerCallbacks(), llvm::PassBuilder::registerFunctionAnalyses(), and runNewPMPasses().

◆ verifyNotInvalidated()

template<typename IRUnitT , typename... ExtraArgTs>
template<typename PassT >
void llvm::AnalysisManager< IRUnitT, ExtraArgTs >::verifyNotInvalidated ( IRUnitT &  IR,
typename PassT::Result *  Result 
) const
inline

Verify that the given Result cannot be invalidated, assert otherwise.

Definition at line 441 of file PassManager.h.

References assert(), IR, and llvm::PreservedAnalyses::none().


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