@@ -743,6 +743,90 @@ bool parseAnalysisUtilityPasses(
743743
744744 return false ;
745745}
746+
747+ // These are special since they are only for testing purposes.
748+
749+ // / No-op module pass which does nothing.
750+ struct NoOpModulePass : PassInfoMixin<NoOpModulePass> {
751+ PreservedAnalyses run (Module &M, ModuleAnalysisManager &) {
752+ return PreservedAnalyses::all ();
753+ }
754+ };
755+
756+ // / No-op module analysis.
757+ class NoOpModuleAnalysis : public AnalysisInfoMixin <NoOpModuleAnalysis> {
758+ friend AnalysisInfoMixin<NoOpModuleAnalysis>;
759+ static AnalysisKey Key;
760+
761+ public:
762+ struct Result {};
763+ Result run (Module &, ModuleAnalysisManager &) { return Result (); }
764+ };
765+
766+ // / No-op CGSCC pass which does nothing.
767+ struct NoOpCGSCCPass : PassInfoMixin<NoOpCGSCCPass> {
768+ PreservedAnalyses run (LazyCallGraph::SCC &C, CGSCCAnalysisManager &,
769+ LazyCallGraph &, CGSCCUpdateResult &UR) {
770+ return PreservedAnalyses::all ();
771+ }
772+ };
773+
774+ // / No-op CGSCC analysis.
775+ class NoOpCGSCCAnalysis : public AnalysisInfoMixin <NoOpCGSCCAnalysis> {
776+ friend AnalysisInfoMixin<NoOpCGSCCAnalysis>;
777+ static AnalysisKey Key;
778+
779+ public:
780+ struct Result {};
781+ Result run (LazyCallGraph::SCC &, CGSCCAnalysisManager &, LazyCallGraph &G) {
782+ return Result ();
783+ }
784+ };
785+
786+ // / No-op function pass which does nothing.
787+ struct NoOpFunctionPass : PassInfoMixin<NoOpFunctionPass> {
788+ PreservedAnalyses run (Function &F, FunctionAnalysisManager &) {
789+ return PreservedAnalyses::all ();
790+ }
791+ };
792+
793+ // / No-op function analysis.
794+ class NoOpFunctionAnalysis : public AnalysisInfoMixin <NoOpFunctionAnalysis> {
795+ friend AnalysisInfoMixin<NoOpFunctionAnalysis>;
796+ static AnalysisKey Key;
797+
798+ public:
799+ struct Result {};
800+ Result run (Function &, FunctionAnalysisManager &) { return Result (); }
801+ };
802+
803+ // / No-op loop nest pass which does nothing.
804+ struct NoOpLoopNestPass : PassInfoMixin<NoOpLoopNestPass> {
805+ PreservedAnalyses run (LoopNest &L, LoopAnalysisManager &,
806+ LoopStandardAnalysisResults &, LPMUpdater &) {
807+ return PreservedAnalyses::all ();
808+ }
809+ };
810+
811+ // / No-op loop pass which does nothing.
812+ struct NoOpLoopPass : PassInfoMixin<NoOpLoopPass> {
813+ PreservedAnalyses run (Loop &L, LoopAnalysisManager &,
814+ LoopStandardAnalysisResults &, LPMUpdater &) {
815+ return PreservedAnalyses::all ();
816+ }
817+ };
818+
819+ // / No-op loop analysis.
820+ class NoOpLoopAnalysis : public AnalysisInfoMixin <NoOpLoopAnalysis> {
821+ friend AnalysisInfoMixin<NoOpLoopAnalysis>;
822+ static AnalysisKey Key;
823+
824+ public:
825+ struct Result {};
826+ Result run (Loop &, LoopAnalysisManager &, LoopStandardAnalysisResults &) {
827+ return Result ();
828+ }
829+ };
746830}
747831
748832#endif
0 commit comments