Add tests for print from offload target.
[gcc.git] / libgomp / libgomp-plugin.h
index 107117bf8a696f32609550e22591b7bc817a5e4d..037558c43f5641dbf7492b8c53afe711e8c9ea95 100644 (file)
@@ -1,4 +1,6 @@
-/* Copyright (C) 2014-2017 Free Software Foundation, Inc.
+/* The libgomp plugin API.
+
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
 
    Contributed by Mentor Embedded.
 
    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
-/* An interface to various libgomp-internal functions for use by plugins.  */
-
 #ifndef LIBGOMP_PLUGIN_H
 #define LIBGOMP_PLUGIN_H 1
 
+#include <stdbool.h>
 #include <stddef.h>
 #include <stdint.h>
 
@@ -49,9 +50,24 @@ enum offload_target_type
   /* OFFLOAD_TARGET_TYPE_HOST_NONSHM = 3 removed.  */
   OFFLOAD_TARGET_TYPE_NVIDIA_PTX = 5,
   OFFLOAD_TARGET_TYPE_INTEL_MIC = 6,
-  OFFLOAD_TARGET_TYPE_HSA = 7
+  OFFLOAD_TARGET_TYPE_HSA = 7,
+  OFFLOAD_TARGET_TYPE_GCN = 8
+};
+
+/* Opaque type to represent plugin-dependent implementation of an
+   OpenACC asynchronous queue.  */
+struct goacc_asyncqueue;
+
+/* Used to keep a list of active asynchronous queues.  */
+struct goacc_asyncqueue_list
+{
+  struct goacc_asyncqueue *aq;
+  struct goacc_asyncqueue_list *next;
 };
 
+typedef struct goacc_asyncqueue *goacc_aq;
+typedef struct goacc_asyncqueue_list *goacc_aq_list;
+
 /* Auxiliary struct, used for transferring pairs of addresses from plugin
    to libgomp.  */
 struct addr_pair
@@ -73,6 +89,51 @@ extern void GOMP_PLUGIN_error (const char *, ...)
 extern void GOMP_PLUGIN_fatal (const char *, ...)
        __attribute__ ((noreturn, format (printf, 1, 2)));
 
+/* Prototypes for functions implemented by libgomp plugins.  */
+extern const char *GOMP_OFFLOAD_get_name (void);
+extern unsigned int GOMP_OFFLOAD_get_caps (void);
+extern int GOMP_OFFLOAD_get_type (void);
+extern int GOMP_OFFLOAD_get_num_devices (void);
+extern bool GOMP_OFFLOAD_init_device (int);
+extern bool GOMP_OFFLOAD_fini_device (int);
+extern unsigned GOMP_OFFLOAD_version (void);
+extern int GOMP_OFFLOAD_load_image (int, unsigned, const void *,
+                                   struct addr_pair **);
+extern bool GOMP_OFFLOAD_unload_image (int, unsigned, const void *);
+extern void *GOMP_OFFLOAD_alloc (int, size_t);
+extern bool GOMP_OFFLOAD_free (int, void *);
+extern bool GOMP_OFFLOAD_dev2host (int, void *, const void *, size_t);
+extern bool GOMP_OFFLOAD_host2dev (int, void *, const void *, size_t);
+extern bool GOMP_OFFLOAD_dev2dev (int, void *, const void *, size_t);
+extern bool GOMP_OFFLOAD_can_run (void *);
+extern void GOMP_OFFLOAD_run (int, void *, void *, void **);
+extern void GOMP_OFFLOAD_async_run (int, void *, void *, void **, void *);
+
+extern void GOMP_OFFLOAD_openacc_exec (void (*) (void *), size_t, void **,
+                                      void **, unsigned *, void *);
+extern void *GOMP_OFFLOAD_openacc_create_thread_data (int);
+extern void GOMP_OFFLOAD_openacc_destroy_thread_data (void *);
+extern struct goacc_asyncqueue *GOMP_OFFLOAD_openacc_async_construct (int);
+extern bool GOMP_OFFLOAD_openacc_async_destruct (struct goacc_asyncqueue *);
+extern int GOMP_OFFLOAD_openacc_async_test (struct goacc_asyncqueue *);
+extern bool GOMP_OFFLOAD_openacc_async_synchronize (struct goacc_asyncqueue *);
+extern bool GOMP_OFFLOAD_openacc_async_serialize (struct goacc_asyncqueue *,
+                                                 struct goacc_asyncqueue *);
+extern void GOMP_OFFLOAD_openacc_async_queue_callback (struct goacc_asyncqueue *,
+                                                      void (*)(void *), void *);
+extern void GOMP_OFFLOAD_openacc_async_exec (void (*) (void *), size_t, void **,
+                                            void **, unsigned *, void *,
+                                            struct goacc_asyncqueue *);
+extern bool GOMP_OFFLOAD_openacc_async_dev2host (int, void *, const void *, size_t,
+                                                struct goacc_asyncqueue *);
+extern bool GOMP_OFFLOAD_openacc_async_host2dev (int, void *, const void *, size_t,
+                                                struct goacc_asyncqueue *);
+extern void *GOMP_OFFLOAD_openacc_cuda_get_current_device (void);
+extern void *GOMP_OFFLOAD_openacc_cuda_get_current_context (void);
+extern void *GOMP_OFFLOAD_openacc_cuda_get_stream (struct goacc_asyncqueue *);
+extern int GOMP_OFFLOAD_openacc_cuda_set_stream (struct goacc_asyncqueue *,
+                                                void *);
+
 #ifdef __cplusplus
 }
 #endif