aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoss Brunton <ross@codeplay.com>2025-06-24 16:27:12 +0100
committerGitHub <noreply@github.com>2025-06-24 16:27:12 +0100
commit4359e55838cd29d4aa344f15543f725da25e940f (patch)
tree050011070426347d3c0b53f21e97fbff0a505b28
parentb0ef9125347cbaea031273feb72ac0d6bc74ddee (diff)
downloadllvm-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.td1
-rw-r--r--offload/liboffload/src/OffloadImpl.cpp1
-rw-r--r--offload/plugins-nextgen/common/src/PluginInterface.cpp5
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