@@ -33,7 +33,7 @@ class LLVMPassBuilderExtensions {
3333public:
3434 // A callback to register additional pipeline parsing callbacks with the pass builder.
3535 // This is used to support Julia's passes.
36- void (*RegistrationCallback)( void *) ;
36+ SmallVector<std::function< void ( void *)>> RegistrationCallbacks ;
3737
3838 // A list of callbacks that each register a single custom module or function pass.
3939 // These callbacks are generated here in C++, and match against a pass name.
@@ -66,10 +66,10 @@ void LLVMDisposePassBuilderExtensions(LLVMPassBuilderExtensionsRef Extensions) {
6666
6767// Pass registration
6868
69- void LLVMPassBuilderExtensionsSetRegistrationCallback (
69+ void LLVMPassBuilderExtensionsPushRegistrationCallbacks (
7070 LLVMPassBuilderExtensionsRef Extensions, void (*RegistrationCallback)(void *)) {
7171 LLVMPassBuilderExtensions *PassExts = unwrap (Extensions);
72- PassExts->RegistrationCallback = RegistrationCallback ;
72+ PassExts->RegistrationCallbacks . push_back ( RegistrationCallback) ;
7373 return ;
7474}
7575
@@ -158,8 +158,9 @@ static LLVMErrorRef runJuliaPasses(Module *Mod, Function *Fun, const char *Passe
158158#else
159159 PassBuilder PB (Machine, PassOpts->PTO , None, &PIC);
160160#endif
161- if (PassExts->RegistrationCallback )
162- PassExts->RegistrationCallback (&PB);
161+
162+ for (auto &Callback : PassExts->RegistrationCallbacks )
163+ Callback (&PB);
163164 for (auto &Callback : PassExts->ModulePipelineParsingCallbacks )
164165 PB.registerPipelineParsingCallback (Callback);
165166 for (auto &Callback : PassExts->FunctionPipelineParsingCallbacks )
0 commit comments