Skip to content

Commit 0a0dcc0

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

File tree

1 file changed

+48
-45
lines changed

1 file changed

+48
-45
lines changed

llvm-plugin/cpp/ffi.cc

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -143,110 +143,113 @@ 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, ThinOrFullLTOPhaseFFI)) -> void {
152+
#else
151153
OptimizationLevel)) -> void {
154+
#endif
152155
const auto Data = std::shared_ptr<const void>(DataPtr, Deleter);
153156

157+
#ifdef LLVM_HAS_THIN_OR_FULL_LTO_PHASE
154158
Builder.registerOptimizerLastEPCallback(
155159
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
156-
LlvmOptLevel Opt) {
160+
LlvmOptLevel Opt,
161+
llvm::ThinOrFullLTOPhase Phase) {
157162
const auto OptFFI = getFFIOptimizationLevel(Opt);
158-
Callback(Data.get(), PassManager, OptFFI);
163+
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
164+
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
159165
});
160-
}
161166
#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-
169167
Builder.registerOptimizerLastEPCallback(
170168
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
171-
LlvmOptLevel Opt,
172-
llvm::ThinOrFullLTOPhase Phase) {
169+
LlvmOptLevel Opt) {
173170
const auto OptFFI = getFFIOptimizationLevel(Opt);
174-
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
171+
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20)
172+
const auto PhaseFFI = ThinOrFullLTOPhaseFFI::kNone;
175173
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
174+
#else
175+
Callback(Data.get(), PassManager, OptFFI);
176+
#endif
176177
});
177-
}
178178
#endif
179+
}
179180

180181
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 15)
181-
#ifndef LLVM_HAS_THIN_OR_FULL_LTO_PHASE
182182
auto passBuilderAddOptimizerEarlyEPCallback(
183183
llvm::PassBuilder &Builder, const void *DataPtr,
184184
void (*Deleter)(const void *),
185185
void (*Callback)(const void *, llvm::ModulePassManager &,
186+
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20)
187+
OptimizationLevel, ThinOrFullLTOPhaseFFI)) -> void {
188+
#else
186189
OptimizationLevel)) -> void {
190+
#endif
187191
const auto Data = std::shared_ptr<const void>(DataPtr, Deleter);
188192

193+
#ifdef LLVM_HAS_THIN_OR_FULL_LTO_PHASE
189194
Builder.registerOptimizerEarlyEPCallback(
190195
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
191-
LlvmOptLevel Opt) {
196+
LlvmOptLevel Opt,
197+
llvm::ThinOrFullLTOPhase Phase) {
192198
const auto OptFFI = getFFIOptimizationLevel(Opt);
193-
Callback(Data.get(), PassManager, OptFFI);
199+
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
200+
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
194201
});
195-
}
196202
#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-
204203
Builder.registerOptimizerEarlyEPCallback(
205204
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
206-
LlvmOptLevel Opt,
207-
llvm::ThinOrFullLTOPhase Phase) {
205+
LlvmOptLevel Opt) {
208206
const auto OptFFI = getFFIOptimizationLevel(Opt);
209-
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
207+
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20)
208+
const auto PhaseFFI = ThinOrFullLTOPhaseFFI::kNone;
210209
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
210+
#else
211+
Callback(Data.get(), PassManager, OptFFI);
212+
#endif
211213
});
212-
}
213214
#endif
215+
}
214216
#endif
215217

216218
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 12)
217-
#ifndef LLVM_HAS_THIN_OR_FULL_LTO_PHASE
218219
auto passBuilderAddPipelineEarlySimplificationEPCallback(
219220
llvm::PassBuilder &Builder, const void *DataPtr,
220221
void (*Deleter)(const void *),
221222
void (*Callback)(const void *, llvm::ModulePassManager &,
223+
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20)
224+
OptimizationLevel, ThinOrFullLTOPhaseFFI)) -> void {
225+
#else
222226
OptimizationLevel)) -> void {
227+
#endif
223228
const auto Data = std::shared_ptr<const void>(DataPtr, Deleter);
224229

230+
#ifdef LLVM_HAS_THIN_OR_FULL_LTO_PHASE
225231
Builder.registerPipelineEarlySimplificationEPCallback(
226232
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
227-
LlvmOptLevel Opt) {
233+
LlvmOptLevel Opt,
234+
llvm::ThinOrFullLTOPhase Phase) {
228235
const auto OptFFI = getFFIOptimizationLevel(Opt);
229-
Callback(Data.get(), PassManager, OptFFI);
236+
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
237+
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
230238
});
231-
}
232239
#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-
240240
Builder.registerPipelineEarlySimplificationEPCallback(
241241
[Data = std::move(Data), Callback](llvm::ModulePassManager &PassManager,
242-
LlvmOptLevel Opt,
243-
llvm::ThinOrFullLTOPhase Phase) {
242+
LlvmOptLevel Opt) {
244243
const auto OptFFI = getFFIOptimizationLevel(Opt);
245-
const auto PhaseFFI = getFFIThinOrFullLTOPhase(Phase);
244+
#if defined(LLVM_VERSION_MAJOR) && (LLVM_VERSION_MAJOR >= 20)
245+
const auto PhaseFFI = ThinOrFullLTOPhaseFFI::kNone;
246246
Callback(Data.get(), PassManager, OptFFI, PhaseFFI);
247+
#else
248+
Callback(Data.get(), PassManager, OptFFI);
249+
#endif
247250
});
248-
}
249251
#endif
252+
}
250253
#endif
251254

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

0 commit comments

Comments
 (0)