32bool LoopAnalysisManagerFunctionProxy::Result::invalidate(
34 FunctionAnalysisManager::Invalidator &Inv) {
50 auto PAC = PA.
getChecker<LoopAnalysisManagerFunctionProxy>();
51 bool invalidateMemorySSAAnalysis =
false;
60 invalidateMemorySSAAnalysis) {
66 for (
Loop *L : PreOrderLoops) {
68 InnerAM->clear(*L,
"<possibly invalidated loop>");
87 bool AreLoopAnalysesPreserved =
97 std::optional<PreservedAnalyses> InnerPA;
102 if (
auto *OuterProxy =
104 for (
const auto &OuterInvalidationPair :
105 OuterProxy->getOuterInvalidations()) {
106 AnalysisKey *OuterAnalysisID = OuterInvalidationPair.first;
107 const auto &InnerAnalysisIDs = OuterInvalidationPair.second;
108 if (Inv.invalidate(OuterAnalysisID,
F, PA)) {
111 for (
AnalysisKey *InnerAnalysisID : InnerAnalysisIDs)
112 InnerPA->abandon(InnerAnalysisID);
119 InnerAM->invalidate(*L, *InnerPA);
125 if (!AreLoopAnalysesPreserved)
126 InnerAM->invalidate(*L, PA);
134LoopAnalysisManagerFunctionProxy::Result
145 PA.
preserve<LoopAnalysisManagerFunctionProxy>();
#define LLVM_EXPORT_TEMPLATE
This header provides classes for managing per-loop analyses.
This file exposes an interface to building/using memory SSA to walk memory instructions using a use/d...
Provides implementations for PassManager and AnalysisManager template methods.
A manager for alias analyses.
This templated class represents "all analyses that operate over <aparticular IR unit>" (e....
A container for analyses that lazily runs them and caches their results.
PassT::Result & getResult(IRUnitT &IR, ExtraArgTs... ExtraArgs)
Get the result of an analysis pass for a given IR unit.
A function analysis which provides an AssumptionCache.
Analysis pass which computes a DominatorTree.
An analysis over an "outer" IR unit that provides access to an analysis manager over an "inner" IR un...
Result run(Function &IR, AnalysisManager< Function, ExtraArgTs... > &AM, ExtraArgTs...)
Analysis pass that exposes the LoopInfo for a function.
Represents a single loop in the control flow graph.
An analysis that produces MemorySSA for a function.
An analysis over an "inner" IR unit that provides access to an analysis manager over a "outer" IR uni...
A set of analyses that are preserved following a run of a transformation pass.
bool allAnalysesInSetPreserved() const
Directly test whether a set of analyses is preserved.
PreservedAnalyses & preserve()
Mark an analysis as preserved.
PreservedAnalysisChecker getChecker() const
Build a checker for this PreservedAnalyses and the specified analysis type.
Analysis pass that exposes the ScalarEvolution for a function.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
This is an optimization pass for GlobalISel generic memory operations.
auto reverse(ContainerTy &&C)
OuterAnalysisManagerProxy< FunctionAnalysisManager, Loop, LoopStandardAnalysisResults & > FunctionAnalysisManagerLoopProxy
A proxy from a FunctionAnalysisManager to a Loop.
LLVM_ABI PreservedAnalyses getLoopPassPreservedAnalyses()
Returns the minimum set of Analyses that all loop passes must preserve.
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
A special type used by analysis passes to provide an address that identifies that particular analysis...
The adaptor from a function pass to a loop pass computes these analyses and makes them available to t...