49#ifndef LLVM_IR_PASSINSTRUMENTATION_H
50#define LLVM_IR_PASSINSTRUMENTATION_H
61class PreservedAnalyses;
95 template <
typename CallableT>
100 template <
typename CallableT>
105 template <
typename CallableT>
110 template <
typename CallableT>
113 AfterPassCallbacks.
insert(AfterPassCallbacks.
begin(), std::move(
C));
118 template <
typename CallableT>
121 AfterPassInvalidatedCallbacks.
insert(
122 AfterPassInvalidatedCallbacks.
begin(), std::move(
C));
127 template <
typename CallableT>
132 template <
typename CallableT>
135 AfterAnalysisCallbacks.
insert(AfterAnalysisCallbacks.
begin(),
141 template <
typename CallableT>
146 template <
typename CallableT>
162 ShouldRunOptionalPassCallbacks;
165 BeforeSkippedPassCallbacks;
168 BeforeNonSkippedPassCallbacks;
173 AfterPassInvalidatedCallbacks;
176 BeforeAnalysisCallbacks;
179 AfterAnalysisCallbacks;
182 AnalysisInvalidatedCallbacks;
185 AnalysesClearedCallbacks;
201 template <
typename PassT>
202 using has_required_t =
decltype(std::declval<PassT &>().isRequired());
204 template <
typename PassT>
205 static std::enable_if_t<is_detected<has_required_t, PassT>::value,
bool>
206 isRequired(
const PassT &
Pass) {
207 return Pass.isRequired();
209 template <
typename PassT>
210 static std::enable_if_t<!is_detected<has_required_t, PassT>::value,
bool>
211 isRequired(
const PassT &
Pass) {
228 template <
typename IRUnitT,
typename PassT>
233 bool ShouldRun =
true;
234 if (!isRequired(
Pass)) {
235 for (
auto &
C : Callbacks->ShouldRunOptionalPassCallbacks)
240 for (
auto &
C : Callbacks->BeforeNonSkippedPassCallbacks)
243 for (
auto &
C : Callbacks->BeforeSkippedPassCallbacks)
253 template <
typename IRUnitT,
typename PassT>
257 for (
auto &
C : Callbacks->AfterPassCallbacks)
264 template <
typename IRUnitT,
typename PassT>
268 for (
auto &
C : Callbacks->AfterPassInvalidatedCallbacks)
274 template <
typename IRUnitT,
typename PassT>
277 for (
auto &
C : Callbacks->BeforeAnalysisCallbacks)
283 template <
typename IRUnitT,
typename PassT>
286 for (
auto &
C : Callbacks->AfterAnalysisCallbacks)
293 template <
typename IRUnitT,
typename PassT>
296 for (
auto &
C : Callbacks->AnalysisInvalidatedCallbacks)
304 for (
auto &
C : Callbacks->AnalysesClearedCallbacks)
313 template <
typename IRUnitT,
typename... ExtraArgsT>
319 template <
typename CallableT>
322 Callbacks->BeforeNonSkippedPassCallbacks.
emplace_back(std::move(
C));
326 Callbacks->BeforeNonSkippedPassCallbacks.
pop_back();
330bool isSpecialPass(StringRef PassID,
const std::vector<StringRef> &Specials);
This file defines the StringMap class.
This file provides Any, a non-template class modeled in the spirit of std::any.
block Block Frequency Analysis
Legalize the Machine IR a function s Machine IR
This file defines the SmallVector class.
static const char PassName[]
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
void registerAnalysesClearedCallback(CallableT C)
void registerBeforeAnalysisCallback(CallableT C)
void registerAfterPassInvalidatedCallback(CallableT C, bool ToFront=false)
void registerAnalysisInvalidatedCallback(CallableT C)
StringRef getPassNameForClassName(StringRef ClassName)
Get the pass name for a given pass class name.
void registerAfterAnalysisCallback(CallableT C, bool ToFront=false)
void(StringRef, const PreservedAnalyses &) AfterPassInvalidatedFunc
void(StringRef, Any) BeforeNonSkippedPassFunc
void registerBeforeNonSkippedPassCallback(CallableT C)
void registerBeforeSkippedPassCallback(CallableT C)
PassInstrumentationCallbacks(const PassInstrumentationCallbacks &)=delete
Copying PassInstrumentationCallbacks is not intended.
PassInstrumentationCallbacks()=default
bool(StringRef, Any) BeforePassFunc
void(StringRef) AnalysesClearedFunc
void addClassToPassName(StringRef ClassName, StringRef PassName)
Add a class name to pass name mapping for use by pass instrumentation.
void registerShouldRunOptionalPassCallback(CallableT C)
void(StringRef, Any) BeforeSkippedPassFunc
void operator=(const PassInstrumentationCallbacks &)=delete
void(StringRef, Any) AfterAnalysisFunc
void(StringRef, Any) BeforeAnalysisFunc
void(StringRef, Any) AnalysisInvalidatedFunc
void(StringRef, Any, const PreservedAnalyses &) AfterPassFunc
void registerAfterPassCallback(CallableT C, bool ToFront=false)
This class provides instrumentation entry points for the Pass Manager, doing calls to callbacks regis...
void runAfterPassInvalidated(const PassT &Pass, const PreservedAnalyses &PA) const
AfterPassInvalidated instrumentation point - takes Pass instance that has just been executed.
void pushBeforeNonSkippedPassCallback(CallableT C)
PassInstrumentation(PassInstrumentationCallbacks *CB=nullptr)
Callbacks object is not owned by PassInstrumentation, its life-time should at least match the life-ti...
bool invalidate(IRUnitT &, const class llvm::PreservedAnalyses &, ExtraArgsT...)
Handle invalidation from the pass manager when PassInstrumentation is used as the result of PassInstr...
void runBeforeAnalysis(const PassT &Analysis, const IRUnitT &IR) const
BeforeAnalysis instrumentation point - takes Analysis instance to be executed and constant reference ...
void runAnalysisInvalidated(const PassT &Analysis, const IRUnitT &IR) const
AnalysisInvalidated instrumentation point - takes Analysis instance that has just been invalidated an...
void runAnalysesCleared(StringRef Name) const
AnalysesCleared instrumentation point - takes name of IR that analyses operated on.
void popBeforeNonSkippedPassCallback()
void runAfterPass(const PassT &Pass, const IRUnitT &IR, const PreservedAnalyses &PA) const
AfterPass instrumentation point - takes Pass instance that has just been executed and constant refere...
void runAfterAnalysis(const PassT &Analysis, const IRUnitT &IR) const
AfterAnalysis instrumentation point - takes Analysis instance that has just been executed and constan...
bool runBeforePass(const PassT &Pass, const IRUnitT &IR) const
BeforePass instrumentation point - takes Pass instance to be executed and constant reference to IR it...
Pass interface - Implemented by all 'passes'.
A set of analyses that are preserved following a run of a transformation pass.
reference emplace_back(ArgTypes &&... Args)
iterator insert(iterator I, T &&Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
StringRef - Represent a constant reference to a string, i.e.
@ C
The default llvm calling convention, compatible with C.
This is an optimization pass for GlobalISel generic memory operations.
bool isSpecialPass(StringRef PassID, const std::vector< StringRef > &Specials)