Skip to content

Commit 4d55835

Browse files
oscardssmithvchuravy
authored andcommitted
Allow external consumers to register custom C++ passes
1 parent f929743 commit 4d55835

File tree

9 files changed

+20
-19
lines changed

9 files changed

+20
-19
lines changed

deps/LLVMExtra/include/LLVMExtra.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ LLVMContextRef LLVMGetBuilderContext(LLVMBuilderRef Builder);
231231
typedef struct LLVMOpaquePassBuilderExtensions *LLVMPassBuilderExtensionsRef;
232232
LLVMPassBuilderExtensionsRef LLVMCreatePassBuilderExtensions(void);
233233
void LLVMDisposePassBuilderExtensions(LLVMPassBuilderExtensionsRef Extensions);
234-
void LLVMPassBuilderExtensionsSetRegistrationCallback(LLVMPassBuilderExtensionsRef Options,
234+
void LLVMPassBuilderExtensionsPushRegistrationCallbacks(LLVMPassBuilderExtensionsRef Options,
235235
void (*RegistrationCallback)(void *));
236236
typedef LLVMBool (*LLVMJuliaModulePassCallback)(LLVMModuleRef M, void *Thunk);
237237
typedef LLVMBool (*LLVMJuliaFunctionPassCallback)(LLVMValueRef F, void *Thunk);

deps/LLVMExtra/lib/NewPM.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class LLVMPassBuilderExtensions {
3333
public:
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)

lib/15/libLLVM_extra.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,8 +371,8 @@ function LLVMDisposePassBuilderExtensions(Extensions)
371371
ccall((:LLVMDisposePassBuilderExtensions, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef,), Extensions)
372372
end
373373

374-
function LLVMPassBuilderExtensionsSetRegistrationCallback(Options, RegistrationCallback)
375-
ccall((:LLVMPassBuilderExtensionsSetRegistrationCallback, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
374+
function LLVMPassBuilderExtensionsPushRegistrationCallbacks(Options, RegistrationCallback)
375+
ccall((:LLVMPassBuilderExtensionsPushRegistrationCallbacks, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
376376
end
377377

378378
# typedef LLVMBool ( * LLVMJuliaModulePassCallback ) ( LLVMModuleRef M , void * Thunk )

lib/16/libLLVM_extra.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,8 +371,8 @@ function LLVMDisposePassBuilderExtensions(Extensions)
371371
ccall((:LLVMDisposePassBuilderExtensions, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef,), Extensions)
372372
end
373373

374-
function LLVMPassBuilderExtensionsSetRegistrationCallback(Options, RegistrationCallback)
375-
ccall((:LLVMPassBuilderExtensionsSetRegistrationCallback, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
374+
function LLVMPassBuilderExtensionsPushRegistrationCallbacks(Options, RegistrationCallback)
375+
ccall((:LLVMPassBuilderExtensionsPushRegistrationCallbacks, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
376376
end
377377

378378
# typedef LLVMBool ( * LLVMJuliaModulePassCallback ) ( LLVMModuleRef M , void * Thunk )

lib/17/libLLVM_extra.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,8 @@ function LLVMDisposePassBuilderExtensions(Extensions)
331331
ccall((:LLVMDisposePassBuilderExtensions, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef,), Extensions)
332332
end
333333

334-
function LLVMPassBuilderExtensionsSetRegistrationCallback(Options, RegistrationCallback)
335-
ccall((:LLVMPassBuilderExtensionsSetRegistrationCallback, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
334+
function LLVMPassBuilderExtensionsPushRegistrationCallbacks(Options, RegistrationCallback)
335+
ccall((:LLVMPassBuilderExtensionsPushRegistrationCallbacks, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
336336
end
337337

338338
# typedef LLVMBool ( * LLVMJuliaModulePassCallback ) ( LLVMModuleRef M , void * Thunk )

lib/18/libLLVM_extra.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ function LLVMDisposePassBuilderExtensions(Extensions)
265265
ccall((:LLVMDisposePassBuilderExtensions, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef,), Extensions)
266266
end
267267

268-
function LLVMPassBuilderExtensionsSetRegistrationCallback(Options, RegistrationCallback)
269-
ccall((:LLVMPassBuilderExtensionsSetRegistrationCallback, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
268+
function LLVMPassBuilderExtensionsPushRegistrationCallbacks(Options, RegistrationCallback)
269+
ccall((:LLVMPassBuilderExtensionsPushRegistrationCallbacks, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
270270
end
271271

272272
# typedef LLVMBool ( * LLVMJuliaModulePassCallback ) ( LLVMModuleRef M , void * Thunk )

lib/19/libLLVM_extra.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ function LLVMDisposePassBuilderExtensions(Extensions)
265265
ccall((:LLVMDisposePassBuilderExtensions, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef,), Extensions)
266266
end
267267

268-
function LLVMPassBuilderExtensionsSetRegistrationCallback(Options, RegistrationCallback)
269-
ccall((:LLVMPassBuilderExtensionsSetRegistrationCallback, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
268+
function LLVMPassBuilderExtensionsPushRegistrationCallbacks(Options, RegistrationCallback)
269+
ccall((:LLVMPassBuilderExtensionsPushRegistrationCallbacks, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
270270
end
271271

272272
# typedef LLVMBool ( * LLVMJuliaModulePassCallback ) ( LLVMModuleRef M , void * Thunk )

lib/20/libLLVM_extra.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,8 @@ function LLVMDisposePassBuilderExtensions(Extensions)
221221
ccall((:LLVMDisposePassBuilderExtensions, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef,), Extensions)
222222
end
223223

224-
function LLVMPassBuilderExtensionsSetRegistrationCallback(Options, RegistrationCallback)
225-
ccall((:LLVMPassBuilderExtensionsSetRegistrationCallback, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
224+
function LLVMPassBuilderExtensionsPushRegistrationCallbacks(Options, RegistrationCallback)
225+
ccall((:LLVMPassBuilderExtensionsPushRegistrationCallbacks, libLLVMExtra), Cvoid, (LLVMPassBuilderExtensionsRef, Ptr{Cvoid}), Options, RegistrationCallback)
226226
end
227227

228228
# typedef LLVMBool ( * LLVMJuliaModulePassCallback ) ( LLVMModuleRef M , void * Thunk )

src/newpm.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ function run!(pb::NewPMPassBuilder, target::Union{Module,Function}, tm::Union{No
276276

277277
# register Julia passes
278278
julia_callback = cglobal(:jl_register_passbuilder_callbacks)
279-
API.LLVMPassBuilderExtensionsSetRegistrationCallback(pb.exts, julia_callback)
279+
API.LLVMPassBuilderExtensionsPushRegistrationCallbacks(pb.exts, julia_callback)
280280

281281
# register AA pipeline
282282
if !isempty(aa_pipeline)

0 commit comments

Comments
 (0)