[memprof] Use a new constructor of IndexedAllocationInfo (NFC) (#116920)
[llvm-project.git] / offload / include / OpenMP / InternalTypes.h
blobbd84c38fb20115dd3464ed581a2b62ef5fe35eb3
1 //===-- OpenMP/InternalTypes.h -- Internal OpenMP Types ------------- C++ -===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // Private type declarations and helper macros for OpenMP.
11 //===----------------------------------------------------------------------===//
13 #ifndef OMPTARGET_OPENMP_INTERNAL_TYPES_H
14 #define OMPTARGET_OPENMP_INTERNAL_TYPES_H
16 #include <cstddef>
17 #include <cstdint>
19 extern "C" {
21 // Compiler sends us this info:
22 typedef struct kmp_depend_info {
23 intptr_t base_addr;
24 size_t len;
25 struct {
26 bool in : 1;
27 bool out : 1;
28 bool mtx : 1;
29 } flags;
30 } kmp_depend_info_t;
32 typedef struct kmp_tasking_flags { /* Total struct must be exactly 32 bits */
33 /* Compiler flags */ /* Total compiler flags must be 16 bits */
34 unsigned tiedness : 1; /* task is either tied (1) or untied (0) */
35 unsigned final : 1; /* task is final(1) so execute immediately */
36 unsigned merged_if0 : 1; /* no __kmpc_task_{begin/complete}_if0 calls in if0
37 code path */
38 unsigned destructors_thunk : 1; /* set if the compiler creates a thunk to
39 invoke destructors from the runtime */
40 unsigned proxy : 1; /* task is a proxy task (it will be executed outside the
41 context of the RTL) */
42 unsigned priority_specified : 1; /* set if the compiler provides priority
43 setting for the task */
44 unsigned detachable : 1; /* 1 == can detach */
45 unsigned hidden_helper : 1; /* 1 == hidden helper task */
46 unsigned reserved : 8; /* reserved for compiler use */
48 /* Library flags */ /* Total library flags must be 16 bits */
49 unsigned tasktype : 1; /* task is either explicit(1) or implicit (0) */
50 unsigned task_serial : 1; // task is executed immediately (1) or deferred (0)
51 unsigned tasking_ser : 1; // all tasks in team are either executed immediately
52 // (1) or may be deferred (0)
53 unsigned team_serial : 1; // entire team is serial (1) [1 thread] or parallel
54 // (0) [>= 2 threads]
55 /* If either team_serial or tasking_ser is set, task team may be NULL */
56 /* Task State Flags: */
57 unsigned started : 1; /* 1==started, 0==not started */
58 unsigned executing : 1; /* 1==executing, 0==not executing */
59 unsigned complete : 1; /* 1==complete, 0==not complete */
60 unsigned freed : 1; /* 1==freed, 0==allocated */
61 unsigned native : 1; /* 1==gcc-compiled task, 0==intel */
62 unsigned reserved31 : 7; /* reserved for library use */
63 } kmp_tasking_flags_t;
65 struct kmp_task;
66 typedef int32_t (*kmp_routine_entry_t)(int32_t, struct kmp_task *);
67 typedef struct kmp_task {
68 void *shareds;
69 kmp_routine_entry_t routine;
70 int32_t part_id;
71 } kmp_task_t;
73 int32_t __kmpc_global_thread_num(void *) __attribute__((weak));
74 bool __kmpc_omp_has_task_team(int32_t gtid) __attribute__((weak));
75 void **__kmpc_omp_get_target_async_handle_ptr(int32_t gtid)
76 __attribute__((weak));
78 /**
79 * The argument set that is passed from asynchronous memory copy to block
80 * version of memory copy invoked in helper task
82 struct TargetMemcpyArgsTy {
83 /**
84 * Common attribuutes
86 void *Dst;
87 const void *Src;
88 int DstDevice;
89 int SrcDevice;
91 /**
92 * The flag that denotes single dimensional or rectangle dimensional copy
94 bool IsRectMemcpy;
96 /**
97 * Arguments for single dimensional copy
99 size_t Length;
100 size_t DstOffset;
101 size_t SrcOffset;
104 * Arguments for rectangle dimensional copy
106 size_t ElementSize;
107 int NumDims;
108 const size_t *Volume;
109 const size_t *DstOffsets;
110 const size_t *SrcOffsets;
111 const size_t *DstDimensions;
112 const size_t *SrcDimensions;
115 * Constructor for single dimensional copy
117 TargetMemcpyArgsTy(void *Dst, const void *Src, size_t Length,
118 size_t DstOffset, size_t SrcOffset, int DstDevice,
119 int SrcDevice)
120 : Dst(Dst), Src(Src), DstDevice(DstDevice), SrcDevice(SrcDevice),
121 IsRectMemcpy(false), Length(Length), DstOffset(DstOffset),
122 SrcOffset(SrcOffset), ElementSize(0), NumDims(0), Volume(0),
123 DstOffsets(0), SrcOffsets(0), DstDimensions(0), SrcDimensions(0){};
126 * Constructor for rectangle dimensional copy
128 TargetMemcpyArgsTy(void *Dst, const void *Src, size_t ElementSize,
129 int NumDims, const size_t *Volume,
130 const size_t *DstOffsets, const size_t *SrcOffsets,
131 const size_t *DstDimensions, const size_t *SrcDimensions,
132 int DstDevice, int SrcDevice)
133 : Dst(Dst), Src(Src), DstDevice(DstDevice), SrcDevice(SrcDevice),
134 IsRectMemcpy(true), Length(0), DstOffset(0), SrcOffset(0),
135 ElementSize(ElementSize), NumDims(NumDims), Volume(Volume),
136 DstOffsets(DstOffsets), SrcOffsets(SrcOffsets),
137 DstDimensions(DstDimensions), SrcDimensions(SrcDimensions){};
140 struct TargetMemsetArgsTy {
141 // Common attributes of a memset operation
142 void *Ptr;
143 int C;
144 size_t N;
145 int DeviceNum;
147 // no constructors defined, because this is a PoD
150 } // extern "C"
152 #endif // OMPTARGET_OPENMP_INTERNAL_TYPES_H