Skip to content

Commit cebd0a9

Browse files
committed
Initial stage of callback invoking with PassBuilder
1 parent a070dbb commit cebd0a9

File tree

2 files changed

+63
-1
lines changed

2 files changed

+63
-1
lines changed

llvm/include/llvm/Passes/TargetPassRegistry.inc

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,42 @@ PB.registerPipelineParsingCallback([=](StringRef Name, LoopPassManager &PM,
133133
return false;
134134
});
135135

136+
PB.registerPipelineParsingCallback([=](StringRef Name, ModulePassManager &PM,
137+
ArrayRef<PassBuilder::PipelineElement>) {
138+
#define MODULE_CALLBACK(NAME, INVOKE) if (Name == NAME) { PB.INVOKE(PM, OptimizationLevel::O2); return true; }
139+
#include GET_PASS_REGISTRY
140+
#undef MODULE_CALLBACK
141+
#define MODULE_LTO_CALLBACK(NAME, INVOKE) if (Name == NAME) { PB.INVOKE(PM, OptimizationLevel::O2, ThinOrFullLTOPhase::None); return true; }
142+
#include GET_PASS_REGISTRY
143+
#undef MODULE_LTO_CALLBACK
144+
return false;
145+
});
146+
147+
PB.registerPipelineParsingCallback([=](StringRef Name, FunctionPassManager &PM,
148+
ArrayRef<PassBuilder::PipelineElement>) {
149+
#define FUNCTION_CALLBACK(NAME, INVOKE) if (Name == NAME) { PB.INVOKE(PM, OptimizationLevel::O2); return true; }
150+
#include GET_PASS_REGISTRY
151+
#undef FUNCTION_CALLBACK
152+
return false;
153+
});
154+
155+
156+
PB.registerPipelineParsingCallback([=](StringRef Name, CGSCCPassManager &CGPM,
157+
ArrayRef<PassBuilder::PipelineElement>) {
158+
#define CGSCC_CALLBACK(NAME, INVOKE) if (Name == NAME) { PB.INVOKE(CGPM, OptimizationLevel::O2); return true; }
159+
#include GET_PASS_REGISTRY
160+
#undef CGSCC_CALLBACK
161+
return false;
162+
});
163+
PB.registerPipelineParsingCallback([=](StringRef Name, LoopPassManager &PM,
164+
ArrayRef<PassBuilder::PipelineElement>) {
165+
#define LOOP_CALLBACK(NAME, INVOKE) if (Name == NAME) { PB.INVOKE(PM, OptimizationLevel::O2); return true; }
166+
#include GET_PASS_REGISTRY
167+
#undef LOOP_CALLBACK
168+
return false;
169+
});
170+
171+
136172
PB.registerPipelineParsingCallback([=](StringRef Name,
137173
MachineFunctionPassManager &PM,
138174
ArrayRef<PassBuilder::PipelineElement>) {

llvm/lib/Passes/PassRegistry.def

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,6 @@ FUNCTION_PASS_WITH_PARAMS(
725725
return ExpandFpPass(TM, OL);
726726
},
727727
parseExpandFpOptions, "opt-level=N")
728-
729728
#undef FUNCTION_PASS_WITH_PARAMS
730729

731730
#ifndef LOOPNEST_PASS
@@ -804,3 +803,30 @@ LOOP_PASS_WITH_PARAMS(
804803
},
805804
parseLoopUnswitchOptions, "nontrivial;no-nontrivial;trivial;no-trivial")
806805
#undef LOOP_PASS_WITH_PARAMS
806+
807+
#ifdef MODULE_CALLBACK
808+
MODULE_CALLBACK("PipelineStartCallbacks", invokePipelineStartEPCallbacks)
809+
#endif
810+
811+
// There are some full lto specific ones that are ignored here for now
812+
#ifdef MODULE_LTO_CALLBACK
813+
MODULE_LTO_CALLBACK("PipelineEarlySimplificationCallbacks", invokePipelineEarlySimplificationEPCallbacks)
814+
MODULE_LTO_CALLBACK("OptimizerEarlyCallbacks", invokeOptimizerEarlyEPCallbacks)
815+
MODULE_LTO_CALLBACK("OptimizerLastCallbacks", invokeOptimizerLastEPCallbacks)
816+
#endif
817+
818+
#ifdef FUNCTION_CALLBACK
819+
FUNCTION_CALLBACK("PeepholeCallbacks", invokePeepholeEPCallbacks)
820+
FUNCTION_CALLBACK("ScalarOptimizerLateCallbacks", invokeScalarOptimizerLateEPCallbacks)
821+
FUNCTION_CALLBACK("VectorizerStartCallbacks", invokeVectorizerStartEPCallbacks)
822+
#endif
823+
824+
#ifdef LOOP_CALLBACK
825+
LOOP_CALLBACK("LateLoopOptimizationsCallbacks", invokeLateLoopOptimizationsEPCallbacks)
826+
LOOP_CALLBACK("LoopOptimizerEndCallbacks", invokeLoopOptimizerEndEPCallbacks)
827+
#endif
828+
829+
#ifdef CGSCC_CALLBACK
830+
CGSCC_CALLBACK("CGSCCOptimizerLateCallbacks", invokeCGSCCOptimizerLateEPCallbacks)
831+
#endif
832+

0 commit comments

Comments
 (0)