Skip to content

Commit d018c9b

Browse files
committed
Refactor
1 parent a372665 commit d018c9b

1 file changed

Lines changed: 36 additions & 26 deletions

File tree

cpp/src/gandiva/engine.cc

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,41 @@ Status UseJITLinkIfEnabled(llvm::orc::LLJITBuilder& jit_builder) {
217217
}
218218
#endif
219219

220+
Result<std::unique_ptr<llvm::orc::LLJIT>> BuildJIT(
221+
llvm::orc::JITTargetMachineBuilder jtmb,
222+
std::shared_ptr<llvm::TargetMachine> target_machine,
223+
std::optional<std::reference_wrapper<GandivaObjectCache>> object_cache) {
224+
auto data_layout = target_machine->createDataLayout();
225+
226+
llvm::orc::LLJITBuilder jit_builder;
227+
228+
#ifdef JIT_LINK_SUPPORTED
229+
ARROW_RETURN_NOT_OK(UseJITLinkIfEnabled(jit_builder));
230+
#endif
231+
232+
jit_builder.setJITTargetMachineBuilder(std::move(jtmb));
233+
jit_builder.setDataLayout(std::make_optional(data_layout));
234+
235+
if (object_cache.has_value()) {
236+
jit_builder.setCompileFunctionCreator(
237+
[tm = std::move(target_machine),
238+
&object_cache](llvm::orc::JITTargetMachineBuilder JTMB)
239+
-> llvm::Expected<std::unique_ptr<llvm::orc::IRCompileLayer::IRCompiler>> {
240+
// after compilation, the object code will be stored into the given object
241+
// cache
242+
return std::make_unique<llvm::orc::SimpleCompiler>(*tm,
243+
&object_cache.value().get());
244+
});
245+
}
246+
247+
auto maybe_jit = jit_builder.create();
248+
ARROW_ASSIGN_OR_RAISE(auto jit,
249+
AsArrowResult(maybe_jit, "Could not create LLJIT instance: "));
250+
251+
AddProcessSymbol(*jit);
252+
return jit;
253+
}
254+
220255
arrow::Status VerifyAndLinkModule(
221256
llvm::Module& dest_module,
222257
llvm::Expected<std::unique_ptr<llvm::Module>> src_module_or_error) {
@@ -343,35 +378,10 @@ Result<std::unique_ptr<Engine>> Engine::Make(
343378

344379
auto shared_target_machine =
345380
std::shared_ptr<llvm::TargetMachine>(std::move(target_machine));
346-
auto data_layout = shared_target_machine->createDataLayout();
347381

348382
// Build the LLJIT instance
349-
llvm::orc::LLJITBuilder jit_builder;
350-
351-
#ifdef JIT_LINK_SUPPORTED
352-
ARROW_RETURN_NOT_OK(UseJITLinkIfEnabled(jit_builder));
353-
#endif
354-
355-
jit_builder.setJITTargetMachineBuilder(std::move(jtmb));
356-
jit_builder.setDataLayout(std::make_optional(data_layout));
357-
358-
if (object_cache.has_value()) {
359-
jit_builder.setCompileFunctionCreator(
360-
[tm = shared_target_machine,
361-
&object_cache](llvm::orc::JITTargetMachineBuilder JTMB)
362-
-> llvm::Expected<std::unique_ptr<llvm::orc::IRCompileLayer::IRCompiler>> {
363-
// after compilation, the object code will be stored into the given object
364-
// cache
365-
return std::make_unique<llvm::orc::SimpleCompiler>(*tm,
366-
&object_cache.value().get());
367-
});
368-
}
369-
370-
auto maybe_jit = jit_builder.create();
371383
ARROW_ASSIGN_OR_RAISE(auto jit,
372-
AsArrowResult(maybe_jit, "Could not create LLJIT instance: "));
373-
374-
AddProcessSymbol(*jit);
384+
BuildJIT(std::move(jtmb), shared_target_machine, object_cache));
375385

376386
std::unique_ptr<Engine> engine{
377387
new Engine(conf, std::move(jit), std::move(shared_target_machine), cached)};

0 commit comments

Comments
 (0)