Skip to content

Commit ecca2c5

Browse files
Expose PassBuilder callback registration via C api (#50390)
1 parent 6336f68 commit ecca2c5

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

src/codegen-stubs.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ JL_DLLEXPORT void jl_add_optimization_passes_fallback(void *PM, int opt_level, i
112112
JL_DLLEXPORT void jl_build_newpm_pipeline_fallback(void *MPM, void *PB, int Speedup, int Size,
113113
int lower_intrinsics, int dump_native, int external_use, int llvm_only) UNAVAILABLE
114114

115+
JL_DLLEXPORT void jl_register_passbuilder_callbacks_fallback(void *PB) { }
116+
115117
JL_DLLEXPORT void LLVMExtraAddLowerSimdLoopPass_fallback(void *PM) UNAVAILABLE
116118

117119
JL_DLLEXPORT void LLVMExtraAddFinalLowerGCPass_fallback(void *PM) UNAVAILABLE

src/jl_exported_funcs.inc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,7 @@
559559
YY(jl_get_libllvm) \
560560
YY(jl_add_optimization_passes) \
561561
YY(jl_build_newpm_pipeline) \
562+
YY(jl_register_passbuilder_callbacks) \
562563
YY(LLVMExtraAddLowerSimdLoopPass) \
563564
YY(LLVMExtraAddFinalLowerGCPass) \
564565
YY(LLVMExtraAddPropagateJuliaAddrspaces) \

src/pipeline.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,7 @@ PIC.addClassToPassName(decltype(CREATE_PASS)::name(), NAME);
680680
return PIC;
681681
}
682682

683-
FunctionAnalysisManager createFAM(OptimizationLevel O, TargetIRAnalysis analysis, const Triple &triple) JL_NOTSAFEPOINT {
683+
FunctionAnalysisManager createFAM(OptimizationLevel O, TargetMachine &TM) JL_NOTSAFEPOINT {
684684

685685
FunctionAnalysisManager FAM;
686686
// Register the AA manager first so that our version is the one used.
@@ -691,12 +691,12 @@ PIC.addClassToPassName(decltype(CREATE_PASS)::name(), NAME);
691691
AA.registerFunctionAnalysis<ScopedNoAliasAA>();
692692
AA.registerFunctionAnalysis<TypeBasedAA>();
693693
}
694-
// TM->registerDefaultAliasAnalyses(AA);
694+
TM.registerDefaultAliasAnalyses(AA);
695695
return AA;
696696
});
697697
// Register our TargetLibraryInfoImpl.
698-
FAM.registerPass([&] JL_NOTSAFEPOINT { return llvm::TargetIRAnalysis(analysis); });
699-
FAM.registerPass([&] JL_NOTSAFEPOINT { return llvm::TargetLibraryAnalysis(llvm::TargetLibraryInfoImpl(triple)); });
698+
FAM.registerPass([&] JL_NOTSAFEPOINT { return llvm::TargetIRAnalysis(TM.getTargetIRAnalysis()); });
699+
FAM.registerPass([&] JL_NOTSAFEPOINT { return llvm::TargetLibraryAnalysis(llvm::TargetLibraryInfoImpl(TM.getTargetTriple())); });
700700
return FAM;
701701
}
702702

@@ -714,7 +714,7 @@ NewPM::NewPM(std::unique_ptr<TargetMachine> TM, OptimizationLevel O, Optimizatio
714714

715715
NewPM::~NewPM() = default;
716716

717-
AnalysisManagers::AnalysisManagers(TargetMachine &TM, PassBuilder &PB, OptimizationLevel O) : LAM(), FAM(createFAM(O, TM.getTargetIRAnalysis(), TM.getTargetTriple())), CGAM(), MAM() {
717+
AnalysisManagers::AnalysisManagers(TargetMachine &TM, PassBuilder &PB, OptimizationLevel O) : LAM(), FAM(createFAM(O, TM)), CGAM(), MAM() {
718718
PB.registerLoopAnalyses(LAM);
719719
PB.registerFunctionAnalyses(FAM);
720720
PB.registerCGSCCAnalyses(CGAM);
@@ -819,7 +819,7 @@ static llvm::Optional<std::pair<OptimizationLevel, OptimizationOptions>> parseJu
819819
// NOTE: Instead of exporting all the constructors in passes.h we could
820820
// forward the callbacks to the respective passes. LLVM seems to prefer this,
821821
// and when we add the full pass builder having them directly will be helpful.
822-
void registerCallbacks(PassBuilder &PB) JL_NOTSAFEPOINT {
822+
static void registerCallbacks(PassBuilder &PB) JL_NOTSAFEPOINT {
823823
auto PIC = PB.getPassInstrumentationCallbacks();
824824
if (PIC) {
825825
adjustPIC(*PIC);
@@ -899,6 +899,11 @@ void registerCallbacks(PassBuilder &PB) JL_NOTSAFEPOINT {
899899
});
900900
}
901901

902+
extern "C" JL_DLLEXPORT_CODEGEN
903+
void jl_register_passbuilder_callbacks_impl(void *PB) JL_NOTSAFEPOINT {
904+
registerCallbacks(*static_cast<PassBuilder*>(PB));
905+
}
906+
902907
extern "C" JL_DLLEXPORT_CODEGEN
903908
::llvm::PassPluginLibraryInfo llvmGetPassPluginInfo() JL_NOTSAFEPOINT {
904909
return {LLVM_PLUGIN_API_VERSION, "Julia", "1", registerCallbacks};

0 commit comments

Comments
 (0)