-
Notifications
You must be signed in to change notification settings - Fork 15.5k
[Offload] Add Error Codes to PluginInterface #138258
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 5 commits
cc27f3a
73fc8f3
e9e2d55
c0b8b68
7fbda77
8066fb2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| //===- Auto-generated file, part of the LLVM/Offload project --------------===// | ||
| // | ||
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
| // See https://llvm.org/LICENSE.txt for license information. | ||
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| #ifndef OFFLOAD_ERRC | ||
| #error Please define the macro OFFLOAD_ERRCODE(Name, Desc, Value) | ||
| #endif | ||
|
|
||
| // Error codes are shared between PluginInterface and liboffload. | ||
| // To add new error codes, add them to offload/liboffload/API/Common.td and run | ||
| // the GenerateOffload target. | ||
|
|
||
| OFFLOAD_ERRC(SUCCESS, "Success", 0) | ||
| OFFLOAD_ERRC(UNKNOWN, "Unknown or internal error", 1) | ||
| OFFLOAD_ERRC(INVALID_NULL_POINTER, | ||
| "A pointer argument is null when it should not be", 2) | ||
| OFFLOAD_ERRC(INVALID_ARGUMENT, "An argument is invalid", 3) | ||
| OFFLOAD_ERRC(OUT_OF_RESOURCES, "Out of resources", 4) | ||
| OFFLOAD_ERRC(UNSUPPORTED, | ||
| "generic error code for unsupported features and enums", 5) | ||
| OFFLOAD_ERRC( | ||
| INVALID_SIZE, | ||
| "invalid size or dimensions (e.g., must not be zero, or is out of bounds)", | ||
| 6) | ||
| OFFLOAD_ERRC(INVALID_ENUMERATION, "enumerator argument is not valid", 7) | ||
| OFFLOAD_ERRC(INVALID_KERNEL_NAME, | ||
| "Named kernel not found in the program binary", 8) | ||
| OFFLOAD_ERRC(INVALID_VALUE, "Invalid Value", 9) | ||
| OFFLOAD_ERRC(INVALID_PLATFORM, "Invalid platform", 10) | ||
| OFFLOAD_ERRC(INVALID_DEVICE, "Invalid device", 11) | ||
| OFFLOAD_ERRC(INVALID_QUEUE, "Invalid queue", 12) | ||
| OFFLOAD_ERRC(INVALID_EVENT, "Invalid event", 13) | ||
| OFFLOAD_ERRC(INVALID_NULL_HANDLE, "handle argument is not valid", 14) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| //===- OffloadError.h - Definition of error class -------------------------===// | ||
| // | ||
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
| // See https://llvm.org/LICENSE.txt for license information. | ||
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| #ifndef OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_COMMON_OFFLOAD_ERROR_H | ||
| #define OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_COMMON_OFFLOAD_ERROR_H | ||
|
|
||
| #include "llvm/Support/Error.h" | ||
| #include "llvm/Support/ErrorHandling.h" | ||
|
|
||
| namespace error { | ||
|
|
||
| enum class ErrorCode { | ||
| #define OFFLOAD_ERRC(Name, _, Value) Name = Value, | ||
| #include "Shared/OffloadErrcodes.inc" | ||
| #undef OFFLOAD_ERRC | ||
| }; | ||
|
|
||
| } // namespace error | ||
|
|
||
| namespace std { | ||
| template <> struct is_error_code_enum<error::ErrorCode> : std::true_type {}; | ||
| } // namespace std | ||
|
|
||
| namespace error { | ||
|
|
||
| const std::error_category &OffloadErrCategory(); | ||
|
|
||
| inline std::error_code make_error_code(ErrorCode E) { | ||
| return std::error_code(static_cast<int>(E), OffloadErrCategory()); | ||
| } | ||
|
|
||
| /// Base class for errors originating in DIA SDK, e.g. COM calls | ||
| class OffloadError : public llvm::ErrorInfo<OffloadError, llvm::StringError> { | ||
| public: | ||
| using ErrorInfo<OffloadError, StringError>::ErrorInfo; | ||
|
|
||
| OffloadError(const llvm::Twine &S) : ErrorInfo(S, ErrorCode::UNKNOWN) {} | ||
|
|
||
| // The definition for this resides in the plugin static library | ||
| static char ID; | ||
| }; | ||
| } // namespace error | ||
|
|
||
| #endif |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,5 @@ | ||
| set(LIBOFFLOAD_ROOT "${CMAKE_CURRENT_SOURCE_DIR}") | ||
|
|
||
| add_subdirectory(API) | ||
|
|
||
| add_llvm_library( | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -17,6 +17,45 @@ | |
| extern "C" { | ||
| #endif | ||
|
|
||
| /////////////////////////////////////////////////////////////////////////////// | ||
| /// @brief Defines Return/Error codes | ||
| typedef enum ol_errc_t { | ||
| /// Success | ||
| OL_ERRC_SUCCESS = 0, | ||
| /// Unknown or internal error | ||
| OL_ERRC_UNKNOWN = 1, | ||
| /// A pointer argument is null when it should not be | ||
| OL_ERRC_INVALID_NULL_POINTER = 2, | ||
| /// An argument is invalid | ||
| OL_ERRC_INVALID_ARGUMENT = 3, | ||
| /// Out of resources | ||
| OL_ERRC_OUT_OF_RESOURCES = 4, | ||
| /// generic error code for unsupported features and enums | ||
| OL_ERRC_UNSUPPORTED = 5, | ||
| /// invalid size or dimensions (e.g., must not be zero, or is out of bounds) | ||
| OL_ERRC_INVALID_SIZE = 6, | ||
| /// enumerator argument is not valid | ||
| OL_ERRC_INVALID_ENUMERATION = 7, | ||
| /// Named kernel not found in the program binary | ||
| OL_ERRC_INVALID_KERNEL_NAME = 8, | ||
| /// Invalid Value | ||
| OL_ERRC_INVALID_VALUE = 9, | ||
| /// Invalid platform | ||
| OL_ERRC_INVALID_PLATFORM = 10, | ||
| /// Invalid device | ||
| OL_ERRC_INVALID_DEVICE = 11, | ||
| /// Invalid queue | ||
| OL_ERRC_INVALID_QUEUE = 12, | ||
| /// Invalid event | ||
| OL_ERRC_INVALID_EVENT = 13, | ||
| /// handle argument is not valid | ||
| OL_ERRC_INVALID_NULL_HANDLE = 14, | ||
| /// @cond | ||
| OL_ERRC_FORCE_UINT32 = 0x7fffffff | ||
| /// @endcond | ||
|
|
||
| } ol_errc_t; | ||
|
|
||
| /////////////////////////////////////////////////////////////////////////////// | ||
| #ifndef OL_VERSION_MAJOR | ||
| /// @brief Major version of the Offload API | ||
|
|
@@ -101,47 +140,6 @@ typedef struct ol_program_impl_t *ol_program_handle_t; | |
| /// @brief Handle of kernel object | ||
| typedef void *ol_kernel_handle_t; | ||
|
|
||
| /////////////////////////////////////////////////////////////////////////////// | ||
| /// @brief Defines Return/Error codes | ||
| typedef enum ol_errc_t { | ||
| /// Success | ||
| OL_ERRC_SUCCESS = 0, | ||
| /// Invalid Value | ||
| OL_ERRC_INVALID_VALUE = 1, | ||
| /// Invalid platform | ||
| OL_ERRC_INVALID_PLATFORM = 2, | ||
| /// Invalid device | ||
| OL_ERRC_INVALID_DEVICE = 3, | ||
| /// Invalid queue | ||
| OL_ERRC_INVALID_QUEUE = 4, | ||
| /// Invalid event | ||
| OL_ERRC_INVALID_EVENT = 5, | ||
| /// Named kernel not found in the program binary | ||
| OL_ERRC_INVALID_KERNEL_NAME = 6, | ||
| /// Out of resources | ||
| OL_ERRC_OUT_OF_RESOURCES = 7, | ||
| /// generic error code for unsupported features | ||
| OL_ERRC_UNSUPPORTED_FEATURE = 8, | ||
| /// generic error code for invalid arguments | ||
| OL_ERRC_INVALID_ARGUMENT = 9, | ||
| /// handle argument is not valid | ||
| OL_ERRC_INVALID_NULL_HANDLE = 10, | ||
| /// pointer argument may not be nullptr | ||
| OL_ERRC_INVALID_NULL_POINTER = 11, | ||
| /// invalid size or dimensions (e.g., must not be zero, or is out of bounds) | ||
| OL_ERRC_INVALID_SIZE = 12, | ||
| /// enumerator argument is not valid | ||
| OL_ERRC_INVALID_ENUMERATION = 13, | ||
| /// enumerator argument is not supported by the device | ||
| OL_ERRC_UNSUPPORTED_ENUMERATION = 14, | ||
| /// Unknown or internal error | ||
| OL_ERRC_UNKNOWN = 15, | ||
| /// @cond | ||
| OL_ERRC_FORCE_UINT32 = 0x7fffffff | ||
| /// @endcond | ||
|
|
||
| } ol_errc_t; | ||
|
|
||
| /////////////////////////////////////////////////////////////////////////////// | ||
| /// @brief Details of the error condition returned by an API call | ||
| typedef struct ol_error_struct_t { | ||
|
|
@@ -477,7 +475,8 @@ OL_APIEXPORT ol_result_t OL_APICALL olMemFree( | |
| /// @brief Enqueue a memcpy operation. | ||
| /// | ||
| /// @details | ||
| /// - For host pointers, use the device returned by olGetHostDevice | ||
| /// - For host pointers, use the host device belonging to the | ||
|
||
| /// OL_PLATFORM_BACKEND_HOST platform. | ||
| /// - If a queue is specified, at least one device must be a non-host device | ||
| /// - If a queue is not specified, the memcpy happens synchronously | ||
| /// | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.