/* Communication between GCC and libgomp.
- Copyright (C) 2014-2022 Free Software Foundation, Inc.
+ Copyright (C) 2014-2023 Free Software Foundation, Inc.
Contributed by Mentor Embedded.
#define GOMP_MAP_FLAG_SPECIAL_2 (1 << 4)
#define GOMP_MAP_FLAG_SPECIAL_3 (1 << 5)
#define GOMP_MAP_FLAG_SPECIAL_4 (1 << 6)
+#define GOMP_MAP_FLAG_SPECIAL_5 (1 << 7)
#define GOMP_MAP_FLAG_SPECIAL (GOMP_MAP_FLAG_SPECIAL_1 \
| GOMP_MAP_FLAG_SPECIAL_0)
#define GOMP_MAP_DEEP_COPY (GOMP_MAP_FLAG_SPECIAL_4 \
| GOMP_MAP_FLAG_SPECIAL_1 \
| GOMP_MAP_FLAG_SPECIAL_2 \
| GOMP_MAP_FLAG_SPECIAL_3 \
- | GOMP_MAP_FLAG_SPECIAL_4)
+ | GOMP_MAP_FLAG_SPECIAL_4 \
+ | GOMP_MAP_FLAG_SPECIAL_5)
/* Flag to force a specific behavior (or else, trigger a run-time error). */
-#define GOMP_MAP_FLAG_FORCE (1 << 7)
+#define GOMP_MAP_FLAG_FORCE (GOMP_MAP_FLAG_SPECIAL_5)
+#define GOMP_MAP_FLAG_PRESENT (GOMP_MAP_FLAG_SPECIAL_5 \
+ | GOMP_MAP_FLAG_SPECIAL_0)
+#define GOMP_MAP_FLAG_ALWAYS_PRESENT (GOMP_MAP_FLAG_SPECIAL_2 \
+ | GOMP_MAP_FLAG_PRESENT)
enum gomp_map_kind
{
device. */
GOMP_MAP_ALWAYS_TOFROM = (GOMP_MAP_FLAG_SPECIAL_2
| GOMP_MAP_TOFROM),
+ /* Must already be present, unconditionally copy to device. */
+ GOMP_MAP_ALWAYS_PRESENT_TO = (GOMP_MAP_FLAG_ALWAYS_PRESENT
+ | GOMP_MAP_TO),
+ /* Must already be present, unconditionally copy from device. */
+ GOMP_MAP_ALWAYS_PRESENT_FROM = (GOMP_MAP_FLAG_ALWAYS_PRESENT
+ | GOMP_MAP_FROM),
+ /* Must already be present, unconditionally copy to and from device. */
+ GOMP_MAP_ALWAYS_PRESENT_TOFROM = (GOMP_MAP_FLAG_ALWAYS_PRESENT
+ | GOMP_MAP_TOFROM),
/* Map a sparse struct; the address is the base of the structure, alignment
it's required alignment, and size is the number of adjacent entries
that belong to the struct. The adjacent entries should be sorted by
/* An attach or detach operation. Rewritten to the appropriate type during
gimplification, depending on directive (i.e. "enter data" or
parallel/kernels region vs. "exit data"). */
- GOMP_MAP_ATTACH_DETACH = (GOMP_MAP_LAST | 3)
+ GOMP_MAP_ATTACH_DETACH = (GOMP_MAP_LAST | 3),
+ /* Must already be present - all of following map to GOMP_MAP_FORCE_PRESENT
+ as no data transfer is needed. */
+ GOMP_MAP_PRESENT_ALLOC = (GOMP_MAP_LAST | 4),
+ GOMP_MAP_PRESENT_TO = (GOMP_MAP_LAST | 5),
+ GOMP_MAP_PRESENT_FROM = (GOMP_MAP_LAST | 6),
+ GOMP_MAP_PRESENT_TOFROM = (GOMP_MAP_LAST | 7)
};
#define GOMP_MAP_COPY_TO_P(X) \
- (!((X) & GOMP_MAP_FLAG_SPECIAL) \
+ ((!((X) & GOMP_MAP_FLAG_SPECIAL) || GOMP_MAP_PRESENT_P (X)) \
&& ((X) & GOMP_MAP_FLAG_TO))
#define GOMP_MAP_COPY_FROM_P(X) \
- (!((X) & GOMP_MAP_FLAG_SPECIAL) \
+ ((!((X) & GOMP_MAP_FLAG_SPECIAL) || GOMP_MAP_PRESENT_P (X)) \
&& ((X) & GOMP_MAP_FLAG_FROM))
#define GOMP_MAP_ALWAYS_POINTER_P(X) \
|| (X) == GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION)
#define GOMP_MAP_ALWAYS_TO_P(X) \
- (((X) == GOMP_MAP_ALWAYS_TO) || ((X) == GOMP_MAP_ALWAYS_TOFROM))
+ (((X) == GOMP_MAP_ALWAYS_TO) || ((X) == GOMP_MAP_ALWAYS_TOFROM) \
+ || ((X) == GOMP_MAP_ALWAYS_PRESENT_TO) \
+ || ((X) == GOMP_MAP_ALWAYS_PRESENT_TOFROM))
#define GOMP_MAP_ALWAYS_FROM_P(X) \
- (((X) == GOMP_MAP_ALWAYS_FROM) || ((X) == GOMP_MAP_ALWAYS_TOFROM))
+ (((X) == GOMP_MAP_ALWAYS_FROM) || ((X) == GOMP_MAP_ALWAYS_TOFROM) \
+ || ((X) == GOMP_MAP_ALWAYS_PRESENT_FROM) \
+ || ((X) == GOMP_MAP_ALWAYS_PRESENT_TOFROM))
#define GOMP_MAP_ALWAYS_P(X) \
- (GOMP_MAP_ALWAYS_TO_P (X) || ((X) == GOMP_MAP_ALWAYS_FROM))
+ (GOMP_MAP_ALWAYS_TO_P (X) || GOMP_MAP_ALWAYS_FROM_P (X))
#define GOMP_MAP_IMPLICIT_P(X) \
(((X) & GOMP_MAP_FLAG_SPECIAL_BITS) == GOMP_MAP_IMPLICIT)
+#define GOMP_MAP_FORCE_P(X) \
+ (((X) & GOMP_MAP_FLAG_SPECIAL_BITS) == GOMP_MAP_FLAG_FORCE)
+
+#define GOMP_MAP_PRESENT_P(X) \
+ (((X) & GOMP_MAP_FLAG_PRESENT) == GOMP_MAP_FLAG_PRESENT \
+ || (X) == GOMP_MAP_FORCE_PRESENT)
+
/* Asynchronous behavior. Keep in sync with
libgomp/{openacc.h,openacc.f90,openacc_lib.h}:acc_async_t. */
/* #define GOMP_DEVICE_HOST_NONSHM 3 removed. */
#define GOMP_DEVICE_NOT_HOST 4
#define GOMP_DEVICE_NVIDIA_PTX 5
-#define GOMP_DEVICE_INTEL_MIC 6
+/* #define GOMP_DEVICE_INTEL_MIC 6 removed. */
/* #define GOMP_DEVICE_HSA 7 removed. */
#define GOMP_DEVICE_GCN 8
to the plugin interface defined in libgomp/libgomp.h. */
#define GOMP_VERSION 2
#define GOMP_VERSION_NVIDIA_PTX 1
-#define GOMP_VERSION_INTEL_MIC 0
-#define GOMP_VERSION_GCN 2
+#define GOMP_VERSION_GCN 3
#define GOMP_VERSION_PACK(LIB, DEV) (((LIB) << 16) | (DEV))
#define GOMP_VERSION_LIB(PACK) (((PACK) >> 16) & 0xffff)