annotate openmp/runtime/src/kmp_omp.h @ 165:597b3f1c2c93

fix call createTailCallEliminationPass
author anatofuz
date Tue, 24 Mar 2020 15:30:52 +0900
parents 1d019706d866
children 0572611fdcc8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 #if USE_DEBUGGER
anatofuz
parents:
diff changeset
2 /*
anatofuz
parents:
diff changeset
3 * kmp_omp.h -- OpenMP definition for kmp_omp_struct_info_t.
anatofuz
parents:
diff changeset
4 * This is for information about runtime library structures.
anatofuz
parents:
diff changeset
5 */
anatofuz
parents:
diff changeset
6
anatofuz
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
8 //
anatofuz
parents:
diff changeset
9 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
10 // See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
11 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
12 //
anatofuz
parents:
diff changeset
13 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
14
anatofuz
parents:
diff changeset
15 /* THIS FILE SHOULD NOT BE MODIFIED IN IDB INTERFACE LIBRARY CODE
anatofuz
parents:
diff changeset
16 It should instead be modified in the OpenMP runtime and copied to the
anatofuz
parents:
diff changeset
17 interface library code. This way we can minimize the problems that this is
anatofuz
parents:
diff changeset
18 sure to cause having two copies of the same file.
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 Files live in libomp and libomp_db/src/include */
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 /* CHANGE THIS WHEN STRUCTURES BELOW CHANGE
anatofuz
parents:
diff changeset
23 Before we release this to a customer, please don't change this value. After
anatofuz
parents:
diff changeset
24 it is released and stable, then any new updates to the structures or data
anatofuz
parents:
diff changeset
25 structure traversal algorithms need to change this value. */
anatofuz
parents:
diff changeset
26 #define KMP_OMP_VERSION 9
anatofuz
parents:
diff changeset
27
anatofuz
parents:
diff changeset
28 typedef struct {
anatofuz
parents:
diff changeset
29 kmp_int32 offset;
anatofuz
parents:
diff changeset
30 kmp_int32 size;
anatofuz
parents:
diff changeset
31 } offset_and_size_t;
anatofuz
parents:
diff changeset
32
anatofuz
parents:
diff changeset
33 typedef struct {
anatofuz
parents:
diff changeset
34 kmp_uint64 addr;
anatofuz
parents:
diff changeset
35 kmp_int32 size;
anatofuz
parents:
diff changeset
36 kmp_int32 padding;
anatofuz
parents:
diff changeset
37 } addr_and_size_t;
anatofuz
parents:
diff changeset
38
anatofuz
parents:
diff changeset
39 typedef struct {
anatofuz
parents:
diff changeset
40 kmp_uint64 flags; // Flags for future extensions.
anatofuz
parents:
diff changeset
41 kmp_uint64
anatofuz
parents:
diff changeset
42 file; // Pointer to name of source file where the parallel region is.
anatofuz
parents:
diff changeset
43 kmp_uint64 func; // Pointer to name of routine where the parallel region is.
anatofuz
parents:
diff changeset
44 kmp_int32 begin; // Beginning of source line range.
anatofuz
parents:
diff changeset
45 kmp_int32 end; // End of source line range.
anatofuz
parents:
diff changeset
46 kmp_int32 num_threads; // Specified number of threads.
anatofuz
parents:
diff changeset
47 } kmp_omp_nthr_item_t;
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 typedef struct {
anatofuz
parents:
diff changeset
50 kmp_int32 num; // Number of items in the arrray.
anatofuz
parents:
diff changeset
51 kmp_uint64 array; // Address of array of kmp_omp_num_threads_item_t.
anatofuz
parents:
diff changeset
52 } kmp_omp_nthr_info_t;
anatofuz
parents:
diff changeset
53
anatofuz
parents:
diff changeset
54 /* This structure is known to the idb interface library */
anatofuz
parents:
diff changeset
55 typedef struct {
anatofuz
parents:
diff changeset
56
anatofuz
parents:
diff changeset
57 /* Change this only if you make a fundamental data structure change here */
anatofuz
parents:
diff changeset
58 kmp_int32 lib_version;
anatofuz
parents:
diff changeset
59
anatofuz
parents:
diff changeset
60 /* sanity check. Only should be checked if versions are identical
anatofuz
parents:
diff changeset
61 * This is also used for backward compatibility to get the runtime
anatofuz
parents:
diff changeset
62 * structure size if it the runtime is older than the interface */
anatofuz
parents:
diff changeset
63 kmp_int32 sizeof_this_structure;
anatofuz
parents:
diff changeset
64
anatofuz
parents:
diff changeset
65 /* OpenMP RTL version info. */
anatofuz
parents:
diff changeset
66 addr_and_size_t major;
anatofuz
parents:
diff changeset
67 addr_and_size_t minor;
anatofuz
parents:
diff changeset
68 addr_and_size_t build;
anatofuz
parents:
diff changeset
69 addr_and_size_t openmp_version;
anatofuz
parents:
diff changeset
70 addr_and_size_t banner;
anatofuz
parents:
diff changeset
71
anatofuz
parents:
diff changeset
72 /* Various globals. */
anatofuz
parents:
diff changeset
73 addr_and_size_t threads; // Pointer to __kmp_threads.
anatofuz
parents:
diff changeset
74 addr_and_size_t roots; // Pointer to __kmp_root.
anatofuz
parents:
diff changeset
75 addr_and_size_t capacity; // Pointer to __kmp_threads_capacity.
anatofuz
parents:
diff changeset
76 #if KMP_USE_MONITOR
anatofuz
parents:
diff changeset
77 addr_and_size_t monitor; // Pointer to __kmp_monitor.
anatofuz
parents:
diff changeset
78 #endif
anatofuz
parents:
diff changeset
79 #if !KMP_USE_DYNAMIC_LOCK
anatofuz
parents:
diff changeset
80 addr_and_size_t lock_table; // Pointer to __kmp_lock_table.
anatofuz
parents:
diff changeset
81 #endif
anatofuz
parents:
diff changeset
82 addr_and_size_t func_microtask;
anatofuz
parents:
diff changeset
83 addr_and_size_t func_fork;
anatofuz
parents:
diff changeset
84 addr_and_size_t func_fork_teams;
anatofuz
parents:
diff changeset
85 addr_and_size_t team_counter;
anatofuz
parents:
diff changeset
86 addr_and_size_t task_counter;
anatofuz
parents:
diff changeset
87 addr_and_size_t nthr_info;
anatofuz
parents:
diff changeset
88 kmp_int32 address_width;
anatofuz
parents:
diff changeset
89 kmp_int32 indexed_locks;
anatofuz
parents:
diff changeset
90 kmp_int32 last_barrier; // The end in enum barrier_type
anatofuz
parents:
diff changeset
91 kmp_int32 deque_size; // TASK_DEQUE_SIZE
anatofuz
parents:
diff changeset
92
anatofuz
parents:
diff changeset
93 /* thread structure information. */
anatofuz
parents:
diff changeset
94 kmp_int32 th_sizeof_struct;
anatofuz
parents:
diff changeset
95 offset_and_size_t th_info; // descriptor for thread
anatofuz
parents:
diff changeset
96 offset_and_size_t th_team; // team for this thread
anatofuz
parents:
diff changeset
97 offset_and_size_t th_root; // root for this thread
anatofuz
parents:
diff changeset
98 offset_and_size_t th_serial_team; // serial team under this thread
anatofuz
parents:
diff changeset
99 offset_and_size_t th_ident; // location for this thread (if available)
anatofuz
parents:
diff changeset
100 offset_and_size_t th_spin_here; // is thread waiting for lock (if available)
anatofuz
parents:
diff changeset
101 offset_and_size_t
anatofuz
parents:
diff changeset
102 th_next_waiting; // next thread waiting for lock (if available)
anatofuz
parents:
diff changeset
103 offset_and_size_t th_task_team; // task team struct
anatofuz
parents:
diff changeset
104 offset_and_size_t th_current_task; // innermost task being executed
anatofuz
parents:
diff changeset
105 offset_and_size_t
anatofuz
parents:
diff changeset
106 th_task_state; // alternating 0/1 for task team identification
anatofuz
parents:
diff changeset
107 offset_and_size_t th_bar;
anatofuz
parents:
diff changeset
108 offset_and_size_t th_b_worker_arrived; // the worker increases it by 1 when it
anatofuz
parents:
diff changeset
109 // arrives to the barrier
anatofuz
parents:
diff changeset
110
anatofuz
parents:
diff changeset
111 /* teams information */
anatofuz
parents:
diff changeset
112 offset_and_size_t th_teams_microtask; // entry address for teams construct
anatofuz
parents:
diff changeset
113 offset_and_size_t th_teams_level; // initial level of teams construct
anatofuz
parents:
diff changeset
114 offset_and_size_t th_teams_nteams; // number of teams in a league
anatofuz
parents:
diff changeset
115 offset_and_size_t
anatofuz
parents:
diff changeset
116 th_teams_nth; // number of threads in each team of the league
anatofuz
parents:
diff changeset
117
anatofuz
parents:
diff changeset
118 /* kmp_desc structure (for info field above) */
anatofuz
parents:
diff changeset
119 kmp_int32 ds_sizeof_struct;
anatofuz
parents:
diff changeset
120 offset_and_size_t ds_tid; // team thread id
anatofuz
parents:
diff changeset
121 offset_and_size_t ds_gtid; // global thread id
anatofuz
parents:
diff changeset
122 offset_and_size_t ds_thread; // native thread id
anatofuz
parents:
diff changeset
123
anatofuz
parents:
diff changeset
124 /* team structure information */
anatofuz
parents:
diff changeset
125 kmp_int32 t_sizeof_struct;
anatofuz
parents:
diff changeset
126 offset_and_size_t t_master_tid; // tid of master in parent team
anatofuz
parents:
diff changeset
127 offset_and_size_t t_ident; // location of parallel region
anatofuz
parents:
diff changeset
128 offset_and_size_t t_parent; // parent team
anatofuz
parents:
diff changeset
129 offset_and_size_t t_nproc; // # team threads
anatofuz
parents:
diff changeset
130 offset_and_size_t t_threads; // array of threads
anatofuz
parents:
diff changeset
131 offset_and_size_t t_serialized; // # levels of serialized teams
anatofuz
parents:
diff changeset
132 offset_and_size_t t_id; // unique team id
anatofuz
parents:
diff changeset
133 offset_and_size_t t_pkfn;
anatofuz
parents:
diff changeset
134 offset_and_size_t t_task_team; // task team structure
anatofuz
parents:
diff changeset
135 offset_and_size_t t_implicit_task; // taskdata for the thread's implicit task
anatofuz
parents:
diff changeset
136 offset_and_size_t t_cancel_request;
anatofuz
parents:
diff changeset
137 offset_and_size_t t_bar;
anatofuz
parents:
diff changeset
138 offset_and_size_t
anatofuz
parents:
diff changeset
139 t_b_master_arrived; // increased by 1 when master arrives to a barrier
anatofuz
parents:
diff changeset
140 offset_and_size_t
anatofuz
parents:
diff changeset
141 t_b_team_arrived; // increased by one when all the threads arrived
anatofuz
parents:
diff changeset
142
anatofuz
parents:
diff changeset
143 /* root structure information */
anatofuz
parents:
diff changeset
144 kmp_int32 r_sizeof_struct;
anatofuz
parents:
diff changeset
145 offset_and_size_t r_root_team; // team at root
anatofuz
parents:
diff changeset
146 offset_and_size_t r_hot_team; // hot team for this root
anatofuz
parents:
diff changeset
147 offset_and_size_t r_uber_thread; // root thread
anatofuz
parents:
diff changeset
148 offset_and_size_t r_root_id; // unique root id (if available)
anatofuz
parents:
diff changeset
149
anatofuz
parents:
diff changeset
150 /* ident structure information */
anatofuz
parents:
diff changeset
151 kmp_int32 id_sizeof_struct;
anatofuz
parents:
diff changeset
152 offset_and_size_t
anatofuz
parents:
diff changeset
153 id_psource; /* address of string ";file;func;line1;line2;;". */
anatofuz
parents:
diff changeset
154 offset_and_size_t id_flags;
anatofuz
parents:
diff changeset
155
anatofuz
parents:
diff changeset
156 /* lock structure information */
anatofuz
parents:
diff changeset
157 kmp_int32 lk_sizeof_struct;
anatofuz
parents:
diff changeset
158 offset_and_size_t lk_initialized;
anatofuz
parents:
diff changeset
159 offset_and_size_t lk_location;
anatofuz
parents:
diff changeset
160 offset_and_size_t lk_tail_id;
anatofuz
parents:
diff changeset
161 offset_and_size_t lk_head_id;
anatofuz
parents:
diff changeset
162 offset_and_size_t lk_next_ticket;
anatofuz
parents:
diff changeset
163 offset_and_size_t lk_now_serving;
anatofuz
parents:
diff changeset
164 offset_and_size_t lk_owner_id;
anatofuz
parents:
diff changeset
165 offset_and_size_t lk_depth_locked;
anatofuz
parents:
diff changeset
166 offset_and_size_t lk_lock_flags;
anatofuz
parents:
diff changeset
167
anatofuz
parents:
diff changeset
168 #if !KMP_USE_DYNAMIC_LOCK
anatofuz
parents:
diff changeset
169 /* lock_table_t */
anatofuz
parents:
diff changeset
170 kmp_int32 lt_size_of_struct; /* Size and layout of kmp_lock_table_t. */
anatofuz
parents:
diff changeset
171 offset_and_size_t lt_used;
anatofuz
parents:
diff changeset
172 offset_and_size_t lt_allocated;
anatofuz
parents:
diff changeset
173 offset_and_size_t lt_table;
anatofuz
parents:
diff changeset
174 #endif
anatofuz
parents:
diff changeset
175
anatofuz
parents:
diff changeset
176 /* task_team_t */
anatofuz
parents:
diff changeset
177 kmp_int32 tt_sizeof_struct;
anatofuz
parents:
diff changeset
178 offset_and_size_t tt_threads_data;
anatofuz
parents:
diff changeset
179 offset_and_size_t tt_found_tasks;
anatofuz
parents:
diff changeset
180 offset_and_size_t tt_nproc;
anatofuz
parents:
diff changeset
181 offset_and_size_t tt_unfinished_threads;
anatofuz
parents:
diff changeset
182 offset_and_size_t tt_active;
anatofuz
parents:
diff changeset
183
anatofuz
parents:
diff changeset
184 /* kmp_taskdata_t */
anatofuz
parents:
diff changeset
185 kmp_int32 td_sizeof_struct;
anatofuz
parents:
diff changeset
186 offset_and_size_t td_task_id; // task id
anatofuz
parents:
diff changeset
187 offset_and_size_t td_flags; // task flags
anatofuz
parents:
diff changeset
188 offset_and_size_t td_team; // team for this task
anatofuz
parents:
diff changeset
189 offset_and_size_t td_parent; // parent task
anatofuz
parents:
diff changeset
190 offset_and_size_t td_level; // task testing level
anatofuz
parents:
diff changeset
191 offset_and_size_t td_ident; // task identifier
anatofuz
parents:
diff changeset
192 offset_and_size_t td_allocated_child_tasks; // child tasks (+ current task)
anatofuz
parents:
diff changeset
193 // not yet deallocated
anatofuz
parents:
diff changeset
194 offset_and_size_t td_incomplete_child_tasks; // child tasks not yet complete
anatofuz
parents:
diff changeset
195
anatofuz
parents:
diff changeset
196 /* Taskwait */
anatofuz
parents:
diff changeset
197 offset_and_size_t td_taskwait_ident;
anatofuz
parents:
diff changeset
198 offset_and_size_t td_taskwait_counter;
anatofuz
parents:
diff changeset
199 offset_and_size_t
anatofuz
parents:
diff changeset
200 td_taskwait_thread; // gtid + 1 of thread encountered taskwait
anatofuz
parents:
diff changeset
201
anatofuz
parents:
diff changeset
202 /* Taskgroup */
anatofuz
parents:
diff changeset
203 offset_and_size_t td_taskgroup; // pointer to the current taskgroup
anatofuz
parents:
diff changeset
204 offset_and_size_t
anatofuz
parents:
diff changeset
205 td_task_count; // number of allocated and not yet complete tasks
anatofuz
parents:
diff changeset
206 offset_and_size_t td_cancel; // request for cancellation of this taskgroup
anatofuz
parents:
diff changeset
207
anatofuz
parents:
diff changeset
208 /* Task dependency */
anatofuz
parents:
diff changeset
209 offset_and_size_t
anatofuz
parents:
diff changeset
210 td_depnode; // pointer to graph node if the task has dependencies
anatofuz
parents:
diff changeset
211 offset_and_size_t dn_node;
anatofuz
parents:
diff changeset
212 offset_and_size_t dn_next;
anatofuz
parents:
diff changeset
213 offset_and_size_t dn_successors;
anatofuz
parents:
diff changeset
214 offset_and_size_t dn_task;
anatofuz
parents:
diff changeset
215 offset_and_size_t dn_npredecessors;
anatofuz
parents:
diff changeset
216 offset_and_size_t dn_nrefs;
anatofuz
parents:
diff changeset
217 offset_and_size_t dn_routine;
anatofuz
parents:
diff changeset
218
anatofuz
parents:
diff changeset
219 /* kmp_thread_data_t */
anatofuz
parents:
diff changeset
220 kmp_int32 hd_sizeof_struct;
anatofuz
parents:
diff changeset
221 offset_and_size_t hd_deque;
anatofuz
parents:
diff changeset
222 offset_and_size_t hd_deque_size;
anatofuz
parents:
diff changeset
223 offset_and_size_t hd_deque_head;
anatofuz
parents:
diff changeset
224 offset_and_size_t hd_deque_tail;
anatofuz
parents:
diff changeset
225 offset_and_size_t hd_deque_ntasks;
anatofuz
parents:
diff changeset
226 offset_and_size_t hd_deque_last_stolen;
anatofuz
parents:
diff changeset
227
anatofuz
parents:
diff changeset
228 // The last field of stable version.
anatofuz
parents:
diff changeset
229 kmp_uint64 last_field;
anatofuz
parents:
diff changeset
230
anatofuz
parents:
diff changeset
231 } kmp_omp_struct_info_t;
anatofuz
parents:
diff changeset
232
anatofuz
parents:
diff changeset
233 #endif /* USE_DEBUGGER */
anatofuz
parents:
diff changeset
234
anatofuz
parents:
diff changeset
235 /* end of file */