Handling for pre-compiled IR libraries.
| 405 | |
| 406 | // Handling for pre-compiled IR libraries. |
| 407 | Status Engine::LoadPreCompiledIR() { |
| 408 | const auto bitcode = llvm::StringRef(reinterpret_cast<const char*>(kPrecompiledBitcode), |
| 409 | kPrecompiledBitcodeSize); |
| 410 | |
| 411 | /// Read from file into memory buffer. |
| 412 | llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> buffer_or_error = |
| 413 | llvm::MemoryBuffer::getMemBuffer(bitcode, "precompiled", false); |
| 414 | |
| 415 | ARROW_RETURN_IF(!buffer_or_error, |
| 416 | Status::CodeGenError("Could not load module from IR: ", |
| 417 | buffer_or_error.getError().message())); |
| 418 | |
| 419 | std::unique_ptr<llvm::MemoryBuffer> buffer = std::move(buffer_or_error.get()); |
| 420 | |
| 421 | /// Parse the IR module. |
| 422 | llvm::Expected<std::unique_ptr<llvm::Module>> module_or_error = |
| 423 | llvm::getOwningLazyBitcodeModule(std::move(buffer), *context()); |
| 424 | // NOTE: llvm::handleAllErrors() fails linking with RTTI-disabled LLVM builds |
| 425 | // (ARROW-5148) |
| 426 | ARROW_RETURN_NOT_OK(VerifyAndLinkModule(*module_, std::move(module_or_error))); |
| 427 | return Status::OK(); |
| 428 | } |
| 429 | |
| 430 | static llvm::MemoryBufferRef AsLLVMMemoryBuffer(const arrow::Buffer& arrow_buffer) { |
| 431 | const auto data = reinterpret_cast<const char*>(arrow_buffer.data()); |
nothing calls this directly
no test coverage detected