diff --git a/openmp/libomptarget/include/omptarget.h b/openmp/libomptarget/include/omptarget.h --- a/openmp/libomptarget/include/omptarget.h +++ b/openmp/libomptarget/include/omptarget.h @@ -28,6 +28,18 @@ // Don't format out enums and structs. // clang-format off +/// return flags of __tgt_target_XXX public APIs +enum __tgt_target_return_t : int { + /// successful offload executed on a target device + OMP_TGT_SUCCESS = 0, + /// offload may not execute on the requested target device + /// this scenario can be caused by the device not available or unsupported + /// as described in the Execution Model in the specifcation + /// this status may not be used for target device execution failure + /// which should be handled internally in libomptarget + OMP_TGT_FAIL = ~0 +}; + /// Data attributes for each data reference used in an OpenMP target region. enum tgt_map_type { // No flags diff --git a/openmp/libomptarget/src/interface.cpp b/openmp/libomptarget/src/interface.cpp --- a/openmp/libomptarget/src/interface.cpp +++ b/openmp/libomptarget/src/interface.cpp @@ -284,7 +284,7 @@ DPxPTR(host_ptr), device_id); if (checkDeviceAndCtors(device_id, loc)) { DP("Not offloading to device %" PRId64 "\n", device_id); - return OFFLOAD_FAIL; + return OMP_TGT_FAIL; } if (getInfoLevel() & OMP_INFOTYPE_KERNEL_ARGS) @@ -307,7 +307,8 @@ if (rc == OFFLOAD_SUCCESS) rc = AsyncInfo.synchronize(); handleTargetOutcome(rc == OFFLOAD_SUCCESS, loc); - return rc; + assert(rc == OFFLOAD_SUCCESS && "__tgt_target_mapper unexpected failure!"); + return OMP_TGT_SUCCESS; } EXTERN int __tgt_target_nowait_mapper( @@ -357,7 +358,7 @@ DPxPTR(host_ptr), device_id); if (checkDeviceAndCtors(device_id, loc)) { DP("Not offloading to device %" PRId64 "\n", device_id); - return OFFLOAD_FAIL; + return OMP_TGT_FAIL; } if (getInfoLevel() & OMP_INFOTYPE_KERNEL_ARGS) @@ -380,7 +381,9 @@ if (rc == OFFLOAD_SUCCESS) rc = AsyncInfo.synchronize(); handleTargetOutcome(rc == OFFLOAD_SUCCESS, loc); - return rc; + assert(rc == OFFLOAD_SUCCESS && + "__tgt_target_teams_mapper unexpected failure!"); + return OMP_TGT_SUCCESS; } EXTERN int __tgt_target_teams_nowait_mapper(