diff options
author | Ross Brunton <ross@codeplay.com> | 2025-06-24 16:27:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-24 16:27:12 +0100 |
commit | 4359e55838cd29d4aa344f15543f725da25e940f (patch) | |
tree | 050011070426347d3c0b53f21e97fbff0a505b28 | |
parent | b0ef9125347cbaea031273feb72ac0d6bc74ddee (diff) | |
download | llvm-4359e55838cd29d4aa344f15543f725da25e940f.zip llvm-4359e55838cd29d4aa344f15543f725da25e940f.tar.gz llvm-4359e55838cd29d4aa344f15543f725da25e940f.tar.bz2 |
[Offload] Properly report errors when jit compiling (#145498)
Previously, if a binary failed to load due to failures when jit
compiling, the function would return success with nullptr. Now it
returns a new plugin error, `COMPILE_FAILURE`.
-rw-r--r-- | offload/liboffload/API/Common.td | 1 | ||||
-rw-r--r-- | offload/liboffload/src/OffloadImpl.cpp | 1 | ||||
-rw-r--r-- | offload/plugins-nextgen/common/src/PluginInterface.cpp | 5 |
3 files changed, 5 insertions, 2 deletions
diff --git a/offload/liboffload/API/Common.td b/offload/liboffload/API/Common.td index cd8c3c6..79c3bd4 100644 --- a/offload/liboffload/API/Common.td +++ b/offload/liboffload/API/Common.td @@ -104,6 +104,7 @@ def ErrorCode : Enum { Etor<"UNIMPLEMENTED", "generic error code for features currently unimplemented by the device/backend">, Etor<"UNSUPPORTED", "generic error code for features unsupported by the device/backend">, Etor<"ASSEMBLE_FAILURE", "assembler failure while processing binary image">, + Etor<"COMPILE_FAILURE", "jit compile failure while processing binary image">, Etor<"LINK_FAILURE", "linker failure while processing binary image">, Etor<"BACKEND_FAILURE", "the plugin backend is in an invalid or unsupported state">, Etor<"UNINITIALIZED", "not initialized">, diff --git a/offload/liboffload/src/OffloadImpl.cpp b/offload/liboffload/src/OffloadImpl.cpp index eba8e91..da21015 100644 --- a/offload/liboffload/src/OffloadImpl.cpp +++ b/offload/liboffload/src/OffloadImpl.cpp @@ -471,6 +471,7 @@ Error olCreateProgram_impl(ol_device_handle_t Device, const void *ProgData, delete Prog; return Res.takeError(); } + assert(*Res != nullptr && "loadBinary returned nullptr"); Prog->Image = *Res; *Program = Prog; diff --git a/offload/plugins-nextgen/common/src/PluginInterface.cpp b/offload/plugins-nextgen/common/src/PluginInterface.cpp index 6fd3405..3e9a62f 100644 --- a/offload/plugins-nextgen/common/src/PluginInterface.cpp +++ b/offload/plugins-nextgen/common/src/PluginInterface.cpp @@ -909,8 +909,9 @@ GenericDeviceTy::loadBinary(GenericPluginTy &Plugin, if (!PostJITImageOrErr) { auto Err = PostJITImageOrErr.takeError(); REPORT("Failure to jit IR image %p on device %d: %s\n", InputTgtImage, - DeviceId, toString(std::move(Err)).data()); - return nullptr; + DeviceId, toStringWithoutConsuming(Err).data()); + return Plugin::error(ErrorCode::COMPILE_FAILURE, std::move(Err), + "failure to jit IR image"); } // Load the binary and allocate the image object. Use the next available id |