Skip to content

Commit 8e560ee

Browse files
committed
fix: craft dummy ThinOrFatLTOPhase on llvm 20.0
1 parent 30dd9dc commit 8e560ee

File tree

1 file changed

+51
-45
lines changed

1 file changed

+51
-45
lines changed

llvm-plugin/cpp/ffi.cc

Lines changed: 51 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -143,110 +143,116 @@ auto passBuilderAddFullLinkTimeOptimizationEarlyEPCallback(
143143
}
144144
#endif
145145

146-
#ifndef LLVM_HAS_THIN_OR_FULL_LTO_PHASE
147146
auto passBuilderAddOptimizerLastEPCallback(
148147
llvm::PassBuilder &Builder, const void *DataPtr,
149148
void (*Deleter)(const void *),
150149
void (*Callback)(const void *, llvm::ModulePassManager &,
150+
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20)
151+
OptimizationLevel,
152+
ThinOrFullLTOPhaseFFI)) -> void {
153+
#else
151154
OptimizationLevel)) -> void {
155+
#endif
152156
const auto Data = std::shared_ptr<const void>(DataPtr, Deleter);
153157

158+
#ifdef LLVM_HAS_THIN_OR_FULL_LTO_PHASE
154159
Builder.registerOptimizerLastEPCallback(
155160
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
156-
LlvmOptLevel Opt) {
161+
LlvmOptLevel Opt,
162+
llvm::ThinOrFullLTOPhase Phase) {
157163
const auto OptFFI = getFFIOptimizationLevel(Opt);
158-
Callback(Data.get(), PassManager, OptFFI);
164+
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
165+
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
159166
});
160-
}
161167
#else
162-
auto passBuilderAddOptimizerLastEPCallback(
163-
llvm::PassBuilder &Builder, const void *DataPtr,
164-
void (*Deleter)(const void *),
165-
void (*Callback)(const void *, llvm::ModulePassManager &, OptimizationLevel,
166-
ThinOrFullLTOPhaseFFI)) -> void {
167-
const auto Data = std::shared_ptr<const void>(DataPtr, Deleter);
168-
169168
Builder.registerOptimizerLastEPCallback(
170169
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
171-
LlvmOptLevel Opt,
172-
llvm::ThinOrFullLTOPhase Phase) {
170+
LlvmOptLevel Opt) {
173171
const auto OptFFI = getFFIOptimizationLevel(Opt);
174-
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
172+
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20)
173+
const auto PhaseFFI = ThinOrFullLTOPhaseFFI::kNone;
175174
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
175+
#else
176+
Callback(Data.get(), PassManager, OptFFI);
177+
#endif
176178
});
177-
}
178179
#endif
180+
}
179181

180182
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 15)
181-
#ifndef LLVM_HAS_THIN_OR_FULL_LTO_PHASE
182183
auto passBuilderAddOptimizerEarlyEPCallback(
183184
llvm::PassBuilder &Builder, const void *DataPtr,
184185
void (*Deleter)(const void *),
185186
void (*Callback)(const void *, llvm::ModulePassManager &,
187+
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20)
188+
OptimizationLevel,
189+
ThinOrFullLTOPhaseFFI)) -> void {
190+
#else
186191
OptimizationLevel)) -> void {
192+
#endif
187193
const auto Data = std::shared_ptr<const void>(DataPtr, Deleter);
188194

195+
#ifdef LLVM_HAS_THIN_OR_FULL_LTO_PHASE
189196
Builder.registerOptimizerEarlyEPCallback(
190197
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
191-
LlvmOptLevel Opt) {
198+
LlvmOptLevel Opt,
199+
llvm::ThinOrFullLTOPhase Phase) {
192200
const auto OptFFI = getFFIOptimizationLevel(Opt);
193-
Callback(Data.get(), PassManager, OptFFI);
201+
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
202+
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
194203
});
195-
}
196204
#else
197-
auto passBuilderAddOptimizerEarlyEPCallback(
198-
llvm::PassBuilder &Builder, const void *DataPtr,
199-
void (*Deleter)(const void *),
200-
void (*Callback)(const void *, llvm::ModulePassManager &, OptimizationLevel,
201-
ThinOrFullLTOPhaseFFI)) -> void {
202-
const auto Data = std::shared_ptr<const void>(DataPtr, Deleter);
203-
204205
Builder.registerOptimizerEarlyEPCallback(
205206
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
206-
LlvmOptLevel Opt,
207-
llvm::ThinOrFullLTOPhase Phase) {
207+
LlvmOptLevel Opt) {
208208
const auto OptFFI = getFFIOptimizationLevel(Opt);
209-
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
209+
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20)
210+
const auto PhaseFFI = ThinOrFullLTOPhaseFFI::kNone;
210211
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
212+
#else
213+
Callback(Data.get(), PassManager, OptFFI);
214+
#endif
211215
});
212-
}
213216
#endif
217+
}
214218
#endif
215219

216220
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 12)
217-
#ifndef LLVM_HAS_THIN_OR_FULL_LTO_PHASE
218221
auto passBuilderAddPipelineEarlySimplificationEPCallback(
219222
llvm::PassBuilder &Builder, const void *DataPtr,
220223
void (*Deleter)(const void *),
221224
void (*Callback)(const void *, llvm::ModulePassManager &,
225+
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20)
226+
OptimizationLevel,
227+
ThinOrFullLTOPhaseFFI)) -> void {
228+
#else
222229
OptimizationLevel)) -> void {
230+
#endif
223231
const auto Data = std::shared_ptr<const void>(DataPtr, Deleter);
224232

233+
#ifdef LLVM_HAS_THIN_OR_FULL_LTO_PHASE
225234
Builder.registerPipelineEarlySimplificationEPCallback(
226235
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
227-
LlvmOptLevel Opt) {
236+
LlvmOptLevel Opt,
237+
llvm::ThinOrFullLTOPhase Phase) {
228238
const auto OptFFI = getFFIOptimizationLevel(Opt);
229-
Callback(Data.get(), PassManager, OptFFI);
239+
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
240+
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
230241
});
231-
}
232242
#else
233-
auto passBuilderAddPipelineEarlySimplificationEPCallback(
234-
llvm::PassBuilder &Builder, const void *DataPtr,
235-
void (*Deleter)(const void *),
236-
void (*Callback)(const void *, llvm::ModulePassManager &, OptimizationLevel,
237-
ThinOrFullLTOPhaseFFI)) -> void {
238-
const auto Data = std::shared_ptr<const void>(DataPtr, Deleter);
239-
240243
Builder.registerPipelineEarlySimplificationEPCallback(
241244
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
242-
LlvmOptLevel Opt,
243-
llvm::ThinOrFullLTOPhase Phase) {
245+
LlvmOptLevel Opt) {
244246
const auto OptFFI = getFFIOptimizationLevel(Opt);
245-
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
247+
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20)
248+
const auto PhaseFFI = ThinOrFullLTOPhaseFFI::kNone;
246249
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
250+
#else
251+
Callback(Data.get(), PassManager, OptFFI);
252+
#endif
247253
});
248-
}
249254
#endif
255+
}
250256
#endif
251257

252258
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 12)

0 commit comments

Comments
 (0)