static StringRef name() { return "No-op Analysis Invalidation Pass"; }
};
+/// \brief A utility pass that does nothing but preserves no analyses.
+///
+/// As a consequence fo not preserving any analyses, this pass will force all
+/// analysis passes to be re-run to produce fresh results if any are needed.
+struct InvalidateAllAnalysesPass {
+ /// \brief Run this pass over some unit of IR.
+ template <typename T>
+ PreservedAnalyses run(T &&Arg) {
+ return PreservedAnalyses::none();
+ }
+
+ static StringRef name() { return "InvalidateAllAnalysesPass"; }
+};
+
}
#endif
; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Invalidating function analysis: NoOpFunctionAnalysis
; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Running function analysis: NoOpFunctionAnalysis
+; RUN: opt -disable-output -disable-verify -debug-pass-manager -debug-cgscc-pass-manager \
+; RUN: -passes='require<no-op-module>,cgscc(require<no-op-cgscc>,function(require<no-op-function>,invalidate<all>,require<no-op-function>),require<no-op-cgscc>),require<no-op-module>' %s 2>&1 \
+; RUN: | FileCheck %s --check-prefix=CHECK-INVALIDATE-ALL
+; CHECK-INVALIDATE-ALL: Starting module pass manager run.
+; CHECK-INVALIDATE-ALL: Running module pass: No-op Analysis Requirement Pass
+; CHECK-INVALIDATE-ALL: Running module analysis: NoOpModuleAnalysis
+; CHECK-INVALIDATE-ALL: Starting CGSCC pass manager run.
+; CHECK-INVALIDATE-ALL: Running CGSCC pass: No-op Analysis Requirement Pass
+; CHECK-INVALIDATE-ALL: Running CGSCC analysis: NoOpCGSCCAnalysis
+; CHECK-INVALIDATE-ALL: Starting function pass manager run.
+; CHECK-INVALIDATE-ALL: Running function pass: No-op Analysis Requirement Pass
+; CHECK-INVALIDATE-ALL: Running function analysis: NoOpFunctionAnalysis
+; CHECK-INVALIDATE-ALL: Running function pass: InvalidateAllAnalysesPass
+; CHECK-INVALIDATE-ALL: Invalidating all non-preserved analyses for function
+; CHECK-INVALIDATE-ALL: Invalidating function analysis: NoOpFunctionAnalysis
+; CHECK-INVALIDATE-ALL: Running function pass: No-op Analysis Requirement Pass
+; CHECK-INVALIDATE-ALL: Running function analysis: NoOpFunctionAnalysis
+; CHECK-INVALIDATE-ALL: Finished function pass manager run.
+; CHECK-INVALIDATE-ALL: Invalidating all non-preserved analyses for function
+; CHECK-INVALIDATE-ALL: Invalidating function analysis: NoOpFunctionAnalysis
+; CHECK-INVALIDATE-ALL: Invalidating all non-preserved analyses for SCC
+; CHECK-INVALIDATE-ALL: Invalidating CGSCC analysis: NoOpCGSCCAnalysis
+; CHECK-INVALIDATE-ALL: Running CGSCC pass: No-op Analysis Requirement Pass
+; CHECK-INVALIDATE-ALL: Running CGSCC analysis: NoOpCGSCCAnalysis
+; CHECK-INVALIDATE-ALL: Finished CGSCC pass manager run.
+; CHECK-INVALIDATE-ALL: Invalidating all non-preserved analyses for SCC
+; CHECK-INVALIDATE-ALL: Invalidating CGSCC analysis: NoOpCGSCCAnalysis
+; CHECK-INVALIDATE-ALL: Invalidating all non-preserved analyses for module
+; CHECK-INVALIDATE-ALL: Invalidating module analysis: NoOpModuleAnalysis
+; CHECK-INVALIDATE-ALL: Running module pass: No-op Analysis Requirement Pass
+; CHECK-INVALIDATE-ALL: Running module analysis: NoOpModuleAnalysis
+; CHECK-INVALIDATE-ALL: Finished module pass manager run.
+
define void @foo() {
ret void
}
#ifndef MODULE_PASS
#define MODULE_PASS(NAME, CREATE_PASS)
#endif
+MODULE_PASS("invalidate<all>", InvalidateAllAnalysesPass())
MODULE_PASS("no-op-module", NoOpModulePass())
MODULE_PASS("print", PrintModulePass(dbgs()))
MODULE_PASS("print-cg", LazyCallGraphPrinterPass(dbgs()))
#ifndef CGSCC_PASS
#define CGSCC_PASS(NAME, CREATE_PASS)
#endif
+CGSCC_PASS("invalidate<all>", InvalidateAllAnalysesPass())
CGSCC_PASS("no-op-cgscc", NoOpCGSCCPass())
#undef CGSCC_PASS
#ifndef FUNCTION_PASS
#define FUNCTION_PASS(NAME, CREATE_PASS)
#endif
+FUNCTION_PASS("invalidate<all>", InvalidateAllAnalysesPass())
FUNCTION_PASS("no-op-function", NoOpFunctionPass())
FUNCTION_PASS("print", PrintFunctionPass(dbgs()))
FUNCTION_PASS("verify", VerifierPass())