Go to the documentation of this file.
49 #ifndef LLVM_IR_PASSINSTRUMENTATION_H
50 #define LLVM_IR_PASSINSTRUMENTATION_H
56 #include <type_traits>
61 class PreservedAnalyses;
95 template <
typename CallableT>
100 template <
typename CallableT>
105 template <
typename CallableT>
114 template <
typename CallableT>
119 template <
typename CallableT>
124 template <
typename CallableT>
129 template <
typename CallableT>
134 template <
typename CallableT>
150 ShouldRunOptionalPassCallbacks;
153 BeforeSkippedPassCallbacks;
156 BeforeNonSkippedPassCallbacks;
161 AfterPassInvalidatedCallbacks;
164 BeforeAnalysisCallbacks;
167 AfterAnalysisCallbacks;
170 AnalysisInvalidatedCallbacks;
173 AnalysesClearedCallbacks;
189 template <
typename PassT>
190 using has_required_t = decltype(std::declval<PassT &>().isRequired());
192 template <
typename PassT>
193 static std::enable_if_t<is_detected<has_required_t, PassT>::value,
bool>
194 isRequired(
const PassT &
Pass) {
195 return Pass.isRequired();
197 template <
typename PassT>
198 static std::enable_if_t<!is_detected<has_required_t, PassT>::value,
bool>
199 isRequired(
const PassT &
Pass) {
216 template <
typename IRUnitT,
typename PassT>
221 bool ShouldRun =
true;
222 if (!isRequired(
Pass)) {
223 for (
auto &
C : Callbacks->ShouldRunOptionalPassCallbacks)
228 for (
auto &
C : Callbacks->BeforeNonSkippedPassCallbacks)
231 for (
auto &
C : Callbacks->BeforeSkippedPassCallbacks)
241 template <
typename IRUnitT,
typename PassT>
245 for (
auto &
C : Callbacks->AfterPassCallbacks)
252 template <
typename IRUnitT,
typename PassT>
256 for (
auto &
C : Callbacks->AfterPassInvalidatedCallbacks)
262 template <
typename IRUnitT,
typename PassT>
265 for (
auto &
C : Callbacks->BeforeAnalysisCallbacks)
271 template <
typename IRUnitT,
typename PassT>
274 for (
auto &
C : Callbacks->AfterAnalysisCallbacks)
281 template <
typename IRUnitT,
typename PassT>
284 for (
auto &
C : Callbacks->AnalysisInvalidatedCallbacks)
292 for (
auto &
C : Callbacks->AnalysesClearedCallbacks)
301 template <
typename IRUnitT,
typename... ExtraArgsT>
307 template <
typename CallableT>
314 Callbacks->BeforeNonSkippedPassCallbacks.pop_back();
318 bool isSpecialPass(StringRef PassID,
const std::vector<StringRef> &Specials);
A set of analyses that are preserved following a run of a transformation pass.
void(StringRef, Any) BeforeNonSkippedPassFunc
void(StringRef, Any) BeforeAnalysisFunc
void(StringRef, const PreservedAnalyses &) AfterPassInvalidatedFunc
This is an optimization pass for GlobalISel generic memory operations.
PassInstrumentationCallbacks()=default
void registerBeforeNonSkippedPassCallback(CallableT C)
void(StringRef, Any) BeforeSkippedPassFunc
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
void runBeforeAnalysis(const PassT &Analysis, const IRUnitT &IR) const
BeforeAnalysis instrumentation point - takes Analysis instance to be executed and constant reference ...
void pushBeforeNonSkippedPassCallback(CallableT C)
void registerAnalysesClearedCallback(CallableT C)
StringRef getPassNameForClassName(StringRef ClassName)
Get the pass name for a given pass class name.
(vector float) vec_cmpeq(*A, *B) C
bool isSpecialPass(StringRef PassID, const std::vector< StringRef > &Specials)
bool invalidate(IRUnitT &, const class llvm::PreservedAnalyses &, ExtraArgsT...)
Handle invalidation from the pass manager when PassInstrumentation is used as the result of PassInstr...
Statically lint checks LLVM IR
void registerShouldRunOptionalPassCallback(CallableT C)
void registerBeforeAnalysisCallback(CallableT C)
void runAnalysisInvalidated(const PassT &Analysis, const IRUnitT &IR) const
AnalysisInvalidated instrumentation point - takes Analysis instance that has just been invalidated an...
void(StringRef, Any, const PreservedAnalyses &) AfterPassFunc
void(StringRef) AnalysesClearedFunc
void registerAnalysisInvalidatedCallback(CallableT C)
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...
PassInstrumentation(PassInstrumentationCallbacks *CB=nullptr)
Callbacks object is not owned by PassInstrumentation, its life-time should at least match the life-ti...
void(StringRef, Any) AfterAnalysisFunc
compiles ldr LCPI1_0 ldr ldr mov lsr tst moveq r1 ldr LCPI1_1 and r0 bx lr It would be better to do something like to fold the shift into the conditional move
void runAfterPassInvalidated(const PassT &Pass, const PreservedAnalyses &PA) const
AfterPassInvalidated instrumentation point - takes Pass instance that has just been executed.
bool(StringRef, Any) BeforePassFunc
This class provides instrumentation entry points for the Pass Manager, doing calls to callbacks regis...
void operator=(const PassInstrumentationCallbacks &)=delete
void runAfterAnalysis(const PassT &Analysis, const IRUnitT &IR) const
AfterAnalysis instrumentation point - takes Analysis instance that has just been executed and constan...
void addClassToPassName(StringRef ClassName, StringRef PassName)
Add a class name to pass name mapping for use by pass instrumentation.
void popBeforeNonSkippedPassCallback()
void(StringRef, Any) AnalysisInvalidatedFunc
void registerAfterAnalysisCallback(CallableT C)
StringRef - Represent a constant reference to a string, i.e.
void registerAfterPassInvalidatedCallback(CallableT C)
block Block Frequency Analysis
bool runBeforePass(const PassT &Pass, const IRUnitT &IR) const
BeforePass instrumentation point - takes Pass instance to be executed and constant reference to IR it...
void registerBeforeSkippedPassCallback(CallableT C)
void registerAfterPassCallback(CallableT C)
Pass interface - Implemented by all 'passes'.
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
void runAnalysesCleared(StringRef Name) const
AnalysesCleared instrumentation point - takes name of IR that analyses operated on.
static const char PassName[]
reference emplace_back(ArgTypes &&... Args)