diff --git a/llvm-plugin/cpp/ffi.cc b/llvm-plugin/cpp/ffi.cc index 05db1af..3aeb85a 100644 --- a/llvm-plugin/cpp/ffi.cc +++ b/llvm-plugin/cpp/ffi.cc @@ -143,110 +143,113 @@ auto passBuilderAddFullLinkTimeOptimizationEarlyEPCallback( } #endif -#ifndef LLVM_HAS_THIN_OR_FULL_LTO_PHASE auto passBuilderAddOptimizerLastEPCallback( llvm::PassBuilder &Builder, const void *DataPtr, void (*Deleter)(const void *), void (*Callback)(const void *, llvm::ModulePassManager &, +#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20) + OptimizationLevel, ThinOrFullLTOPhaseFFI)) -> void { +#else OptimizationLevel)) -> void { +#endif const auto Data = std::shared_ptr(DataPtr, Deleter); +#ifdef LLVM_HAS_THIN_OR_FULL_LTO_PHASE Builder.registerOptimizerLastEPCallback( [Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager, - LlvmOptLevel Opt) { + LlvmOptLevel Opt, + llvm::ThinOrFullLTOPhase Phase) { const auto OptFFI = getFFIOptimizationLevel(Opt); - Callback(Data.get(), PassManager, OptFFI); + const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase); + Callback(Data.get(), PassManager, OptFFI, PhaseFFI); }); -} #else -auto passBuilderAddOptimizerLastEPCallback( - llvm::PassBuilder &Builder, const void *DataPtr, - void (*Deleter)(const void *), - void (*Callback)(const void *, llvm::ModulePassManager &, OptimizationLevel, - ThinOrFullLTOPhaseFFI)) -> void { - const auto Data = std::shared_ptr(DataPtr, Deleter); - Builder.registerOptimizerLastEPCallback( [Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager, - LlvmOptLevel Opt, - llvm::ThinOrFullLTOPhase Phase) { + LlvmOptLevel Opt) { const auto OptFFI = getFFIOptimizationLevel(Opt); - const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase); +#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20) + const auto PhaseFFI = ThinOrFullLTOPhaseFFI::kNone; Callback(Data.get(), PassManager, OptFFI, PhaseFFI); +#else + Callback(Data.get(), PassManager, OptFFI); +#endif }); -} #endif +} #if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 15) -#ifndef LLVM_HAS_THIN_OR_FULL_LTO_PHASE auto passBuilderAddOptimizerEarlyEPCallback( llvm::PassBuilder &Builder, const void *DataPtr, void (*Deleter)(const void *), void (*Callback)(const void *, llvm::ModulePassManager &, +#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20) + OptimizationLevel, ThinOrFullLTOPhaseFFI)) -> void { +#else OptimizationLevel)) -> void { +#endif const auto Data = std::shared_ptr(DataPtr, Deleter); +#ifdef LLVM_HAS_THIN_OR_FULL_LTO_PHASE Builder.registerOptimizerEarlyEPCallback( [Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager, - LlvmOptLevel Opt) { + LlvmOptLevel Opt, + llvm::ThinOrFullLTOPhase Phase) { const auto OptFFI = getFFIOptimizationLevel(Opt); - Callback(Data.get(), PassManager, OptFFI); + const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase); + Callback(Data.get(), PassManager, OptFFI, PhaseFFI); }); -} #else -auto passBuilderAddOptimizerEarlyEPCallback( - llvm::PassBuilder &Builder, const void *DataPtr, - void (*Deleter)(const void *), - void (*Callback)(const void *, llvm::ModulePassManager &, OptimizationLevel, - ThinOrFullLTOPhaseFFI)) -> void { - const auto Data = std::shared_ptr(DataPtr, Deleter); - Builder.registerOptimizerEarlyEPCallback( [Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager, - LlvmOptLevel Opt, - llvm::ThinOrFullLTOPhase Phase) { + LlvmOptLevel Opt) { const auto OptFFI = getFFIOptimizationLevel(Opt); - const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase); +#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20) + const auto PhaseFFI = ThinOrFullLTOPhaseFFI::kNone; Callback(Data.get(), PassManager, OptFFI, PhaseFFI); +#else + Callback(Data.get(), PassManager, OptFFI); +#endif }); -} #endif +} #endif #if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 12) -#ifndef LLVM_HAS_THIN_OR_FULL_LTO_PHASE auto passBuilderAddPipelineEarlySimplificationEPCallback( llvm::PassBuilder &Builder, const void *DataPtr, void (*Deleter)(const void *), void (*Callback)(const void *, llvm::ModulePassManager &, +#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20) + OptimizationLevel, ThinOrFullLTOPhaseFFI)) -> void { +#else OptimizationLevel)) -> void { +#endif const auto Data = std::shared_ptr(DataPtr, Deleter); +#ifdef LLVM_HAS_THIN_OR_FULL_LTO_PHASE Builder.registerPipelineEarlySimplificationEPCallback( [Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager, - LlvmOptLevel Opt) { + LlvmOptLevel Opt, + llvm::ThinOrFullLTOPhase Phase) { const auto OptFFI = getFFIOptimizationLevel(Opt); - Callback(Data.get(), PassManager, OptFFI); + const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase); + Callback(Data.get(), PassManager, OptFFI, PhaseFFI); }); -} #else -auto passBuilderAddPipelineEarlySimplificationEPCallback( - llvm::PassBuilder &Builder, const void *DataPtr, - void (*Deleter)(const void *), - void (*Callback)(const void *, llvm::ModulePassManager &, OptimizationLevel, - ThinOrFullLTOPhaseFFI)) -> void { - const auto Data = std::shared_ptr(DataPtr, Deleter); - Builder.registerPipelineEarlySimplificationEPCallback( [Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager, - LlvmOptLevel Opt, - llvm::ThinOrFullLTOPhase Phase) { + LlvmOptLevel Opt) { const auto OptFFI = getFFIOptimizationLevel(Opt); - const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase); +#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20) + const auto PhaseFFI = ThinOrFullLTOPhaseFFI::kNone; Callback(Data.get(), PassManager, OptFFI, PhaseFFI); +#else + Callback(Data.get(), PassManager, OptFFI); +#endif }); -} #endif +} #endif #if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 12)