]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - include/gomp-constants.h
Fix division by zero in loop splitting
[thirdparty/gcc.git] / include / gomp-constants.h
index e4dd8ef3e1d892edbc80168081e93bbec37a66f1..8d4e8e813031884c9cdf285050db55a24db0e9dc 100644 (file)
@@ -1,6 +1,6 @@
 /* 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.
 
@@ -42,6 +42,7 @@
 #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
   {
@@ -130,6 +136,15 @@ 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
@@ -182,15 +197,21 @@ enum gomp_map_kind
     /* 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) \
@@ -201,17 +222,28 @@ enum gomp_map_kind
    || (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.  */
@@ -229,8 +261,8 @@ enum gomp_map_kind
 /* #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_HSA                        7
+/* #define GOMP_DEVICE_INTEL_MIC       6 removed.  */
+/* #define GOMP_DEVICE_HSA             7 removed.  */
 #define GOMP_DEVICE_GCN                        8
 
 /* We have a compatibility issue.  OpenMP 5.2 introduced
@@ -282,10 +314,9 @@ enum gomp_map_kind
 /* Versions of libgomp and device-specific plugins.  GOMP_VERSION
    should be incremented whenever an ABI-incompatible change is introduced
    to the plugin interface defined in libgomp/libgomp.h.  */
-#define GOMP_VERSION   1
+#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)
@@ -341,6 +372,12 @@ enum gomp_map_kind
 #define GOMP_DEPEND_MUTEXINOUTSET      4
 #define GOMP_DEPEND_INOUTSET           5
 
+/* Flag values for OpenMP 'requires' directive features.  */
+#define GOMP_REQUIRES_UNIFIED_ADDRESS       0x10
+#define GOMP_REQUIRES_UNIFIED_SHARED_MEMORY 0x20
+#define GOMP_REQUIRES_REVERSE_OFFLOAD       0x80
+#define GOMP_REQUIRES_TARGET_USED           0x200
+
 /* HSA specific data structures.  */
 
 /* Identifiers of device-specific target arguments.  */