LLVM: llvm::AnalysisManager< IRUnitT, ExtraArgTs > Class Template Reference (original) (raw)
A container for analyses that lazily runs them and caches their results. More...
#include "[llvm/IR/PassManager.h](IR%5F2PassManager%5F8h%5Fsource.html)"
| Classes | |
|---|---|
| class | Invalidator |
| API to communicate dependencies between analyses during invalidation. More... |
| Public Member Functions | |
|---|---|
| AnalysisManager () | |
| Construct an empty analysis manager. | |
| AnalysisManager (AnalysisManager &&) | |
| AnalysisManager & | operator= (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 | |
| bool | isPassRegistered () const |
| Returns true if the specified analysis pass is registered. | |
| template | |
| PassT::Result & | getResult (IRUnitT &IR, ExtraArgTs... ExtraArgs) |
| Get the result of an analysis pass for a given IR unit. | |
| template | |
| PassT::Result * | getCachedResult (IRUnitT &IR) const |
| Get the cached result of an analysis pass for a given IR unit. | |
| template | |
| void | verifyNotInvalidated (IRUnitT &IR, typename PassT::Result *Result) const |
| Verify that the given Result cannot be invalidated, assert otherwise. | |
| template | |
| 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. | |
| template | |
| void | clearAnalysis (IRUnitT &IR) |
| Directly clear a cached analysis for an IR unit. |
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 254 of file PassManager.h.
template<typename IRUnitT, typename... ExtraArgTs>
Construct an empty analysis manager.
◆ AnalysisManager() [2/2]
template<typename IRUnitT, typename... ExtraArgTs>
◆ clear() [1/2]
template<typename IRUnitT, typename... ExtraArgTs>
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 397 of file PassManager.h.
◆ clear() [2/2]
template<typename IRUnitT, typename... ExtraArgTs>
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 114 of file PassManagerImpl.h.
References getCachedResult(), and IR.
Referenced by llvm::InlinerPass::run().
◆ clearAnalysis()
template<typename IRUnitT, typename... ExtraArgTs>
template
Directly clear a cached analysis for an IR unit.
Using invalidate() over this is preferred unless you are really sure you want to only clear this analysis without asking if it is invalid.
Definition at line 498 of file PassManager.h.
◆ empty()
template<typename IRUnitT, typename... ExtraArgTs>
Returns true if the analysis manager has an empty results cache.
Definition at line 377 of file PassManager.h.
◆ getCachedResult()
template<typename IRUnitT, typename... ExtraArgTs>
template
| 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 430 of file PassManager.h.
Referenced by clear(), incorporateNewSCCRange(), invalidate(), llvm::AssumeBuilderPass::run(), llvm::AssumeSimplifyPass::run(), llvm::BreakCriticalEdgesPass::run(), llvm::ExtraFunctionPassManager< MarkerTy >::run(), llvm::ExtraLoopPassManager< MarkerTy >::run(), llvm::FixIrreduciblePass::run(), llvm::GCNRewritePartialRegUsesPass::run(), llvm::GuardWideningPass::run(), llvm::GVNPass::run(), llvm::InferAddressSpacesPass::run(), llvm::InstCombinePass::run(), llvm::JumpTableToSwitchPass::run(), llvm::LCSSAPass::run(), llvm::LoopSimplifyPass::run(), llvm::LoopUnrollPass::run(), llvm::LowerConstantIntrinsicsPass::run(), llvm::LowerSwitchPass::run(), llvm::MachineSinkingPass::run(), llvm::MergeICmpsPass::run(), llvm::ModuleToPostOrderCGSCCPassAdaptor::run(), llvm::PartiallyInlineLibCallsPass::run(), llvm::PassManager< LazyCallGraph::SCC, CGSCCAnalysisManager, LazyCallGraph &, CGSCCUpdateResult & >::run(), llvm::RecomputeGlobalsAAPass::run(), llvm::RegisterCoalescerPass::run(), llvm::ScalarizeMaskedMemIntrinPass::run(), llvm::SILowerControlFlowPass::run(), llvm::SILowerSGPRSpillsPass::run(), llvm::SILowerWWMCopiesPass::run(), llvm::SIWholeQuadModePass::run(), llvm::SLPVectorizerPass::run(), llvm::TailCallElimPass::run(), llvm::UnreachableMachineBlockElimPass::run(), llvm::XRayInstrumentationPass::run(), and updateCGAndAnalysisManagerForPass().
◆ getResult()
template<typename IRUnitT, typename... ExtraArgTs>
template
| 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 411 of file PassManager.h.
Referenced by llvm::SelectionDAGISel::initializeAnalysisResults(), llvm::RAGreedy::RequiredAnalyses::RequiredAnalyses(), llvm::AAEvaluator::run(), llvm::AAManager::run(), llvm::AggressiveInstCombinePass::run(), llvm::AliasSetsPrinterPass::run(), llvm::AlignmentFromAssumptionsPass::run(), llvm::AMDGPUAtomicOptimizerPass::run(), llvm::AMDGPUAttributorPass::run(), llvm::AMDGPUISelDAGToDAGPass::run(), llvm::AMDGPUMarkLastScratchLoadPass::run(), llvm::AMDGPUPerfHintAnalysisPass::run(), llvm::AMDGPUPromoteAllocaToVectorPass::run(), llvm::AMDGPUPromoteKernelArgumentsPass::run(), llvm::AMDGPURewriteAGPRCopyMFMAPass::run(), llvm::AMDGPURewriteUndefForPHIPass::run(), llvm::AMDGPUSwLowerLDSPass::run(), llvm::AMDGPUUniformIntrinsicCombinePass::run(), llvm::AMDGPUUnifyDivergentExitNodesPass::run(), llvm::AnnotationRemarksPass::run(), llvm::ArgumentPromotionPass::run(), llvm::AssumeBuilderPass::run(), llvm::AssumeSimplifyPass::run(), llvm::AssumptionPrinterPass::run(), llvm::AttributorCGSCCPass::run(), llvm::AttributorLightCGSCCPass::run(), llvm::AttributorLightPass::run(), llvm::AttributorPass::run(), llvm::BasicAA::run(), llvm::BDCEPass::run(), llvm::BitcodeWriterPass::run(), llvm::BlockFrequencyAnalysis::run(), llvm::BlockFrequencyPrinterPass::run(), llvm::BoundsCheckingPass::run(), llvm::BranchProbabilityAnalysis::run(), llvm::BranchProbabilityPrinterPass::run(), llvm::CallGraphDOTPrinterPass::run(), llvm::CallGraphPrinterPass::run(), llvm::CallGraphSCCsPrinterPass::run(), llvm::CallGraphViewerPass::run(), llvm::CallSiteSplittingPass::run(), llvm::CFGOnlyPrinterPass::run(), llvm::CFGOnlyViewerPass::run(), llvm::CFGPrinterPass::run(), llvm::CFGViewerPass::run(), llvm::CGSCCToFunctionPassAdaptor::run(), llvm::ConstantHoistingPass::run(), llvm::ConstraintEliminationPass::run(), llvm::CoroAnnotationElidePass::run(), llvm::CoroElidePass::run(), llvm::CoroSplitPass::run(), llvm::CorrelatedValuePropagationPass::run(), llvm::CostModelPrinterPass::run(), llvm::CycleInfoPrinterPass::run(), llvm::CycleInfoVerifierPass::run(), llvm::DataFlowSanitizerPass::run(), llvm::DCEPass::run(), llvm::DDGAnalysisPrinterPass::run(), llvm::DDGDotPrinterPass::run(), llvm::DelinearizationPrinterPass::run(), llvm::DemandedBitsAnalysis::run(), llvm::DemandedBitsPrinterPass::run(), llvm::DevirtSCCRepeatedPass::run(), llvm::DFAJumpThreadingPass::run(), llvm::DominanceFrontierAnalysis::run(), llvm::DominanceFrontierPrinterPass::run(), llvm::DominatorTreePrinterPass::run(), llvm::DominatorTreeVerifierPass::run(), llvm::DSEPass::run(), llvm::dxil::RootSignatureAnalysisPrinter::run(), llvm::dxil::ShaderFlagsAnalysis::run(), llvm::dxil::ShaderFlagsAnalysisPrinter::run(), llvm::DXILForwardHandleAccesses::run(), llvm::DXILMetadataAnalysisPrinterPass::run(), llvm::DXILResourceAnalysis::run(), llvm::DXILResourceBindingAnalysis::run(), llvm::DXILResourceImplicitBinding::run(), llvm::DXILResourcePrinterPass::run(), llvm::EarlyCSEPass::run(), llvm::EarlyIfConverterPass::run(), llvm::ExpandReductionsPass::run(), llvm::FixIrreduciblePass::run(), llvm::FlattenCFGPass::run(), llvm::Float2IntPass::run(), llvm::FunctionAnalysisManagerCGSCCProxy::run(), llvm::FunctionPropertiesPrinterPass::run(), llvm::FunctionToLoopPassAdaptor::run(), llvm::GCNNSAReassignPass::run(), llvm::GCNPreRAOptimizationsPass::run(), llvm::GCOVProfilerPass::run(), llvm::GISelValueTrackingPrinterPass::run(), llvm::GlobalOptPass::run(), llvm::GlobalsAA::run(), llvm::GuardWideningPass::run(), llvm::GVNHoistPass::run(), llvm::GVNPass::run(), llvm::HardwareLoopsPass::run(), llvm::HotColdSplittingPass::run(), llvm::IndVarSimplifyPass::run(), llvm::InferAddressSpacesPass::run(), llvm::InferAlignmentPass::run(), llvm::InferFunctionAttrsPass::run(), llvm::InjectTLIMappings::run(), llvm::InlineAdvisorAnalysisPrinterPass::run(), llvm::InlinerPass::run(), llvm::InstCombinePass::run(), llvm::InstrProfilingLoweringPass::run(), llvm::InstSimplifyPass::run(), llvm::IPSCCPPass::run(), llvm::IRCEPass::run(), llvm::IROutlinerPass::run(), llvm::IRSimilarityAnalysisPrinterPass::run(), llvm::IVUsersPrinterPass::run(), llvm::JumpTableToSwitchPass::run(), llvm::JumpThreadingPass::run(), llvm::LazyCallGraphAnalysis::run(), llvm::LazyCallGraphDOTPrinterPass::run(), llvm::LazyCallGraphPrinterPass::run(), llvm::LazyValueInfoPrinterPass::run(), llvm::LCSSAPass::run(), llvm::LintPass::run(), llvm::LiveDebugVariablesAnalysis::run(), llvm::LiveDebugVariablesPrinterPass::run(), llvm::LiveIntervalsAnalysis::run(), llvm::LiveIntervalsPrinterPass::run(), llvm::LiveRegMatrixAnalysis::run(), llvm::LiveStacksPrinterPass::run(), llvm::LiveVariablesPrinterPass::run(), llvm::LoadStoreVectorizerPass::run(), llvm::LoopAccessInfoPrinterPass::run(), llvm::LoopAnalysis::run(), llvm::LoopDataPrefetchPass::run(), llvm::LoopDistributePass::run(), llvm::LoopExtractorPass::run(), llvm::LoopFusePass::run(), llvm::LoopLoadEliminationPass::run(), llvm::LoopPrinterPass::run(), llvm::LoopSimplifyPass::run(), llvm::LoopStrengthReducePass::run(), llvm::LoopUnrollPass::run(), llvm::LoopVectorizePass::run(), llvm::LoopVerifierPass::run(), llvm::LoopVersioningPass::run(), llvm::LowerAllowCheckPass::run(), llvm::LowerConstantIntrinsicsPass::run(), llvm::LowerMatrixIntrinsicsPass::run(), llvm::LowerSwitchPass::run(), llvm::MachineBlockFrequencyAnalysis::run(), llvm::MachineBlockFrequencyPrinterPass::run(), llvm::MachineBlockPlacementPass::run(), llvm::MachineBranchProbabilityPrinterPass::run(), llvm::MachineCSEPass::run(), llvm::MachineCycleInfoPrinterPass::run(), llvm::MachineDominatorTreePrinterPass::run(), llvm::MachineLoopAnalysis::run(), llvm::MachineLoopPrinterPass::run(), llvm::MachineOptimizationRemarkEmitterAnalysis::run(), llvm::MachinePostDominatorTreePrinterPass::run(), llvm::MachineSchedulerPass::run(), llvm::MachineSinkingPass::run(), llvm::MachineTraceMetricsAnalysis::run(), llvm::MachineTraceMetricsVerifierPass::run(), llvm::MachineUniformityAnalysis::run(), llvm::MachineUniformityPrinterPass::run(), llvm::MemCpyOptPass::run(), llvm::MemoryDependenceAnalysis::run(), llvm::MemorySanitizerPass::run(), llvm::MemorySSAAnalysis::run(), llvm::MemorySSAPrinterPass::run(), llvm::MemorySSAVerifierPass::run(), llvm::MemorySSAWalkerPrinterPass::run(), llvm::MemProfContextDisambiguation::run(), llvm::MemProfUsePass::run(), llvm::MergedLoadStoreMotionPass::run(), llvm::MergeICmpsPass::run(), llvm::MetaRenamerPass::run(), llvm::ModuleSummaryIndexAnalysis::run(), llvm::ModuleToPostOrderCGSCCPassAdaptor::run(), llvm::MoveAutoInitPass::run(), llvm::MustBeExecutedContextPrinterPass::run(), llvm::MustExecutePrinterPass::run(), llvm::NaryReassociatePass::run(), llvm::NewGVNPass::run(), llvm::ObjCARCContractPass::run(), llvm::ObjCARCOptPass::run(), llvm::OpenMPOptCGSCCPass::run(), llvm::OpenMPOptPass::run(), llvm::OptimizationRemarkEmitterAnalysis::run(), llvm::PAEvalPass::run(), llvm::PartialInlinerPass::run(), llvm::PartiallyInlineLibCallsPass::run(), llvm::PassManager< LazyCallGraph::SCC, CGSCCAnalysisManager, LazyCallGraph &, CGSCCUpdateResult & >::run(), llvm::PeepholeOptimizerPass::run(), llvm::PGOForceFunctionAttrsPass::run(), llvm::PhiValuesPrinterPass::run(), llvm::PhysicalRegisterUsageInfoPrinterPass::run(), llvm::PlaceSafepointsPass::run(), llvm::PostDominatorTreePrinterPass::run(), llvm::PostMachineSchedulerPass::run(), llvm::PostOrderFunctionAttrsPass::run(), llvm::PostRASchedulerPass::run(), llvm::PredicateInfoPrinterPass::run(), llvm::PredicateInfoVerifierPass::run(), llvm::PrintMIRPass::run(), llvm::PrintModulePass::run(), llvm::ProfileSummaryPrinterPass::run(), llvm::PrologEpilogInserterPass::run(), llvm::PromotePass::run(), llvm::PseudoProbeUpdatePass::run(), llvm::ReachingDefPrinterPass::run(), llvm::RecomputeGlobalsAAPass::run(), llvm::RegionInfoAnalysis::run(), llvm::RegionInfoPrinterPass::run(), llvm::RegionInfoVerifierPass::run(), llvm::RegisterCoalescerPass::run(), llvm::RegToMemPass::run(), llvm::RegUsageInfoCollectorPass::run(), llvm::RegUsageInfoPropagationPass::run(), llvm::RelLookupTableConverterPass::run(), llvm::RenameIndependentSubregsPass::run(), llvm::ReplaceWithVeclib::run(), llvm::ReversePostOrderFunctionAttrsPass::run(), llvm::RewriteStatepointsForGC::run(), llvm::SafepointIRVerifierPass::run(), llvm::SampleProfileLoaderPass::run(), llvm::SandboxVectorizerPass::run(), llvm::ScalarEvolutionAnalysis::run(), llvm::ScalarEvolutionPrinterPass::run(), llvm::ScalarEvolutionVerifierPass::run(), llvm::ScalarizeMaskedMemIntrinPass::run(), llvm::ScalarizerPass::run(), llvm::SCCPPass::run(), llvm::SCEVAA::run(), llvm::SCEVDivisionPrinterPass::run(), llvm::SeparateConstOffsetFromGEPPass::run(), llvm::ShrinkWrapPass::run(), llvm::SIFixSGPRCopiesPass::run(), llvm::SIFormMemoryClausesPass::run(), llvm::SIInsertWaitcntsPass::run(), llvm::SILateBranchLoweringPass::run(), llvm::SILoadStoreOptimizerPass::run(), llvm::SILowerI1CopiesPass::run(), llvm::SILowerSGPRSpillsPass::run(), llvm::SIMemoryLegalizerPass::run(), llvm::SimplifyCFGPass::run(), llvm::SinkingPass::run(), llvm::SIOptimizeExecMaskingPreRAPass::run(), llvm::SIOptimizeVGPRLiveRangePass::run(), llvm::SIPreAllocateWWMRegsPass::run(), llvm::SIWholeQuadModePass::run(), llvm::SlotIndexesPrinterPass::run(), llvm::SLPVectorizerPass::run(), llvm::SpeculativeExecutionPass::run(), llvm::SpillPlacementAnalysis::run(), llvm::SPIRVConvergenceRegionAnalysis::run(), llvm::SROAPass::run(), llvm::StackColoringPass::run(), llvm::StackFrameLayoutAnalysisPass::run(), llvm::StackSafetyAnalysis::run(), llvm::StackSafetyGlobalAnalysis::run(), llvm::StackSafetyGlobalPrinterPass::run(), llvm::StackSafetyPrinterPass::run(), llvm::StackSlotColoringPass::run(), llvm::StraightLineStrengthReducePass::run(), llvm::StructurizeCFGPass::run(), llvm::TailCallElimPass::run(), llvm::TailDuplicatePassBase< DerivedT, PreRegAlloc >::run(), llvm::ThinLTOBitcodeWriterPass::run(), llvm::TypePromotionPass::run(), llvm::UniformityInfoPrinterPass::run(), llvm::UnifyLoopExitsPass::run(), llvm::VerifierPass::run(), llvm::VerifierPass::run(), llvm::VirtRegMapPrinterPass::run(), llvm::VirtRegRewriterPass::run(), llvm::WarnMissedTransformationsPass::run(), llvm::X86FPStackifierPass::run(), updateCGAndAnalysisManagerForPass(), and updateNewSCCFunctionAnalyses().
◆ invalidate()
template<typename IRUnitT, typename... ExtraArgTs>
Invalidate cached analyses for an IR unit.
Walk through all of the analyses pertaining to this unit of IR and invalidate them, unless they are preserved by the PreservedAnalyses set.
Definition at line 164 of file PassManagerImpl.h.
References llvm::PreservedAnalyses::allAnalysesInSetPreserved(), assert(), E(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::empty(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), getCachedResult(), I, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::insert(), IR, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::lookup(), and llvm::PassInstrumentation::runAnalysisInvalidated().
Referenced by incorporateNewSCCRange(), llvm::DevirtSCCRepeatedPass::run(), llvm::FunctionToMachineFunctionPassAdaptor::run(), llvm::IRCEPass::run(), llvm::PassManager< LazyCallGraph::SCC, CGSCCAnalysisManager, LazyCallGraph &, CGSCCUpdateResult & >::run(), and updateCGAndAnalysisManagerForPass().
◆ isPassRegistered()
template<typename IRUnitT, typename... ExtraArgTs>
template
Returns true if the specified analysis pass is registered.
Definition at line 403 of file PassManager.h.
◆ operator=()
template<typename IRUnitT, typename... ExtraArgTs>
◆ registerPass()
template<typename IRUnitT, typename... ExtraArgTs>
template
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](classllvm%5F1%5F1PassBuilder.html "This class provides access to building LLVM's passes.") 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, 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 472 of file PassManager.h.
Referenced by llvm::PassBuilder::crossRegisterProxies().
◆ verifyNotInvalidated()
template<typename IRUnitT, typename... ExtraArgTs>
template
| 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 447 of file PassManager.h.
The documentation for this class was generated from the following files:
- include/llvm/Analysis/InstructionSimplify.h
- include/llvm/IR/PassManager.h
- include/llvm/IR/PassManagerImpl.h