Skip to content

Commit 9cd428e

Browse files
committed
Revert "[Offload] Implement 'olIsValidBinary' in offload and clean up (llvm#159658)"
This reverts commit 51e3c3d.
1 parent 5a5e341 commit 9cd428e

File tree

8 files changed

+78
-134
lines changed

8 files changed

+78
-134
lines changed

offload/liboffload/API/Program.td

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,6 @@ def olCreateProgram : Function {
2424
let returns = [];
2525
}
2626

27-
def olIsValidBinary : Function {
28-
let desc = "Validate if the binary image pointed to by `ProgData` is compatible with the device.";
29-
let details = ["The provided `ProgData` will not be loaded onto the device"];
30-
let params = [
31-
Param<"ol_device_handle_t", "Device", "handle of the device", PARAM_IN>,
32-
Param<"const void*", "ProgData", "pointer to the program binary data", PARAM_IN>,
33-
Param<"size_t", "ProgDataSize", "size of the program binary in bytes", PARAM_IN>,
34-
Param<"bool*", "Valid", "output is true if the image is compatible", PARAM_OUT>
35-
];
36-
let returns = [];
37-
}
38-
3927
def olDestroyProgram : Function {
4028
let desc = "Destroy the program and free all underlying resources.";
4129
let details = [];

offload/liboffload/src/OffloadImpl.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,7 @@ Error olMemFill_impl(ol_queue_handle_t Queue, void *Ptr, size_t PatternSize,
887887

888888
Error olCreateProgram_impl(ol_device_handle_t Device, const void *ProgData,
889889
size_t ProgDataSize, ol_program_handle_t *Program) {
890+
// Make a copy of the program binary in case it is released by the caller.
890891
StringRef Buffer(reinterpret_cast<const char *>(ProgData), ProgDataSize);
891892
Expected<plugin::DeviceImageTy *> Res =
892893
Device->Device->loadBinary(Device->Device->Plugin, Buffer);
@@ -898,14 +899,6 @@ Error olCreateProgram_impl(ol_device_handle_t Device, const void *ProgData,
898899
return Error::success();
899900
}
900901

901-
Error olIsValidBinary_impl(ol_device_handle_t Device, const void *ProgData,
902-
size_t ProgDataSize, bool *IsValid) {
903-
StringRef Buffer(reinterpret_cast<const char *>(ProgData), ProgDataSize);
904-
*IsValid = Device->Device->Plugin.isDeviceCompatible(
905-
Device->Device->getDeviceId(), Buffer);
906-
return Error::success();
907-
}
908-
909902
Error olDestroyProgram_impl(ol_program_handle_t Program) {
910903
auto &Device = Program->Image->getDevice();
911904
if (auto Err = Device.unloadBinary(Program->Image))

offload/libomptarget/PluginManager.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,10 +243,7 @@ void PluginManager::registerLib(__tgt_bin_desc *Desc) {
243243
// Scan the RTLs that have associated images until we find one that supports
244244
// the current image.
245245
for (auto &R : plugins()) {
246-
StringRef Buffer(reinterpret_cast<const char *>(Img->ImageStart),
247-
utils::getPtrDiff(Img->ImageEnd, Img->ImageStart));
248-
249-
if (!R.isPluginCompatible(Buffer))
246+
if (!R.is_plugin_compatible(Img))
250247
continue;
251248

252249
if (!initializePlugin(R))
@@ -269,7 +266,7 @@ void PluginManager::registerLib(__tgt_bin_desc *Desc) {
269266
continue;
270267
}
271268

272-
if (!R.isDeviceCompatible(DeviceId, Buffer))
269+
if (!R.is_device_compatible(DeviceId, Img))
273270
continue;
274271

275272
DP("Image " DPxMOD " is compatible with RTL %s device %d!\n",

offload/plugins-nextgen/common/include/PluginInterface.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1719,10 +1719,10 @@ struct GenericPluginTy {
17191719

17201720
/// Returns non-zero if the \p Image is compatible with the plugin. This
17211721
/// function does not require the plugin to be initialized before use.
1722-
int32_t isPluginCompatible(StringRef Image);
1722+
int32_t is_plugin_compatible(__tgt_device_image *Image);
17231723

17241724
/// Returns non-zero if the \p Image is compatible with the device.
1725-
int32_t isDeviceCompatible(int32_t DeviceId, StringRef Image);
1725+
int32_t is_device_compatible(int32_t DeviceId, __tgt_device_image *Image);
17261726

17271727
/// Returns non-zero if the plugin device has been initialized.
17281728
int32_t is_device_initialized(int32_t DeviceId) const;

offload/plugins-nextgen/common/src/PluginInterface.cpp

Lines changed: 72 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2029,50 +2029,61 @@ Expected<bool> GenericPluginTy::checkBitcodeImage(StringRef Image) const {
20292029

20302030
int32_t GenericPluginTy::is_initialized() const { return Initialized; }
20312031

2032-
int32_t GenericPluginTy::isPluginCompatible(StringRef Image) {
2033-
auto HandleError = [&](Error Err) -> bool {
2034-
[[maybe_unused]] std::string ErrStr = toString(std::move(Err));
2035-
DP("Failure to check validity of image %p: %s", Image, ErrStr.c_str());
2036-
return false;
2037-
};
2038-
switch (identify_magic(Image)) {
2039-
case file_magic::elf:
2040-
case file_magic::elf_relocatable:
2041-
case file_magic::elf_executable:
2042-
case file_magic::elf_shared_object:
2043-
case file_magic::elf_core: {
2044-
auto MatchOrErr = checkELFImage(Image);
2045-
if (Error Err = MatchOrErr.takeError())
2046-
return HandleError(std::move(Err));
2047-
return *MatchOrErr;
2048-
}
2049-
case file_magic::bitcode: {
2050-
auto MatchOrErr = checkBitcodeImage(Image);
2051-
if (Error Err = MatchOrErr.takeError())
2052-
return HandleError(std::move(Err));
2053-
return *MatchOrErr;
2054-
}
2055-
default:
2056-
return false;
2057-
}
2032+
void GenericPluginTy::check_invalid_image(__tgt_device_image *InvalidImage) {
2033+
// Check if the image was rejected because of conflicting XNACK modes.
2034+
checkInvalidImage(InvalidImage);
20582035
}
20592036

2060-
int32_t GenericPluginTy::isDeviceCompatible(int32_t DeviceId, StringRef Image) {
2061-
auto HandleError = [&](Error Err) -> bool {
2062-
[[maybe_unused]] std::string ErrStr = toString(std::move(Err));
2063-
DP("Failure to check validity of image %p: %s", Image, ErrStr.c_str());
2064-
return false;
2065-
};
2066-
switch (identify_magic(Image)) {
2067-
case file_magic::elf:
2068-
case file_magic::elf_relocatable:
2069-
case file_magic::elf_executable:
2070-
case file_magic::elf_shared_object:
2071-
case file_magic::elf_core: {
2072-
auto MatchOrErr = checkELFImage(Image);
2073-
if (Error Err = MatchOrErr.takeError())
2074-
return HandleError(std::move(Err));
2075-
if (!*MatchOrErr)
2037+
int32_t GenericPluginTy::supports_empty_images() {
2038+
return supportsEmptyImages();
2039+
}
2040+
2041+
int32_t GenericPluginTy::is_plugin_compatible(__tgt_device_image *Image) {
2042+
auto T = logger::log<int32_t>(__func__, Image);
2043+
auto R = [&]() {
2044+
StringRef Buffer(reinterpret_cast<const char *>(Image->ImageStart),
2045+
utils::getPtrDiff(Image->ImageEnd, Image->ImageStart));
2046+
2047+
auto HandleError = [&](Error Err) -> bool {
2048+
[[maybe_unused]] std::string ErrStr = toString(std::move(Err));
2049+
DP("Failure to check validity of image %p: %s", Image, ErrStr.c_str());
2050+
return false;
2051+
};
2052+
switch (identify_magic(Buffer)) {
2053+
case file_magic::elf:
2054+
case file_magic::elf_relocatable:
2055+
case file_magic::elf_executable:
2056+
case file_magic::elf_shared_object:
2057+
case file_magic::elf_core: {
2058+
auto MatchOrErr = checkELFImage(Buffer);
2059+
if (Error Err = MatchOrErr.takeError())
2060+
return HandleError(std::move(Err));
2061+
return *MatchOrErr;
2062+
}
2063+
case file_magic::bitcode: {
2064+
auto MatchOrErr = checkBitcodeImage(Buffer);
2065+
if (Error Err = MatchOrErr.takeError())
2066+
return HandleError(std::move(Err));
2067+
return *MatchOrErr;
2068+
}
2069+
default:
2070+
return false;
2071+
}
2072+
}();
2073+
T.res(R);
2074+
return R;
2075+
}
2076+
2077+
int32_t GenericPluginTy::is_device_compatible(int32_t DeviceId,
2078+
__tgt_device_image *Image) {
2079+
auto T = logger::log<int32_t>(__func__, DeviceId, Image);
2080+
auto R = [&]() {
2081+
StringRef Buffer(reinterpret_cast<const char *>(Image->ImageStart),
2082+
utils::getPtrDiff(Image->ImageEnd, Image->ImageStart));
2083+
2084+
auto HandleError = [&](Error Err) -> bool {
2085+
[[maybe_unused]] std::string ErrStr = toString(std::move(Err));
2086+
DP("Failure to check validity of image %p: %s", Image, ErrStr.c_str());
20762087
return false;
20772088
};
20782089
switch (identify_magic(Buffer)) {
@@ -2087,21 +2098,25 @@ int32_t GenericPluginTy::isDeviceCompatible(int32_t DeviceId, StringRef Image) {
20872098
if (!*MatchOrErr)
20882099
return false;
20892100

2090-
// Perform plugin-dependent checks for the specific architecture if needed.
2091-
auto CompatibleOrErr = isELFCompatible(DeviceId, Image);
2092-
if (Error Err = CompatibleOrErr.takeError())
2093-
return HandleError(std::move(Err));
2094-
return *CompatibleOrErr;
2095-
}
2096-
case file_magic::bitcode: {
2097-
auto MatchOrErr = checkBitcodeImage(Image);
2098-
if (Error Err = MatchOrErr.takeError())
2099-
return HandleError(std::move(Err));
2100-
return *MatchOrErr;
2101-
}
2102-
default:
2103-
return false;
2104-
}
2101+
// Perform plugin-dependent checks for the specific architecture if
2102+
// needed.
2103+
auto CompatibleOrErr = isELFCompatible(DeviceId, Buffer);
2104+
if (Error Err = CompatibleOrErr.takeError())
2105+
return HandleError(std::move(Err));
2106+
return *CompatibleOrErr;
2107+
}
2108+
case file_magic::bitcode: {
2109+
auto MatchOrErr = checkBitcodeImage(Buffer);
2110+
if (Error Err = MatchOrErr.takeError())
2111+
return HandleError(std::move(Err));
2112+
return *MatchOrErr;
2113+
}
2114+
default:
2115+
return false;
2116+
}
2117+
}();
2118+
T.res(R);
2119+
return R;
21052120
}
21062121

21072122
int32_t GenericPluginTy::is_device_initialized(int32_t DeviceId) const {

offload/unittests/OffloadAPI/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ add_offload_unittest("platform"
3535

3636
add_offload_unittest("program"
3737
program/olCreateProgram.cpp
38-
program/olIsValidBinary.cpp
3938
program/olDestroyProgram.cpp)
4039

4140
add_offload_unittest("queue"

offload/unittests/OffloadAPI/program/olIsValidBinary.cpp

Lines changed: 0 additions & 49 deletions
This file was deleted.

revert_patches.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ breaks build rocPRIM
1717
---
1818
needs more offload patches
1919
[Offload] Port llvm-offload-device-info to new offload API (#155626)
20+
[Offload] Implement 'olIsValidBinary' in offload
2021
---

0 commit comments

Comments
 (0)