[clang] [llvm] [OpenMP] Adds omp_target_is_accessible routine (PR #138294)
Shilei Tian via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 16 11:56:37 PDT 2025
================
@@ -196,6 +196,34 @@ EXTERN int omp_target_is_present(const void *Ptr, int DeviceNum) {
return Rc;
}
+/// Check whether a pointer is accessible from a device.
+/// Returns true when accessibility is guaranteed otherwise returns false.
+EXTERN int omp_target_is_accessible(const void *Ptr, size_t Size,
+ int DeviceNum) {
+ TIMESCOPE();
+ OMPT_IF_BUILT(ReturnAddressSetterRAII RA(__builtin_return_address(0)));
+ DP("Call to omp_target_is_accessible for device %d, address " DPxMOD
+ ", size %zu\n",
+ DeviceNum, DPxPTR(Ptr), Size);
+
+ if (!Ptr) {
+ DP("Call to omp_target_is_accessible with NULL ptr returning false\n");
+ return false;
+ }
+
+ if (DeviceNum == omp_get_initial_device() || DeviceNum == -1) {
+ DP("Call to omp_target_is_accessible on host, returning true\n");
+ return true;
+ }
+
+ // The device number must refer to a valid device
+ auto DeviceOrErr = PM->getDevice(DeviceNum);
+ if (!DeviceOrErr)
+ FATAL_MESSAGE(DeviceNum, "%s", toString(DeviceOrErr.takeError()).c_str());
----------------
shiltian wrote:
I think that is different. For a target region, yes, crash is okay, since the spec doesn't seem to say anything about how to deal with invalid input in clauses, based on my understanding (might be out of date though). APIs, on the other hand, is different. I think it'd not be a good idea someone calls some functions with invalid input and then their program crashes.
https://github.com/llvm/llvm-project/pull/138294
More information about the cfe-commits
mailing list