xref: /llvm-project/openmp/runtime/test/tasking/kmp_task_deps.h (revision f5e50b21da0cb543064b2d0b9304ce0b368cf2bb)
1*f5e50b21SJoachim Jenke #ifndef KMP_TASK_DEPS_H
2*f5e50b21SJoachim Jenke #define KMP_TASK_DEPS_H
3*f5e50b21SJoachim Jenke 
4*f5e50b21SJoachim Jenke #include <stddef.h> /* size_t */
5*f5e50b21SJoachim Jenke 
6*f5e50b21SJoachim Jenke // ---------------------------------------------------------------------------
7*f5e50b21SJoachim Jenke // internal data to emulate compiler codegen
8*f5e50b21SJoachim Jenke typedef struct DEP {
9*f5e50b21SJoachim Jenke   size_t addr;
10*f5e50b21SJoachim Jenke   size_t len;
11*f5e50b21SJoachim Jenke   unsigned char flags;
12*f5e50b21SJoachim Jenke } dep;
13*f5e50b21SJoachim Jenke 
14*f5e50b21SJoachim Jenke typedef struct task {
15*f5e50b21SJoachim Jenke   void **shareds;
16*f5e50b21SJoachim Jenke   void *entry;
17*f5e50b21SJoachim Jenke   int part_id;
18*f5e50b21SJoachim Jenke   void *destr_thunk;
19*f5e50b21SJoachim Jenke   int priority;
20*f5e50b21SJoachim Jenke   long long device_id;
21*f5e50b21SJoachim Jenke   int f_priv;
22*f5e50b21SJoachim Jenke } kmp_task_t;
23*f5e50b21SJoachim Jenke typedef int (*entry_t)(int, kmp_task_t *);
24*f5e50b21SJoachim Jenke typedef struct ID {
25*f5e50b21SJoachim Jenke   int reserved_1;
26*f5e50b21SJoachim Jenke   int flags;
27*f5e50b21SJoachim Jenke   int reserved_2;
28*f5e50b21SJoachim Jenke   int reserved_3;
29*f5e50b21SJoachim Jenke   char *psource;
30*f5e50b21SJoachim Jenke } id;
31*f5e50b21SJoachim Jenke 
32*f5e50b21SJoachim Jenke #define TIED 1
33*f5e50b21SJoachim Jenke 
34*f5e50b21SJoachim Jenke struct kmp_depnode_list;
35*f5e50b21SJoachim Jenke 
36*f5e50b21SJoachim Jenke typedef struct kmp_base_depnode {
37*f5e50b21SJoachim Jenke   struct kmp_depnode_list *successors;
38*f5e50b21SJoachim Jenke   /* [...] more stuff down here */
39*f5e50b21SJoachim Jenke } kmp_base_depnode_t;
40*f5e50b21SJoachim Jenke 
41*f5e50b21SJoachim Jenke typedef struct kmp_depnode_list {
42*f5e50b21SJoachim Jenke   struct kmp_base_depnode *node;
43*f5e50b21SJoachim Jenke   struct kmp_depnode_list *next;
44*f5e50b21SJoachim Jenke } kmp_depnode_list_t;
45*f5e50b21SJoachim Jenke 
46*f5e50b21SJoachim Jenke static id loc = {0, 2, 0, 0, ";file;func;0;0;;"};
47*f5e50b21SJoachim Jenke kmp_task_t *__kmpc_omp_task_alloc(id *loc, int gtid, int flags, size_t sz,
48*f5e50b21SJoachim Jenke                                   size_t shar, entry_t rtn);
49*f5e50b21SJoachim Jenke int __kmpc_omp_task_with_deps(id *loc, int gtid, kmp_task_t *task, int nd,
50*f5e50b21SJoachim Jenke                               dep *dep_lst, int nd_noalias,
51*f5e50b21SJoachim Jenke                               dep *noalias_dep_lst);
52*f5e50b21SJoachim Jenke kmp_depnode_list_t *__kmpc_task_get_successors(kmp_task_t *task);
53*f5e50b21SJoachim Jenke kmp_base_depnode_t *__kmpc_task_get_depnode(kmp_task_t *task);
54*f5e50b21SJoachim Jenke int __kmpc_global_thread_num(id *);
55*f5e50b21SJoachim Jenke 
56*f5e50b21SJoachim Jenke #endif /* KMP_TASK_DEPS_H */
57