42 for (
Loop *RootL : *LI) {
44 "Must start with an empty preorder walk worklist.");
50 }
while (!PreOrderWorklist.
empty());
73 for (
Loop *L : PreOrderLoops)
92 bool AreLoopAnalysesPreserved =
107 if (
auto *OuterProxy =
109 for (
const auto &OuterInvalidationPair :
110 OuterProxy->getOuterInvalidations()) {
111 AnalysisKey *OuterAnalysisID = OuterInvalidationPair.first;
112 const auto &InnerAnalysisIDs = OuterInvalidationPair.second;
116 for (
AnalysisKey *InnerAnalysisID : InnerAnalysisIDs)
117 InnerPA->
abandon(InnerAnalysisID);
124 InnerAM->invalidate(*L, *InnerPA);
130 if (!AreLoopAnalysesPreserved)
131 InnerAM->invalidate(*L, PA);
void abandon()
Mark an analysis as abandoned.
void push_back(const T &Elt)
bool invalidate(IRUnitT &IR, const PreservedAnalyses &PA)
Trigger the invalidation of some other analysis pass if not already handled and return whether it was...
PreservedAnalyses getLoopPassPreservedAnalyses()
Returns the minimum set of Analyses that all loop passes must preserve.
This is the interface for a simple mod/ref and alias analysis over globals.
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
The adaptor from a function pass to a loop pass computes these analyses and makes them available to t...
Analysis pass which computes a DominatorTree.
This is the interface for a SCEV-based alias analysis.
Analysis pass that exposes the LoopInfo for a function.
LLVM_NODISCARD bool empty() const
auto reverse(ContainerTy &&C, typename std::enable_if< has_rbegin< ContainerTy >::value >::type *=nullptr) -> decltype(make_range(C.rbegin(), C.rend()))
This header provides classes for managing per-loop analyses.
Result run(IRUnitT &IR, AnalysisManager< IRUnitT, ExtraArgTs...> &AM, ExtraArgTs...)
Run the analysis pass and create our proxy result object.
A set of analyses that are preserved following a run of a transformation pass.
PassT::Result & getResult(IRUnitT &IR, ExtraArgTs...ExtraArgs)
Get the result of an analysis pass for a given IR unit.
A manager for alias analyses.
PreservedAnalysisChecker getChecker() const
Build a checker for this PreservedAnalyses and the specified analysis type.
Analysis pass providing a never-invalidated alias analysis result.
Analysis pass providing a never-invalidated alias analysis result.
void append(in_iter in_start, in_iter in_end)
Add the specified range to the end of the SmallVector.
A function analysis which provides an AssumptionCache.
An analysis over an "inner" IR unit that provides access to an analysis manager over a "outer" IR uni...
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small...
LLVM_NODISCARD T pop_back_val()
bool invalidate(IRUnitT &IR, const PreservedAnalyses &PA, typename AnalysisManager< IRUnitT, ExtraArgTs...>::Invalidator &Inv)
Handler for invalidation of the outer IR unit, IRUnitT.
Analysis pass that exposes the ScalarEvolution for a function.
Analysis pass providing a never-invalidated alias analysis result.
Represents a single loop in the control flow graph.
void preserve()
Mark an analysis as preserved.
API to communicate dependencies between analyses during invalidation.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This templated class represents "all analyses that operate over \<a particular IR unit\>" (e...
bool allAnalysesInSetPreserved() const
Directly test whether a set of analyses is preserved.
This is the interface for LLVM's primary stateless and local alias analysis.
A container for analyses that lazily runs them and caches their results.
A special type used by analysis passes to provide an address that identifies that particular analysis...
An analysis over an "outer" IR unit that provides access to an analysis manager over an "inner" IR un...