1//===--- OMPKinds.def - OpenMP directives, clauses, rt-calls -*- 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/// \file
9///
10/// This file defines the list of supported OpenMP runtime
11/// calls, and other things that need to be listed in enums.
12///
13/// This file is under transition to OMP.td with TableGen code generation.
14///
15//===----------------------------------------------------------------------===//
16
17/// OpenMP Directives, combined directives and Clauses
18/// - Moved to OMP.td
19
20/// Types used in runtime structs or runtime functions
21///
22///{
23
24#ifndef OMP_TYPE
25#define OMP_TYPE(VarName, InitValue)
26#endif
27
28#define __OMP_TYPE(VarName) OMP_TYPE(VarName, Type::get##VarName##Ty(Ctx))
29
30__OMP_TYPE(Void)
31__OMP_TYPE(Int1)
32__OMP_TYPE(Int8)
33__OMP_TYPE(Int16)
34__OMP_TYPE(Int32)
35__OMP_TYPE(Int64)
36__OMP_TYPE(Int8Ptr)
37__OMP_TYPE(Int16Ptr)
38__OMP_TYPE(Int32Ptr)
39__OMP_TYPE(Int64Ptr)
40__OMP_TYPE(Double)
41
42OMP_TYPE(SizeTy, M.getDataLayout().getIntPtrType(Ctx))
43
44#define __OMP_PTR_TYPE(NAME, BASE) OMP_TYPE(NAME, BASE->getPointerTo())
45
46__OMP_PTR_TYPE(VoidPtr, Int8)
47__OMP_PTR_TYPE(VoidPtrPtr, VoidPtr)
48__OMP_PTR_TYPE(VoidPtrPtrPtr, VoidPtrPtr)
49
50__OMP_PTR_TYPE(Int8PtrPtr, Int8Ptr)
51__OMP_PTR_TYPE(Int8PtrPtrPtr, Int8PtrPtr)
52
53#undef __OMP_PTR_TYPE
54
55#undef __OMP_TYPE
56#undef OMP_TYPE
57
58///}
59
60/// array types
61///
62///{
63
64#ifndef OMP_ARRAY_TYPE
65#define OMP_ARRAY_TYPE(VarName, ElemTy, ArraySize)
66#endif
67
68#define __OMP_ARRAY_TYPE(VarName, ElemTy, ArraySize)                           \
69  OMP_ARRAY_TYPE(VarName, ElemTy, ArraySize)
70
71__OMP_ARRAY_TYPE(KmpCriticalName, Int32, 8)
72
73#undef __OMP_ARRAY_TYPE
74#undef OMP_ARRAY_TYPE
75
76///}
77
78/// Struct and function types
79///
80///{
81
82#ifndef OMP_STRUCT_TYPE
83#define OMP_STRUCT_TYPE(VarName, StructName, ...)
84#endif
85
86#define __OMP_STRUCT_TYPE(VarName, Name, ...)                                  \
87  OMP_STRUCT_TYPE(VarName, "struct." #Name, __VA_ARGS__)
88
89__OMP_STRUCT_TYPE(Ident, ident_t, Int32, Int32, Int32, Int32, Int8Ptr)
90__OMP_STRUCT_TYPE(OffloadEntry, __tgt_offload_entry, Int8Ptr, Int8Ptr, SizeTy,
91                  Int32, Int32)
92__OMP_STRUCT_TYPE(KernelArgs, __tgt_kernel_arguments, Int32, Int32, VoidPtrPtr,
93                  VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr, Int64)
94__OMP_STRUCT_TYPE(AsyncInfo, __tgt_async_info, Int8Ptr)
95
96#undef __OMP_STRUCT_TYPE
97#undef OMP_STRUCT_TYPE
98
99#ifndef OMP_FUNCTION_TYPE
100#define OMP_FUNCTION_TYPE(VarName, IsVarArg, ReturnType, ...)
101#endif
102
103#define __OMP_FUNCTION_TYPE(VarName, IsVarArg, ReturnType, ...)                \
104  OMP_FUNCTION_TYPE(VarName, IsVarArg, ReturnType, __VA_ARGS__)
105
106__OMP_FUNCTION_TYPE(ParallelTask, true, Void, Int32Ptr, Int32Ptr)
107__OMP_FUNCTION_TYPE(ReduceFunction, false, Void, VoidPtr, VoidPtr)
108__OMP_FUNCTION_TYPE(CopyFunction, false, Void, VoidPtr, VoidPtr)
109__OMP_FUNCTION_TYPE(KmpcCtor, false, VoidPtr, VoidPtr)
110__OMP_FUNCTION_TYPE(KmpcDtor, false, Void, VoidPtr)
111__OMP_FUNCTION_TYPE(KmpcCopyCtor, false, VoidPtr, VoidPtr, VoidPtr)
112__OMP_FUNCTION_TYPE(TaskRoutineEntry, false, Int32, Int32,
113                    /* kmp_task_t */ VoidPtr)
114__OMP_FUNCTION_TYPE(ShuffleReduce, false, Void, VoidPtr, Int16, Int16, Int16)
115__OMP_FUNCTION_TYPE(InterWarpCopy, false, Void, VoidPtr, Int32)
116__OMP_FUNCTION_TYPE(GlobalList, false, Void, VoidPtr, Int32, VoidPtr)
117
118#undef __OMP_FUNCTION_TYPE
119#undef OMP_FUNCTION_TYPE
120
121///}
122
123/// Internal Control Variables information
124///
125///{
126
127#ifndef ICV_INIT_VALUE
128#define ICV_INIT_VALUE(Enum, Name)
129#endif
130
131#define __ICV_INIT_VALUE(Name) ICV_INIT_VALUE(ICV_##Name, #Name)
132
133__ICV_INIT_VALUE(ZERO)
134__ICV_INIT_VALUE(FALSE)
135__ICV_INIT_VALUE(IMPLEMENTATION_DEFINED)
136__ICV_INIT_VALUE(LAST)
137
138#undef __ICV_INIT_VALUE
139#undef ICV_INIT_VALUE
140
141#ifndef ICV_DATA_ENV
142#define ICV_DATA_ENV(Enum, Name, EnvVarName, Init)
143#endif
144
145#define __ICV_DATA_ENV(Name, EnvVarName, Init)                                 \
146  ICV_DATA_ENV(ICV_##Name, #Name, #EnvVarName, Init)
147
148__ICV_DATA_ENV(nthreads, OMP_NUM_THREADS, ICV_IMPLEMENTATION_DEFINED)
149__ICV_DATA_ENV(active_levels, NONE, ICV_ZERO)
150__ICV_DATA_ENV(cancel, OMP_CANCELLATION, ICV_FALSE)
151__ICV_DATA_ENV(proc_bind, OMP_PROC_BIND, ICV_IMPLEMENTATION_DEFINED)
152__ICV_DATA_ENV(__last, last, ICV_LAST)
153
154#undef __ICV_DATA_ENV
155#undef ICV_DATA_ENV
156
157#ifndef ICV_RT_SET
158#define ICV_RT_SET(Name, RTL)
159#endif
160
161#define __ICV_RT_SET(Name, RTL) ICV_RT_SET(ICV_##Name, OMPRTL_##RTL)
162
163__ICV_RT_SET(nthreads, omp_set_num_threads)
164
165#undef __ICV_RT_SET
166#undef ICV_RT_SET
167
168#ifndef ICV_RT_GET
169#define ICV_RT_GET(Name, RTL)
170#endif
171
172#define __ICV_RT_GET(Name, RTL) ICV_RT_GET(ICV_##Name, OMPRTL_##RTL)
173
174__ICV_RT_GET(nthreads, omp_get_max_threads)
175__ICV_RT_GET(active_levels, omp_get_active_level)
176__ICV_RT_GET(cancel, omp_get_cancellation)
177__ICV_RT_GET(proc_bind, omp_get_proc_bind)
178
179#undef __ICV_RT_GET
180#undef ICV_RT_GET
181
182///}
183
184/// Runtime library function (and their attributes)
185///
186///{
187
188#ifndef OMP_RTL
189#define OMP_RTL(Enum, Str, IsVarArg, ReturnType, ...)
190#endif
191
192#define __OMP_RTL(Name, IsVarArg, ReturnType, ...)                             \
193  OMP_RTL(OMPRTL_##Name, #Name, IsVarArg, ReturnType, __VA_ARGS__)
194
195
196
197__OMP_RTL(__kmpc_barrier, false, Void, IdentPtr, Int32)
198__OMP_RTL(__kmpc_cancel, false, Int32, IdentPtr, Int32, Int32)
199__OMP_RTL(__kmpc_cancel_barrier, false, Int32, IdentPtr, Int32)
200__OMP_RTL(__kmpc_flush, false, Void, IdentPtr)
201__OMP_RTL(__kmpc_global_thread_num, false, Int32, IdentPtr)
202__OMP_RTL(__kmpc_get_hardware_thread_id_in_block, false, Int32, )
203__OMP_RTL(__kmpc_fork_call, true, Void, IdentPtr, Int32, ParallelTaskPtr)
204__OMP_RTL(__kmpc_omp_taskwait, false, Int32, IdentPtr, Int32)
205__OMP_RTL(__kmpc_omp_taskyield, false, Int32, IdentPtr, Int32, /* Int */ Int32)
206__OMP_RTL(__kmpc_push_num_threads, false, Void, IdentPtr, Int32,
207          /* Int */ Int32)
208__OMP_RTL(__kmpc_push_proc_bind, false, Void, IdentPtr, Int32, /* Int */ Int32)
209__OMP_RTL(__kmpc_omp_reg_task_with_affinity, false, Int32, IdentPtr, Int32,
210          /* kmp_task_t */ VoidPtr, Int32,
211          /* kmp_task_affinity_info_t */ VoidPtr)
212
213__OMP_RTL(__kmpc_get_hardware_num_blocks, false, Int32, )
214__OMP_RTL(__kmpc_get_hardware_num_threads_in_block, false, Int32, )
215__OMP_RTL(__kmpc_get_warp_size, false, Int32, )
216
217__OMP_RTL(omp_get_thread_num, false, Int32, )
218__OMP_RTL(omp_get_num_threads, false, Int32, )
219__OMP_RTL(omp_get_max_threads, false, Int32, )
220__OMP_RTL(omp_in_parallel, false, Int32, )
221__OMP_RTL(omp_get_dynamic, false, Int32, )
222__OMP_RTL(omp_get_cancellation, false, Int32, )
223__OMP_RTL(omp_get_nested, false, Int32, )
224__OMP_RTL(omp_get_schedule, false, Void, Int32Ptr, Int32Ptr)
225__OMP_RTL(omp_get_thread_limit, false, Int32, )
226__OMP_RTL(omp_get_supported_active_levels, false, Int32, )
227__OMP_RTL(omp_get_max_active_levels, false, Int32, )
228__OMP_RTL(omp_get_level, false, Int32, )
229__OMP_RTL(omp_get_ancestor_thread_num, false, Int32, Int32)
230__OMP_RTL(omp_get_team_size, false, Int32, Int32)
231__OMP_RTL(omp_get_active_level, false, Int32, )
232__OMP_RTL(omp_in_final, false, Int32, )
233__OMP_RTL(omp_get_proc_bind, false, Int32, )
234__OMP_RTL(omp_get_num_places, false, Int32, )
235__OMP_RTL(omp_get_num_procs, false, Int32, )
236__OMP_RTL(omp_get_place_proc_ids, false, Void, Int32, Int32Ptr)
237__OMP_RTL(omp_get_place_num, false, Int32, )
238__OMP_RTL(omp_get_partition_num_places, false, Int32, )
239__OMP_RTL(omp_get_partition_place_nums, false, Void, Int32Ptr)
240__OMP_RTL(omp_get_wtime, false, Double,)
241
242__OMP_RTL(omp_set_num_threads, false, Void, Int32)
243__OMP_RTL(omp_set_dynamic, false, Void, Int32)
244__OMP_RTL(omp_set_nested, false, Void, Int32)
245__OMP_RTL(omp_set_schedule, false, Void, Int32, Int32)
246__OMP_RTL(omp_set_max_active_levels, false, Void, Int32)
247
248__OMP_RTL(__kmpc_master, false, Int32, IdentPtr, Int32)
249__OMP_RTL(__kmpc_end_master, false, Void, IdentPtr, Int32)
250__OMP_RTL(__kmpc_masked, false, Int32, IdentPtr, Int32, Int32)
251__OMP_RTL(__kmpc_end_masked, false, Void, IdentPtr, Int32)
252__OMP_RTL(__kmpc_critical, false, Void, IdentPtr, Int32, KmpCriticalNamePtrTy)
253__OMP_RTL(__kmpc_critical_with_hint, false, Void, IdentPtr, Int32,
254          KmpCriticalNamePtrTy, Int32)
255__OMP_RTL(__kmpc_end_critical, false, Void, IdentPtr, Int32,
256          KmpCriticalNamePtrTy)
257
258__OMP_RTL(__kmpc_begin, false, Void, IdentPtr, Int32)
259__OMP_RTL(__kmpc_end, false, Void, IdentPtr)
260
261__OMP_RTL(__kmpc_reduce, false, Int32, IdentPtr, Int32, Int32, SizeTy, VoidPtr,
262          ReduceFunctionPtr, KmpCriticalNamePtrTy)
263__OMP_RTL(__kmpc_reduce_nowait, false, Int32, IdentPtr, Int32, Int32, SizeTy,
264          VoidPtr, ReduceFunctionPtr, KmpCriticalNamePtrTy)
265__OMP_RTL(__kmpc_end_reduce, false, Void, IdentPtr, Int32, KmpCriticalNamePtrTy)
266__OMP_RTL(__kmpc_end_reduce_nowait, false, Void, IdentPtr, Int32,
267          KmpCriticalNamePtrTy)
268
269__OMP_RTL(__kmpc_ordered, false, Void, IdentPtr, Int32)
270__OMP_RTL(__kmpc_end_ordered, false, Void, IdentPtr, Int32)
271
272__OMP_RTL(__kmpc_for_static_init_4, false, Void, IdentPtr, Int32, Int32,
273          Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
274__OMP_RTL(__kmpc_for_static_init_4u, false, Void, IdentPtr, Int32, Int32,
275          Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
276__OMP_RTL(__kmpc_for_static_init_8, false, Void, IdentPtr, Int32, Int32,
277          Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
278__OMP_RTL(__kmpc_for_static_init_8u, false, Void, IdentPtr, Int32, Int32,
279          Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
280__OMP_RTL(__kmpc_for_static_fini, false, Void, IdentPtr, Int32)
281__OMP_RTL(__kmpc_distribute_static_init_4, false, Void, IdentPtr, Int32, Int32,
282          Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
283__OMP_RTL(__kmpc_distribute_static_init_4u, false, Void, IdentPtr, Int32, Int32,
284          Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
285__OMP_RTL(__kmpc_distribute_static_init_8, false, Void, IdentPtr, Int32, Int32,
286          Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
287__OMP_RTL(__kmpc_distribute_static_init_8u, false, Void, IdentPtr, Int32, Int32,
288          Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
289__OMP_RTL(__kmpc_distribute_static_fini, false, Void, IdentPtr, Int32)
290__OMP_RTL(__kmpc_dist_dispatch_init_4, false, Void, IdentPtr, Int32, Int32,
291          Int32Ptr, Int32, Int32, Int32, Int32)
292__OMP_RTL(__kmpc_dist_dispatch_init_4u, false, Void, IdentPtr, Int32, Int32,
293          Int32Ptr, Int32, Int32, Int32, Int32)
294__OMP_RTL(__kmpc_dist_dispatch_init_8, false, Void, IdentPtr, Int32, Int32,
295          Int32Ptr, Int64, Int64, Int64, Int64)
296__OMP_RTL(__kmpc_dist_dispatch_init_8u, false, Void, IdentPtr, Int32, Int32,
297          Int32Ptr, Int64, Int64, Int64, Int64)
298__OMP_RTL(__kmpc_dispatch_init_4, false, Void, IdentPtr, Int32, Int32, Int32,
299          Int32, Int32, Int32)
300__OMP_RTL(__kmpc_dispatch_init_4u, false, Void, IdentPtr, Int32, Int32, Int32,
301          Int32, Int32, Int32)
302__OMP_RTL(__kmpc_dispatch_init_8, false, Void, IdentPtr, Int32, Int32, Int64,
303          Int64, Int64, Int64)
304__OMP_RTL(__kmpc_dispatch_init_8u, false, Void, IdentPtr, Int32, Int32, Int64,
305          Int64, Int64, Int64)
306__OMP_RTL(__kmpc_dispatch_next_4, false, Int32, IdentPtr, Int32, Int32Ptr,
307          Int32Ptr, Int32Ptr, Int32Ptr)
308__OMP_RTL(__kmpc_dispatch_next_4u, false, Int32, IdentPtr, Int32, Int32Ptr,
309          Int32Ptr, Int32Ptr, Int32Ptr)
310__OMP_RTL(__kmpc_dispatch_next_8, false, Int32, IdentPtr, Int32, Int32Ptr,
311          Int64Ptr, Int64Ptr, Int64Ptr)
312__OMP_RTL(__kmpc_dispatch_next_8u, false, Int32, IdentPtr, Int32, Int32Ptr,
313          Int64Ptr, Int64Ptr, Int64Ptr)
314__OMP_RTL(__kmpc_dispatch_fini_4, false, Void, IdentPtr, Int32)
315__OMP_RTL(__kmpc_dispatch_fini_4u, false, Void, IdentPtr, Int32)
316__OMP_RTL(__kmpc_dispatch_fini_8, false, Void, IdentPtr, Int32)
317__OMP_RTL(__kmpc_dispatch_fini_8u, false, Void, IdentPtr, Int32)
318__OMP_RTL(__kmpc_team_static_init_4, false, Void, IdentPtr, Int32, Int32Ptr,
319          Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
320__OMP_RTL(__kmpc_team_static_init_4u, false, Void, IdentPtr, Int32, Int32Ptr,
321          Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
322__OMP_RTL(__kmpc_team_static_init_8, false, Void, IdentPtr, Int32, Int32Ptr,
323          Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
324__OMP_RTL(__kmpc_team_static_init_8u, false, Void, IdentPtr, Int32, Int32Ptr,
325          Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
326__OMP_RTL(__kmpc_dist_for_static_init_4, false, Void, IdentPtr, Int32, Int32,
327          Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
328__OMP_RTL(__kmpc_dist_for_static_init_4u, false, Void, IdentPtr, Int32, Int32,
329          Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
330__OMP_RTL(__kmpc_dist_for_static_init_8, false, Void, IdentPtr, Int32, Int32,
331          Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
332__OMP_RTL(__kmpc_dist_for_static_init_8u, false, Void, IdentPtr, Int32, Int32,
333          Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
334
335__OMP_RTL(__kmpc_single, false, Int32, IdentPtr, Int32)
336__OMP_RTL(__kmpc_end_single, false, Void, IdentPtr, Int32)
337
338__OMP_RTL(__kmpc_omp_task_alloc, false, /* kmp_task_t */ VoidPtr, IdentPtr,
339          Int32, Int32, SizeTy, SizeTy, TaskRoutineEntryPtr)
340__OMP_RTL(__kmpc_omp_task, false, Int32, IdentPtr, Int32,
341          /* kmp_task_t */ VoidPtr)
342__OMP_RTL(__kmpc_end_taskgroup, false, Void, IdentPtr, Int32)
343__OMP_RTL(__kmpc_taskgroup, false, Void, IdentPtr, Int32)
344__OMP_RTL(__kmpc_omp_task_begin_if0, false, Void, IdentPtr, Int32,
345          /* kmp_task_t */ VoidPtr)
346__OMP_RTL(__kmpc_omp_task_complete_if0, false, Void, IdentPtr, Int32,
347          /* kmp_tasK_t */ VoidPtr)
348__OMP_RTL(__kmpc_omp_task_with_deps, false, Int32, IdentPtr, Int32,
349          /* kmp_task_t */ VoidPtr, Int32,
350          /* kmp_depend_info_t */ VoidPtr, Int32,
351          /* kmp_depend_info_t */ VoidPtr)
352__OMP_RTL(__kmpc_taskloop, false, Void, IdentPtr, /* Int */ Int32, VoidPtr,
353          /* Int */ Int32, Int64Ptr, Int64Ptr, Int64, /* Int */ Int32,
354          /* Int */ Int32, Int64, VoidPtr)
355__OMP_RTL(__kmpc_omp_target_task_alloc, false, /* kmp_task_t */ VoidPtr,
356          IdentPtr, Int32, Int32, SizeTy, SizeTy, TaskRoutineEntryPtr, Int64)
357__OMP_RTL(__kmpc_taskred_modifier_init, false, /* kmp_taskgroup */ VoidPtr,
358          IdentPtr, /* Int */ Int32, /* Int */ Int32, /* Int */ Int32, VoidPtr)
359__OMP_RTL(__kmpc_taskred_init, false, /* kmp_taskgroup */ VoidPtr,
360          /* Int */ Int32, /* Int */ Int32, VoidPtr)
361__OMP_RTL(__kmpc_task_reduction_modifier_fini, false, Void, IdentPtr,
362          /* Int */ Int32, /* Int */ Int32)
363__OMP_RTL(__kmpc_task_reduction_get_th_data, false, VoidPtr, Int32, VoidPtr,
364          VoidPtr)
365__OMP_RTL(__kmpc_task_reduction_init, false, VoidPtr, Int32, Int32, VoidPtr)
366__OMP_RTL(__kmpc_task_reduction_modifier_init, false, VoidPtr, VoidPtr, Int32,
367          Int32, Int32, VoidPtr)
368__OMP_RTL(__kmpc_proxy_task_completed_ooo, false, Void, VoidPtr)
369
370__OMP_RTL(__kmpc_omp_wait_deps, false, Void, IdentPtr, Int32, Int32,
371          /* kmp_depend_info_t */ VoidPtr, Int32, VoidPtr)
372__OMP_RTL(__kmpc_cancellationpoint, false, Int32, IdentPtr, Int32, Int32)
373
374__OMP_RTL(__kmpc_fork_teams, true, Void, IdentPtr, Int32, ParallelTaskPtr)
375__OMP_RTL(__kmpc_push_num_teams, false, Void, IdentPtr, Int32, Int32, Int32)
376
377__OMP_RTL(__kmpc_copyprivate, false, Void, IdentPtr, Int32, SizeTy, VoidPtr,
378          CopyFunctionPtr, Int32)
379__OMP_RTL(__kmpc_threadprivate_cached, false, VoidPtr, IdentPtr, Int32, VoidPtr,
380          SizeTy, VoidPtrPtrPtr)
381__OMP_RTL(__kmpc_threadprivate_register, false, Void, IdentPtr, VoidPtr,
382          KmpcCtorPtr, KmpcCopyCtorPtr, KmpcDtorPtr)
383
384__OMP_RTL(__kmpc_doacross_init, false, Void, IdentPtr, Int32, Int32,
385          /* kmp_dim */ VoidPtr)
386__OMP_RTL(__kmpc_doacross_post, false, Void, IdentPtr, Int32, Int64Ptr)
387__OMP_RTL(__kmpc_doacross_wait, false, Void, IdentPtr, Int32, Int64Ptr)
388__OMP_RTL(__kmpc_doacross_fini, false, Void, IdentPtr, Int32)
389
390__OMP_RTL(__kmpc_alloc, false, VoidPtr, /* Int */ Int32, SizeTy, VoidPtr)
391__OMP_RTL(__kmpc_aligned_alloc, false, VoidPtr, /* Int */ Int32, SizeTy, SizeTy,
392          VoidPtr)
393__OMP_RTL(__kmpc_free, false, Void, /* Int */ Int32, VoidPtr, VoidPtr)
394
395__OMP_RTL(__tgt_interop_init, false, Void, IdentPtr, Int32, VoidPtrPtr, Int64,
396          Int32, Int32, VoidPtr, Int32)
397__OMP_RTL(__tgt_interop_destroy, false, Void, IdentPtr, Int32, VoidPtrPtr,
398          Int32, Int32, VoidPtr, Int32)
399__OMP_RTL(__tgt_interop_use, false, Void, IdentPtr, Int32, VoidPtrPtr, Int32,
400          Int32, VoidPtr, Int32)
401
402__OMP_RTL(__kmpc_init_allocator, false, /* omp_allocator_handle_t */ VoidPtr,
403          /* Int */ Int32, /* omp_memespace_handle_t */ VoidPtr,
404          /* Int */ Int32, /* omp_alloctrait_t */ VoidPtr)
405__OMP_RTL(__kmpc_destroy_allocator, false, Void, /* Int */ Int32,
406          /* omp_allocator_handle_t */ VoidPtr)
407
408__OMP_RTL(__kmpc_push_target_tripcount_mapper, false, Void, IdentPtr, Int64, Int64)
409__OMP_RTL(__tgt_target_mapper, false, Int32, IdentPtr, Int64, VoidPtr, Int32, VoidPtrPtr,
410          VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr)
411__OMP_RTL(__tgt_target_nowait_mapper, false, Int32, IdentPtr, Int64, VoidPtr,
412          Int32, VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr,
413          VoidPtrPtr, Int32, VoidPtr, Int32, VoidPtr)
414__OMP_RTL(__tgt_target_teams_mapper, false, Int32, IdentPtr, Int64, VoidPtr, Int32,
415          VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr, Int32, Int32)
416__OMP_RTL(__tgt_target_teams_nowait_mapper, false, Int32, IdentPtr, Int64,
417          VoidPtr, Int32, VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr,
418          VoidPtrPtr, VoidPtrPtr, Int32, Int32, Int32, VoidPtr, Int32, VoidPtr)
419__OMP_RTL(__tgt_target_kernel, false, Int32, IdentPtr, Int64, Int32, Int32,
420          VoidPtr, KernelArgsPtr)
421__OMP_RTL(__tgt_target_kernel_nowait, false, Int32, IdentPtr, Int64, Int32,
422          Int32, VoidPtr, KernelArgsPtr, Int32, VoidPtr, Int32, VoidPtr)
423__OMP_RTL(__tgt_register_requires, false, Void, Int64)
424__OMP_RTL(__tgt_target_data_begin_mapper, false, Void, IdentPtr, Int64, Int32, VoidPtrPtr,
425          VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr)
426__OMP_RTL(__tgt_target_data_begin_nowait_mapper, false, Void, IdentPtr, Int64, Int32,
427          VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr)
428__OMP_RTL(__tgt_target_data_begin_mapper_issue, false, Void, IdentPtr, Int64, Int32,
429          VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr, AsyncInfoPtr)
430__OMP_RTL(__tgt_target_data_begin_mapper_wait, false, Void, Int64, AsyncInfoPtr)
431__OMP_RTL(__tgt_target_data_end_mapper, false, Void, IdentPtr, Int64, Int32, VoidPtrPtr,
432          VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr)
433__OMP_RTL(__tgt_target_data_end_nowait_mapper, false, Void, IdentPtr, Int64, Int32,
434          VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr)
435__OMP_RTL(__tgt_target_data_update_mapper, false, Void, IdentPtr, Int64, Int32,
436          VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr)
437__OMP_RTL(__tgt_target_data_update_nowait_mapper, false, Void, IdentPtr, Int64, Int32,
438          VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr)
439__OMP_RTL(__tgt_mapper_num_components, false, Int64, VoidPtr)
440__OMP_RTL(__tgt_push_mapper_component, false, Void, VoidPtr, VoidPtr, VoidPtr,
441          Int64, Int64, VoidPtr)
442__OMP_RTL(__kmpc_task_allow_completion_event, false, VoidPtr, IdentPtr,
443          /* Int */ Int32, /* kmp_task_t */ VoidPtr)
444
445/// OpenMP Device runtime functions
446__OMP_RTL(__kmpc_target_init, false, Int32, IdentPtr, Int8, Int1, Int1)
447__OMP_RTL(__kmpc_target_deinit, false, Void, IdentPtr, Int8, Int1)
448__OMP_RTL(__kmpc_kernel_prepare_parallel, false, Void, VoidPtr)
449__OMP_RTL(__kmpc_parallel_51, false, Void, IdentPtr, Int32, Int32, Int32, Int32,
450          VoidPtr, VoidPtr, VoidPtrPtr, SizeTy)
451__OMP_RTL(__kmpc_kernel_parallel, false, Int1, VoidPtrPtr)
452__OMP_RTL(__kmpc_kernel_end_parallel, false, Void, )
453__OMP_RTL(__kmpc_serialized_parallel, false, Void, IdentPtr, Int32)
454__OMP_RTL(__kmpc_end_serialized_parallel, false, Void, IdentPtr, Int32)
455__OMP_RTL(__kmpc_shuffle_int32, false, Int32, Int32, Int16, Int16)
456__OMP_RTL(__kmpc_nvptx_parallel_reduce_nowait_v2, false, Int32, IdentPtr, Int32,
457          Int32, SizeTy, VoidPtr, ShuffleReducePtr, InterWarpCopyPtr)
458__OMP_RTL(__kmpc_nvptx_end_reduce_nowait, false, Void, Int32)
459__OMP_RTL(__kmpc_nvptx_teams_reduce_nowait_v2, false, Int32, IdentPtr, Int32,
460          VoidPtr, Int32, VoidPtr, ShuffleReducePtr, InterWarpCopyPtr,
461          GlobalListPtr, GlobalListPtr, GlobalListPtr, GlobalListPtr)
462
463__OMP_RTL(__kmpc_shuffle_int64, false, Int64, Int64, Int16, Int16)
464
465__OMP_RTL(__kmpc_alloc_shared, false, VoidPtr, SizeTy)
466__OMP_RTL(__kmpc_free_shared, false, Void, VoidPtr, SizeTy)
467__OMP_RTL(__kmpc_begin_sharing_variables, false, Void, VoidPtrPtrPtr, SizeTy)
468__OMP_RTL(__kmpc_end_sharing_variables, false, Void, )
469__OMP_RTL(__kmpc_get_shared_variables, false, Void, VoidPtrPtrPtr)
470__OMP_RTL(__kmpc_parallel_level, false, Int8, )
471__OMP_RTL(__kmpc_is_spmd_exec_mode, false, Int8, )
472__OMP_RTL(__kmpc_barrier_simple_spmd, false, Void, IdentPtr, Int32)
473__OMP_RTL(__kmpc_barrier_simple_generic, false, Void, IdentPtr, Int32)
474
475__OMP_RTL(__kmpc_warp_active_thread_mask, false, Int64,)
476__OMP_RTL(__kmpc_syncwarp, false, Void, Int64)
477
478__OMP_RTL(__kmpc_is_generic_main_thread_id, false, Int8, Int32)
479
480__OMP_RTL(__last, false, Void, )
481
482#undef __OMP_RTL
483#undef OMP_RTL
484
485#define ParamAttrs(...) ArrayRef<AttributeSet>({__VA_ARGS__})
486#define EnumAttr(Kind) Attribute::get(Ctx, Attribute::AttrKind::Kind)
487#define EnumAttrInt(Kind, N) Attribute::get(Ctx, Attribute::AttrKind::Kind, N)
488#define AllocSizeAttr(N, M) Attribute::getWithAllocSizeArgs(Ctx, N, M)
489#define AttributeSet(...)                                                      \
490  AttributeSet::get(Ctx, ArrayRef<Attribute>({__VA_ARGS__}))
491
492#ifndef OMP_ATTRS_SET
493#define OMP_ATTRS_SET(VarName, AttrSet)
494#endif
495
496#define __OMP_ATTRS_SET(VarName, AttrSet) OMP_ATTRS_SET(VarName, AttrSet)
497
498__OMP_ATTRS_SET(GetterAttrs,
499                OptimisticAttributes
500                    ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(ReadOnly),
501                                   EnumAttr(NoSync), EnumAttr(NoFree),
502                                   EnumAttr(InaccessibleMemOnly),
503                                   EnumAttr(WillReturn))
504                    : AttributeSet(EnumAttr(NoUnwind)))
505__OMP_ATTRS_SET(GetterArgWriteAttrs,
506                OptimisticAttributes
507                    ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync),
508                                   EnumAttr(NoFree),
509                                   EnumAttr(InaccessibleMemOrArgMemOnly),
510                                   EnumAttr(WillReturn))
511                    : AttributeSet(EnumAttr(NoUnwind)))
512__OMP_ATTRS_SET(SetterAttrs,
513                OptimisticAttributes
514                    ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(WriteOnly),
515                                   EnumAttr(NoSync), EnumAttr(NoFree),
516                                   EnumAttr(InaccessibleMemOnly),
517                                   EnumAttr(WillReturn))
518                    : AttributeSet(EnumAttr(NoUnwind)))
519
520__OMP_ATTRS_SET(DefaultAttrs,
521                OptimisticAttributes
522                    ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync),
523                                   EnumAttr(WillReturn), EnumAttr(NoFree))
524                    : AttributeSet(EnumAttr(NoUnwind)))
525
526__OMP_ATTRS_SET(BarrierAttrs,
527                OptimisticAttributes
528                    ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(Convergent))
529                    : AttributeSet(EnumAttr(NoUnwind), EnumAttr(Convergent)))
530
531__OMP_ATTRS_SET(InaccessibleArgOnlyAttrs,
532                OptimisticAttributes
533                    ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync),
534                                   EnumAttr(InaccessibleMemOrArgMemOnly),
535                                   EnumAttr(WillReturn), EnumAttr(NoFree))
536                    : AttributeSet(EnumAttr(NoUnwind)))
537
538__OMP_ATTRS_SET(NoCaptureAttrs,
539                OptimisticAttributes
540                    ? AttributeSet(EnumAttr(NoCapture))
541                    : AttributeSet(EnumAttr(NoCapture)))
542
543__OMP_ATTRS_SET(AlwaysInlineAttrs,
544                OptimisticAttributes
545                    ? AttributeSet(EnumAttr(AlwaysInline))
546                    : AttributeSet(EnumAttr(AlwaysInline)))
547
548#if 0
549__OMP_ATTRS_SET(InaccessibleOnlyAttrs,
550                OptimisticAttributes
551                    ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync),
552                                   EnumAttr(InaccessibleMemOnly),
553                                   EnumAttr(WillReturn), EnumAttr(NoFree))
554                    : AttributeSet(EnumAttr(NoUnwind)))
555#endif
556
557__OMP_ATTRS_SET(AllocAttrs,
558                OptimisticAttributes
559                    ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync),
560                                   EnumAttr(WillReturn))
561                    : AttributeSet(EnumAttr(NoUnwind)))
562
563__OMP_ATTRS_SET(ForkAttrs, OptimisticAttributes
564                               ? AttributeSet(EnumAttr(NoUnwind))
565                               : AttributeSet(EnumAttr(NoUnwind)))
566
567__OMP_ATTRS_SET(ReadOnlyPtrAttrs,
568                OptimisticAttributes
569                    ? AttributeSet(EnumAttr(ReadOnly), EnumAttr(NoFree),
570                                   EnumAttr(NoCapture))
571                    : AttributeSet())
572
573__OMP_ATTRS_SET(DeviceAllocAttrs,
574                OptimisticAttributes
575                    ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync))
576                    : AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync)))
577
578#if 0
579__OMP_ATTRS_SET(WriteOnlyPtrAttrs,
580                OptimisticAttributes
581                    ? AttributeSet(EnumAttr(WriteOnly), EnumAttr(NoFree),
582                                   EnumAttr(NoCapture))
583                    : AttributeSet())
584#endif
585
586__OMP_ATTRS_SET(ArgPtrAttrs,
587                OptimisticAttributes
588                    ? AttributeSet(EnumAttr(NoCapture), EnumAttr(NoFree))
589                    : AttributeSet())
590
591__OMP_ATTRS_SET(ReturnPtrAttrs,
592                OptimisticAttributes
593                    ? AttributeSet(EnumAttr(NoAlias))
594                    : AttributeSet())
595
596#if 0
597__OMP_ATTRS_SET(ReturnAlignedPtrAttrs,
598                OptimisticAttributes
599                    ? AttributeSet(EnumAttr(NoAlias), EnumAttrInt(Alignment, 8),
600                                   EnumAttrInt(DereferenceableOrNull, 8))
601                    : AttributeSet())
602#endif
603
604#undef __OMP_ATTRS_SET
605#undef OMP_ATTRS_SET
606
607#ifndef OMP_RTL_ATTRS
608#define OMP_RTL_ATTRS(Enum, FnAttrSet, RetAttrSet, ArgAttrSets)
609#endif
610
611#define __OMP_RTL_ATTRS(Name, FnAttrSet, RetAttrSet, ArgAttrSets)              \
612  OMP_RTL_ATTRS(OMPRTL_##Name, FnAttrSet, RetAttrSet, ArgAttrSets)
613
614__OMP_RTL_ATTRS(__kmpc_barrier, BarrierAttrs, AttributeSet(),
615                ParamAttrs(ReadOnlyPtrAttrs))
616__OMP_RTL_ATTRS(__kmpc_barrier_simple_spmd, BarrierAttrs, AttributeSet(),
617                ParamAttrs(ReadOnlyPtrAttrs))
618__OMP_RTL_ATTRS(__kmpc_barrier_simple_generic, BarrierAttrs, AttributeSet(),
619                ParamAttrs(ReadOnlyPtrAttrs))
620__OMP_RTL_ATTRS(__kmpc_warp_active_thread_mask, BarrierAttrs, AttributeSet(),
621                ParamAttrs())
622__OMP_RTL_ATTRS(__kmpc_syncwarp, BarrierAttrs, AttributeSet(), ParamAttrs())
623__OMP_RTL_ATTRS(__kmpc_cancel, InaccessibleArgOnlyAttrs, AttributeSet(),
624                ParamAttrs(ReadOnlyPtrAttrs))
625__OMP_RTL_ATTRS(__kmpc_cancel_barrier, BarrierAttrs, AttributeSet(),
626                ParamAttrs(ReadOnlyPtrAttrs))
627__OMP_RTL_ATTRS(__kmpc_flush, BarrierAttrs, AttributeSet(),
628                ParamAttrs(ReadOnlyPtrAttrs))
629__OMP_RTL_ATTRS(__kmpc_global_thread_num, GetterAttrs, AttributeSet(),
630                ParamAttrs(ReadOnlyPtrAttrs))
631__OMP_RTL_ATTRS(__kmpc_fork_call, ForkAttrs, AttributeSet(),
632                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ReadOnlyPtrAttrs))
633__OMP_RTL_ATTRS(__kmpc_omp_taskwait, BarrierAttrs, AttributeSet(),
634                ParamAttrs(ReadOnlyPtrAttrs))
635__OMP_RTL_ATTRS(__kmpc_omp_taskyield, InaccessibleArgOnlyAttrs, AttributeSet(),
636                ParamAttrs(ReadOnlyPtrAttrs))
637__OMP_RTL_ATTRS(__kmpc_push_num_threads, InaccessibleArgOnlyAttrs,
638                AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs))
639__OMP_RTL_ATTRS(__kmpc_push_proc_bind, InaccessibleArgOnlyAttrs, AttributeSet(),
640                ParamAttrs(ReadOnlyPtrAttrs))
641__OMP_RTL_ATTRS(__kmpc_serialized_parallel, InaccessibleArgOnlyAttrs,
642                AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs))
643__OMP_RTL_ATTRS(__kmpc_end_serialized_parallel, InaccessibleArgOnlyAttrs,
644                AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs))
645__OMP_RTL_ATTRS(__kmpc_omp_reg_task_with_affinity, DefaultAttrs, AttributeSet(),
646                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ReadOnlyPtrAttrs,
647                           AttributeSet(), ReadOnlyPtrAttrs))
648
649__OMP_RTL_ATTRS(__kmpc_get_hardware_num_blocks, GetterAttrs, AttributeSet(), ParamAttrs())
650__OMP_RTL_ATTRS(__kmpc_get_hardware_num_threads_in_block, GetterAttrs, AttributeSet(), ParamAttrs())
651__OMP_RTL_ATTRS(__kmpc_get_warp_size, GetterAttrs, AttributeSet(), ParamAttrs())
652
653__OMP_RTL_ATTRS(omp_get_thread_num, GetterAttrs, AttributeSet(), ParamAttrs())
654__OMP_RTL_ATTRS(omp_get_num_threads, GetterAttrs, AttributeSet(), ParamAttrs())
655__OMP_RTL_ATTRS(omp_get_max_threads, GetterAttrs, AttributeSet(), ParamAttrs())
656__OMP_RTL_ATTRS(omp_in_parallel, GetterAttrs, AttributeSet(), ParamAttrs())
657__OMP_RTL_ATTRS(omp_get_dynamic, GetterAttrs, AttributeSet(), ParamAttrs())
658__OMP_RTL_ATTRS(omp_get_cancellation, GetterAttrs, AttributeSet(), ParamAttrs())
659__OMP_RTL_ATTRS(omp_get_nested, GetterAttrs, AttributeSet(), ParamAttrs())
660__OMP_RTL_ATTRS(
661    omp_get_schedule, GetterArgWriteAttrs, AttributeSet(),
662    ParamAttrs(AttributeSet(EnumAttr(NoCapture), EnumAttr(WriteOnly)),
663               AttributeSet(EnumAttr(NoCapture), EnumAttr(WriteOnly))))
664__OMP_RTL_ATTRS(omp_get_thread_limit, GetterAttrs, AttributeSet(), ParamAttrs())
665__OMP_RTL_ATTRS(omp_get_supported_active_levels, GetterAttrs, AttributeSet(),
666                ParamAttrs())
667__OMP_RTL_ATTRS(omp_get_max_active_levels, GetterAttrs, AttributeSet(),
668                ParamAttrs())
669__OMP_RTL_ATTRS(omp_get_level, GetterAttrs, AttributeSet(), ParamAttrs())
670__OMP_RTL_ATTRS(omp_get_ancestor_thread_num, GetterAttrs, AttributeSet(),
671                ParamAttrs())
672__OMP_RTL_ATTRS(omp_get_team_size, GetterAttrs, AttributeSet(), ParamAttrs())
673__OMP_RTL_ATTRS(omp_get_active_level, GetterAttrs, AttributeSet(), ParamAttrs())
674__OMP_RTL_ATTRS(omp_in_final, GetterAttrs, AttributeSet(), ParamAttrs())
675__OMP_RTL_ATTRS(omp_get_proc_bind, GetterAttrs, AttributeSet(), ParamAttrs())
676__OMP_RTL_ATTRS(omp_get_num_places, GetterAttrs, AttributeSet(), ParamAttrs())
677__OMP_RTL_ATTRS(omp_get_num_procs, GetterAttrs, AttributeSet(), ParamAttrs())
678__OMP_RTL_ATTRS(omp_get_place_proc_ids, GetterArgWriteAttrs, AttributeSet(),
679                ParamAttrs(AttributeSet(), AttributeSet(EnumAttr(NoCapture),
680                                                        EnumAttr(WriteOnly))))
681__OMP_RTL_ATTRS(omp_get_place_num, GetterAttrs, AttributeSet(), ParamAttrs())
682__OMP_RTL_ATTRS(omp_get_partition_num_places, GetterAttrs, AttributeSet(),
683                ParamAttrs())
684__OMP_RTL_ATTRS(omp_get_partition_place_nums, GetterAttrs, AttributeSet(),
685                ParamAttrs())
686__OMP_RTL_ATTRS(omp_get_wtime, GetterAttrs, AttributeSet(), ParamAttrs())
687
688__OMP_RTL_ATTRS(omp_set_num_threads, SetterAttrs, AttributeSet(), ParamAttrs())
689__OMP_RTL_ATTRS(omp_set_dynamic, SetterAttrs, AttributeSet(), ParamAttrs())
690__OMP_RTL_ATTRS(omp_set_nested, SetterAttrs, AttributeSet(), ParamAttrs())
691__OMP_RTL_ATTRS(omp_set_schedule, SetterAttrs, AttributeSet(), ParamAttrs())
692__OMP_RTL_ATTRS(omp_set_max_active_levels, SetterAttrs, AttributeSet(),
693                ParamAttrs())
694
695__OMP_RTL_ATTRS(__kmpc_master, InaccessibleArgOnlyAttrs, AttributeSet(),
696                ParamAttrs(ReadOnlyPtrAttrs))
697__OMP_RTL_ATTRS(__kmpc_end_master, InaccessibleArgOnlyAttrs, AttributeSet(),
698                ParamAttrs(ReadOnlyPtrAttrs))
699__OMP_RTL_ATTRS(__kmpc_masked, InaccessibleArgOnlyAttrs, AttributeSet(),
700                ParamAttrs(ReadOnlyPtrAttrs))
701__OMP_RTL_ATTRS(__kmpc_end_masked, InaccessibleArgOnlyAttrs, AttributeSet(),
702                ParamAttrs(ReadOnlyPtrAttrs))
703__OMP_RTL_ATTRS(__kmpc_critical, BarrierAttrs, AttributeSet(),
704                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet()))
705__OMP_RTL_ATTRS(__kmpc_critical_with_hint, BarrierAttrs, AttributeSet(),
706                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
707                           AttributeSet()))
708__OMP_RTL_ATTRS(__kmpc_end_critical, BarrierAttrs, AttributeSet(),
709                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet()))
710
711__OMP_RTL_ATTRS(__kmpc_begin, DefaultAttrs, AttributeSet(),
712                ParamAttrs(ReadOnlyPtrAttrs))
713__OMP_RTL_ATTRS(__kmpc_end, DefaultAttrs, AttributeSet(),
714                ParamAttrs(ReadOnlyPtrAttrs))
715
716__OMP_RTL_ATTRS(__kmpc_reduce, BarrierAttrs, AttributeSet(),
717                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
718                           AttributeSet(), ReadOnlyPtrAttrs, AttributeSet()))
719__OMP_RTL_ATTRS(__kmpc_reduce_nowait, BarrierAttrs, AttributeSet(),
720                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
721                           AttributeSet(), ReadOnlyPtrAttrs, AttributeSet()))
722__OMP_RTL_ATTRS(__kmpc_end_reduce, BarrierAttrs, AttributeSet(),
723                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet()))
724__OMP_RTL_ATTRS(__kmpc_end_reduce_nowait, BarrierAttrs, AttributeSet(),
725                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet()))
726
727__OMP_RTL_ATTRS(__kmpc_ordered, BarrierAttrs, AttributeSet(),
728                ParamAttrs(ReadOnlyPtrAttrs))
729__OMP_RTL_ATTRS(__kmpc_end_ordered, BarrierAttrs, AttributeSet(),
730                ParamAttrs(ReadOnlyPtrAttrs))
731
732__OMP_RTL_ATTRS(__kmpc_for_static_init_4, GetterArgWriteAttrs, AttributeSet(),
733                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
734                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
735                           AttributeSet(), AttributeSet()))
736__OMP_RTL_ATTRS(__kmpc_for_static_init_4u, GetterArgWriteAttrs, AttributeSet(),
737                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
738                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
739                           AttributeSet(), AttributeSet()))
740__OMP_RTL_ATTRS(__kmpc_for_static_init_8, GetterArgWriteAttrs, AttributeSet(),
741                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
742                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
743                           AttributeSet(), AttributeSet()))
744__OMP_RTL_ATTRS(__kmpc_for_static_init_8u, GetterArgWriteAttrs, AttributeSet(),
745                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
746                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
747                           AttributeSet(), AttributeSet()))
748__OMP_RTL_ATTRS(__kmpc_for_static_fini, InaccessibleArgOnlyAttrs,
749                AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs))
750__OMP_RTL_ATTRS(__kmpc_distribute_static_init_4, GetterArgWriteAttrs,
751                AttributeSet(),
752                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
753                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
754                           AttributeSet(), AttributeSet()))
755__OMP_RTL_ATTRS(__kmpc_distribute_static_init_4u, GetterArgWriteAttrs,
756                AttributeSet(),
757                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
758                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
759                           AttributeSet(), AttributeSet()))
760__OMP_RTL_ATTRS(__kmpc_distribute_static_init_8, GetterArgWriteAttrs,
761                AttributeSet(),
762                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
763                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
764                           AttributeSet(), AttributeSet()))
765__OMP_RTL_ATTRS(__kmpc_distribute_static_init_8u, GetterArgWriteAttrs,
766                AttributeSet(),
767                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
768                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
769                           AttributeSet(), AttributeSet()))
770__OMP_RTL_ATTRS(__kmpc_distribute_static_fini, InaccessibleArgOnlyAttrs,
771                AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs))
772__OMP_RTL_ATTRS(__kmpc_dist_dispatch_init_4, GetterArgWriteAttrs,
773                AttributeSet(),
774                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
775                           ArgPtrAttrs))
776__OMP_RTL_ATTRS(__kmpc_dist_dispatch_init_4u, GetterArgWriteAttrs,
777                AttributeSet(),
778                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
779                           ArgPtrAttrs))
780__OMP_RTL_ATTRS(__kmpc_dist_dispatch_init_8, GetterArgWriteAttrs,
781                AttributeSet(),
782                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
783                           ArgPtrAttrs))
784__OMP_RTL_ATTRS(__kmpc_dist_dispatch_init_8u, GetterArgWriteAttrs,
785                AttributeSet(),
786                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
787                           ArgPtrAttrs))
788__OMP_RTL_ATTRS(__kmpc_dispatch_init_4, GetterArgWriteAttrs, AttributeSet(),
789                ParamAttrs(ReadOnlyPtrAttrs))
790__OMP_RTL_ATTRS(__kmpc_dispatch_init_4u, GetterArgWriteAttrs, AttributeSet(),
791                ParamAttrs(ReadOnlyPtrAttrs))
792__OMP_RTL_ATTRS(__kmpc_dispatch_init_8, GetterArgWriteAttrs, AttributeSet(),
793                ParamAttrs(ReadOnlyPtrAttrs))
794__OMP_RTL_ATTRS(__kmpc_dispatch_init_8u, GetterArgWriteAttrs, AttributeSet(),
795                ParamAttrs(ReadOnlyPtrAttrs))
796__OMP_RTL_ATTRS(__kmpc_dispatch_next_4, GetterArgWriteAttrs, AttributeSet(),
797                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ArgPtrAttrs,
798                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs))
799__OMP_RTL_ATTRS(__kmpc_dispatch_next_4u, GetterArgWriteAttrs, AttributeSet(),
800                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ArgPtrAttrs,
801                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs))
802__OMP_RTL_ATTRS(__kmpc_dispatch_next_8, GetterArgWriteAttrs, AttributeSet(),
803                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ArgPtrAttrs,
804                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs))
805__OMP_RTL_ATTRS(__kmpc_dispatch_next_8u, GetterArgWriteAttrs, AttributeSet(),
806                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ArgPtrAttrs,
807                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs))
808__OMP_RTL_ATTRS(__kmpc_dispatch_fini_4, InaccessibleArgOnlyAttrs,
809                AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs))
810__OMP_RTL_ATTRS(__kmpc_dispatch_fini_4u, InaccessibleArgOnlyAttrs,
811                AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs))
812__OMP_RTL_ATTRS(__kmpc_dispatch_fini_8, InaccessibleArgOnlyAttrs,
813                AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs))
814__OMP_RTL_ATTRS(__kmpc_dispatch_fini_8u, InaccessibleArgOnlyAttrs,
815                AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs))
816__OMP_RTL_ATTRS(__kmpc_team_static_init_4, GetterArgWriteAttrs, AttributeSet(),
817                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ArgPtrAttrs,
818                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs))
819__OMP_RTL_ATTRS(__kmpc_team_static_init_4u, GetterArgWriteAttrs, AttributeSet(),
820                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ArgPtrAttrs,
821                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs))
822__OMP_RTL_ATTRS(__kmpc_team_static_init_8, GetterArgWriteAttrs, AttributeSet(),
823                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ArgPtrAttrs,
824                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs))
825__OMP_RTL_ATTRS(__kmpc_team_static_init_8u, GetterArgWriteAttrs, AttributeSet(),
826                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ArgPtrAttrs,
827                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs))
828__OMP_RTL_ATTRS(__kmpc_dist_for_static_init_4, GetterArgWriteAttrs,
829                AttributeSet(),
830                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
831                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
832                           ArgPtrAttrs))
833__OMP_RTL_ATTRS(__kmpc_dist_for_static_init_4u, GetterArgWriteAttrs,
834                AttributeSet(),
835                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
836                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
837                           ArgPtrAttrs))
838__OMP_RTL_ATTRS(__kmpc_dist_for_static_init_8, GetterArgWriteAttrs,
839                AttributeSet(),
840                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
841                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
842                           ArgPtrAttrs))
843__OMP_RTL_ATTRS(__kmpc_dist_for_static_init_8u, GetterArgWriteAttrs,
844                AttributeSet(),
845                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
846                           ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
847                           ArgPtrAttrs))
848
849__OMP_RTL_ATTRS(__kmpc_single, BarrierAttrs, AttributeSet(),
850                ParamAttrs(ReadOnlyPtrAttrs))
851__OMP_RTL_ATTRS(__kmpc_end_single, BarrierAttrs, AttributeSet(),
852                ParamAttrs(ReadOnlyPtrAttrs))
853
854__OMP_RTL_ATTRS(__kmpc_omp_task_alloc, DefaultAttrs, ReturnPtrAttrs,
855                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
856                           AttributeSet(), AttributeSet(), ReadOnlyPtrAttrs))
857__OMP_RTL_ATTRS(__kmpc_omp_task, DefaultAttrs, AttributeSet(),
858                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet()))
859__OMP_RTL_ATTRS(__kmpc_end_taskgroup, BarrierAttrs, AttributeSet(),
860                ParamAttrs(ReadOnlyPtrAttrs))
861__OMP_RTL_ATTRS(__kmpc_taskgroup, BarrierAttrs, AttributeSet(),
862                ParamAttrs(ReadOnlyPtrAttrs))
863__OMP_RTL_ATTRS(__kmpc_omp_task_begin_if0, DefaultAttrs, AttributeSet(),
864                ParamAttrs(ReadOnlyPtrAttrs))
865__OMP_RTL_ATTRS(__kmpc_omp_task_complete_if0, DefaultAttrs, AttributeSet(),
866                ParamAttrs(ReadOnlyPtrAttrs))
867__OMP_RTL_ATTRS(__kmpc_omp_task_with_deps, DefaultAttrs, AttributeSet(),
868                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
869                           AttributeSet(), ReadOnlyPtrAttrs, AttributeSet(),
870                           ReadOnlyPtrAttrs))
871__OMP_RTL_ATTRS(__kmpc_taskloop, DefaultAttrs, AttributeSet(),
872                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
873                           AttributeSet(), ArgPtrAttrs, ArgPtrAttrs,
874                           AttributeSet(), AttributeSet(), AttributeSet(),
875                           AttributeSet(), AttributeSet()))
876__OMP_RTL_ATTRS(__kmpc_omp_target_task_alloc, DefaultAttrs, ReturnPtrAttrs,
877                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
878                           AttributeSet(), AttributeSet(), ReadOnlyPtrAttrs,
879                           AttributeSet()))
880__OMP_RTL_ATTRS(__kmpc_taskred_modifier_init, DefaultAttrs, ReturnPtrAttrs,
881                ParamAttrs(ReadOnlyPtrAttrs))
882__OMP_RTL_ATTRS(__kmpc_taskred_init, DefaultAttrs, AttributeSet(), ParamAttrs())
883__OMP_RTL_ATTRS(__kmpc_task_reduction_modifier_fini, BarrierAttrs,
884                AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs))
885__OMP_RTL_ATTRS(__kmpc_task_reduction_get_th_data, DefaultAttrs, ReturnPtrAttrs,
886                ParamAttrs())
887__OMP_RTL_ATTRS(__kmpc_task_reduction_init, DefaultAttrs, ReturnPtrAttrs,
888                ParamAttrs())
889__OMP_RTL_ATTRS(__kmpc_task_reduction_modifier_init, DefaultAttrs,
890                ReturnPtrAttrs, ParamAttrs())
891__OMP_RTL_ATTRS(__kmpc_proxy_task_completed_ooo, DefaultAttrs, AttributeSet(),
892                ParamAttrs())
893
894__OMP_RTL_ATTRS(__kmpc_omp_wait_deps, BarrierAttrs, AttributeSet(),
895                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
896                           ReadOnlyPtrAttrs))
897__OMP_RTL_ATTRS(__kmpc_cancellationpoint, DefaultAttrs, AttributeSet(),
898                ParamAttrs(ReadOnlyPtrAttrs))
899
900__OMP_RTL_ATTRS(__kmpc_fork_teams, ForkAttrs, AttributeSet(),
901                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ReadOnlyPtrAttrs))
902__OMP_RTL_ATTRS(__kmpc_push_num_teams, InaccessibleArgOnlyAttrs, AttributeSet(),
903                ParamAttrs(ReadOnlyPtrAttrs))
904
905__OMP_RTL_ATTRS(__kmpc_copyprivate, DefaultAttrs, AttributeSet(),
906                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
907                           ReadOnlyPtrAttrs))
908__OMP_RTL_ATTRS(__kmpc_threadprivate_cached, DefaultAttrs, ReturnPtrAttrs,
909                ParamAttrs(ReadOnlyPtrAttrs))
910__OMP_RTL_ATTRS(__kmpc_threadprivate_register, DefaultAttrs, AttributeSet(),
911                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ReadOnlyPtrAttrs,
912                           ReadOnlyPtrAttrs, ReadOnlyPtrAttrs))
913
914__OMP_RTL_ATTRS(__kmpc_doacross_init, BarrierAttrs, AttributeSet(),
915                ParamAttrs(ReadOnlyPtrAttrs))
916__OMP_RTL_ATTRS(__kmpc_doacross_post, BarrierAttrs, AttributeSet(),
917                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ReadOnlyPtrAttrs))
918__OMP_RTL_ATTRS(__kmpc_doacross_wait, BarrierAttrs, AttributeSet(),
919                ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ReadOnlyPtrAttrs))
920__OMP_RTL_ATTRS(__kmpc_doacross_fini, BarrierAttrs, AttributeSet(),
921                ParamAttrs(ReadOnlyPtrAttrs))
922
923__OMP_RTL_ATTRS(__kmpc_alloc_shared, AttributeSet(
924  EnumAttr(NoUnwind),
925  EnumAttr(NoSync),
926  AllocSizeAttr(0, None)), ReturnPtrAttrs, ParamAttrs())
927__OMP_RTL_ATTRS(__kmpc_free_shared, DeviceAllocAttrs, AttributeSet(),
928                ParamAttrs(NoCaptureAttrs))
929
930__OMP_RTL_ATTRS(__kmpc_alloc, DefaultAttrs, ReturnPtrAttrs, ParamAttrs())
931__OMP_RTL_ATTRS(__kmpc_aligned_alloc, DefaultAttrs, ReturnPtrAttrs,
932                ParamAttrs())
933__OMP_RTL_ATTRS(__kmpc_free, AllocAttrs, AttributeSet(), ParamAttrs())
934
935__OMP_RTL_ATTRS(__kmpc_init_allocator, DefaultAttrs, ReturnPtrAttrs,
936                ParamAttrs())
937__OMP_RTL_ATTRS(__kmpc_destroy_allocator, AllocAttrs, AttributeSet(),
938                ParamAttrs())
939
940__OMP_RTL_ATTRS(__kmpc_push_target_tripcount_mapper, SetterAttrs,
941                AttributeSet(), ParamAttrs())
942__OMP_RTL_ATTRS(__tgt_target_mapper, ForkAttrs, AttributeSet(), ParamAttrs())
943__OMP_RTL_ATTRS(__tgt_target_nowait_mapper, ForkAttrs, AttributeSet(),
944                ParamAttrs())
945__OMP_RTL_ATTRS(__tgt_target_teams_mapper, ForkAttrs, AttributeSet(),
946                ParamAttrs())
947__OMP_RTL_ATTRS(__tgt_target_teams_nowait_mapper, ForkAttrs, AttributeSet(),
948                ParamAttrs())
949__OMP_RTL_ATTRS(__tgt_target_kernel, ForkAttrs, AttributeSet(),
950                ParamAttrs())
951__OMP_RTL_ATTRS(__tgt_target_kernel_nowait, ForkAttrs, AttributeSet(),
952                ParamAttrs())
953__OMP_RTL_ATTRS(__tgt_register_requires, ForkAttrs, AttributeSet(),
954                ParamAttrs())
955__OMP_RTL_ATTRS(__tgt_target_data_begin_mapper, ForkAttrs, AttributeSet(),
956                ParamAttrs())
957__OMP_RTL_ATTRS(__tgt_target_data_begin_nowait_mapper, ForkAttrs,
958                AttributeSet(), ParamAttrs())
959__OMP_RTL_ATTRS(__tgt_target_data_end_mapper, ForkAttrs, AttributeSet(),
960                ParamAttrs())
961__OMP_RTL_ATTRS(__tgt_target_data_end_nowait_mapper, ForkAttrs,
962                AttributeSet(), ParamAttrs())
963__OMP_RTL_ATTRS(__tgt_target_data_update_mapper, ForkAttrs, AttributeSet(),
964                ParamAttrs())
965__OMP_RTL_ATTRS(__tgt_target_data_update_nowait_mapper, ForkAttrs,
966                AttributeSet(), ParamAttrs())
967__OMP_RTL_ATTRS(__tgt_mapper_num_components, ForkAttrs, AttributeSet(),
968                ParamAttrs())
969__OMP_RTL_ATTRS(__tgt_push_mapper_component, ForkAttrs, AttributeSet(),
970                ParamAttrs())
971__OMP_RTL_ATTRS(__kmpc_task_allow_completion_event, DefaultAttrs,
972                ReturnPtrAttrs, ParamAttrs(ReadOnlyPtrAttrs))
973
974__OMP_RTL_ATTRS(__kmpc_parallel_51, AlwaysInlineAttrs, AttributeSet(),
975                ParamAttrs())
976
977#undef __OMP_RTL_ATTRS
978#undef OMP_RTL_ATTRS
979#undef AttributeSet
980#undef EnumAttr
981#undef EnumAttrInt
982#undef ParamAttrs
983#undef AllocSizeAttr
984
985///}
986
987/// KMP ident_t bit flags
988///
989/// In accordance with the values in `openmp/runtime/src/kmp.h`.
990///
991///{
992
993#ifndef OMP_IDENT_FLAG
994#define OMP_IDENT_FLAG(Enum, Str, Value)
995#endif
996
997#define __OMP_IDENT_FLAG(Name, Value)                                          \
998  OMP_IDENT_FLAG(OMP_IDENT_FLAG_##Name, #Name, Value)
999
1000__OMP_IDENT_FLAG(KMPC, 0x02)
1001__OMP_IDENT_FLAG(ATOMIC_REDUCE, 0x10)
1002__OMP_IDENT_FLAG(BARRIER_EXPL, 0x20)
1003__OMP_IDENT_FLAG(BARRIER_IMPL, 0x0040)
1004__OMP_IDENT_FLAG(BARRIER_IMPL_MASK, 0x01C0)
1005__OMP_IDENT_FLAG(BARRIER_IMPL_FOR, 0x0040)
1006__OMP_IDENT_FLAG(BARRIER_IMPL_SECTIONS, 0x00C0)
1007__OMP_IDENT_FLAG(BARRIER_IMPL_SINGLE, 0x0140)
1008__OMP_IDENT_FLAG(BARRIER_IMPL_WORKSHARE, 0x01C0)
1009
1010#undef __OMP_IDENT_FLAG
1011#undef OMP_IDENT_FLAG
1012
1013///}
1014
1015/// KMP cancel kind
1016///
1017///{
1018
1019#ifndef OMP_CANCEL_KIND
1020#define OMP_CANCEL_KIND(Enum, Str, DirectiveEnum, Value)
1021#endif
1022
1023#define __OMP_CANCEL_KIND(Name, Value)                                         \
1024  OMP_CANCEL_KIND(OMP_CANCEL_KIND_##Name, #Name, OMPD_##Name, Value)
1025
1026__OMP_CANCEL_KIND(parallel, 1)
1027__OMP_CANCEL_KIND(for, 2)
1028__OMP_CANCEL_KIND(sections, 3)
1029__OMP_CANCEL_KIND(taskgroup, 4)
1030
1031#undef __OMP_CANCEL_KIND
1032#undef OMP_CANCEL_KIND
1033
1034///}
1035
1036/// Default kinds
1037///
1038///{
1039
1040#ifndef OMP_DEFAULT_KIND
1041#define OMP_DEFAULT_KIND(Enum, Str)
1042#endif
1043
1044#define __OMP_DEFAULT_KIND(Name) OMP_DEFAULT_KIND(OMP_DEFAULT_##Name, #Name)
1045
1046__OMP_DEFAULT_KIND(none)
1047__OMP_DEFAULT_KIND(shared)
1048__OMP_DEFAULT_KIND(private)
1049__OMP_DEFAULT_KIND(firstprivate)
1050__OMP_DEFAULT_KIND(unknown)
1051
1052#undef __OMP_DEFAULT_KIND
1053#undef OMP_DEFAULT_KIND
1054
1055///}
1056
1057/// Proc bind kinds
1058///
1059///{
1060
1061#ifndef OMP_PROC_BIND_KIND
1062#define OMP_PROC_BIND_KIND(Enum, Str, Value)
1063#endif
1064
1065#define __OMP_PROC_BIND_KIND(Name, Value)                                      \
1066  OMP_PROC_BIND_KIND(OMP_PROC_BIND_##Name, #Name, Value)
1067
1068__OMP_PROC_BIND_KIND(master, 2)
1069__OMP_PROC_BIND_KIND(close, 3)
1070__OMP_PROC_BIND_KIND(spread, 4)
1071__OMP_PROC_BIND_KIND(primary, 5)
1072__OMP_PROC_BIND_KIND(default, 6)
1073__OMP_PROC_BIND_KIND(unknown, 7)
1074
1075#undef __OMP_PROC_BIND_KIND
1076#undef OMP_PROC_BIND_KIND
1077
1078///}
1079
1080/// OpenMP context related definitions:
1081///  - trait set selector
1082///  - trait selector
1083///  - trait property
1084///
1085///{
1086
1087#ifndef OMP_TRAIT_SET
1088#define OMP_TRAIT_SET(Enum, Str)
1089#endif
1090#ifndef OMP_TRAIT_SELECTOR
1091#define OMP_TRAIT_SELECTOR(Enum, TraitSetEnum, Str, RequiresProperty)
1092#endif
1093#ifndef OMP_TRAIT_PROPERTY
1094#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
1095#endif
1096#ifndef OMP_LAST_TRAIT_PROPERTY
1097#define OMP_LAST_TRAIT_PROPERTY(Enum)
1098#endif
1099
1100#define __OMP_TRAIT_SET(Name) OMP_TRAIT_SET(Name, #Name)
1101#define __OMP_TRAIT_SELECTOR(TraitSet, Name, RequiresProperty)                 \
1102  OMP_TRAIT_SELECTOR(TraitSet##_##Name, TraitSet, #Name, RequiresProperty)
1103#define __OMP_TRAIT_SELECTOR_AND_PROPERTY(TraitSet, Name)                      \
1104  OMP_TRAIT_SELECTOR(TraitSet##_##Name, TraitSet, #Name, false)                \
1105  OMP_TRAIT_PROPERTY(TraitSet##_##Name##_##Name, TraitSet, TraitSet##_##Name,  \
1106                     #Name)
1107#define __OMP_TRAIT_PROPERTY(TraitSet, TraitSelector, Name)                    \
1108  OMP_TRAIT_PROPERTY(TraitSet##_##TraitSelector##_##Name, TraitSet,            \
1109                     TraitSet##_##TraitSelector, #Name)
1110
1111// "invalid" must go first.
1112OMP_TRAIT_SET(invalid, "invalid")
1113OMP_TRAIT_SELECTOR(invalid, invalid, "invalid", false)
1114OMP_TRAIT_PROPERTY(invalid, invalid, invalid, "invalid")
1115
1116__OMP_TRAIT_SET(construct)
1117__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, target)
1118__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, teams)
1119__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, parallel)
1120__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, for)
1121__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, simd)
1122
1123__OMP_TRAIT_SET(device)
1124
1125__OMP_TRAIT_SELECTOR(device, kind, true)
1126
1127__OMP_TRAIT_PROPERTY(device, kind, host)
1128__OMP_TRAIT_PROPERTY(device, kind, nohost)
1129__OMP_TRAIT_PROPERTY(device, kind, cpu)
1130__OMP_TRAIT_PROPERTY(device, kind, gpu)
1131__OMP_TRAIT_PROPERTY(device, kind, fpga)
1132__OMP_TRAIT_PROPERTY(device, kind, any)
1133
1134__OMP_TRAIT_SELECTOR(device, arch, true)
1135
1136__OMP_TRAIT_PROPERTY(device, arch, arm)
1137__OMP_TRAIT_PROPERTY(device, arch, armeb)
1138__OMP_TRAIT_PROPERTY(device, arch, aarch64)
1139__OMP_TRAIT_PROPERTY(device, arch, aarch64_be)
1140__OMP_TRAIT_PROPERTY(device, arch, aarch64_32)
1141__OMP_TRAIT_PROPERTY(device, arch, ppc)
1142__OMP_TRAIT_PROPERTY(device, arch, ppcle)
1143__OMP_TRAIT_PROPERTY(device, arch, ppc64)
1144__OMP_TRAIT_PROPERTY(device, arch, ppc64le)
1145__OMP_TRAIT_PROPERTY(device, arch, x86)
1146__OMP_TRAIT_PROPERTY(device, arch, x86_64)
1147__OMP_TRAIT_PROPERTY(device, arch, amdgcn)
1148__OMP_TRAIT_PROPERTY(device, arch, nvptx)
1149__OMP_TRAIT_PROPERTY(device, arch, nvptx64)
1150
1151__OMP_TRAIT_SET(implementation)
1152
1153__OMP_TRAIT_SELECTOR(implementation, vendor, true)
1154
1155__OMP_TRAIT_PROPERTY(implementation, vendor, amd)
1156__OMP_TRAIT_PROPERTY(implementation, vendor, arm)
1157__OMP_TRAIT_PROPERTY(implementation, vendor, bsc)
1158__OMP_TRAIT_PROPERTY(implementation, vendor, cray)
1159__OMP_TRAIT_PROPERTY(implementation, vendor, fujitsu)
1160__OMP_TRAIT_PROPERTY(implementation, vendor, gnu)
1161__OMP_TRAIT_PROPERTY(implementation, vendor, ibm)
1162__OMP_TRAIT_PROPERTY(implementation, vendor, intel)
1163__OMP_TRAIT_PROPERTY(implementation, vendor, llvm)
1164__OMP_TRAIT_PROPERTY(implementation, vendor, nec)
1165__OMP_TRAIT_PROPERTY(implementation, vendor, nvidia)
1166__OMP_TRAIT_PROPERTY(implementation, vendor, pgi)
1167__OMP_TRAIT_PROPERTY(implementation, vendor, ti)
1168__OMP_TRAIT_PROPERTY(implementation, vendor, unknown)
1169
1170__OMP_TRAIT_SELECTOR(implementation, extension, true)
1171__OMP_TRAIT_PROPERTY(implementation, extension, match_all)
1172__OMP_TRAIT_PROPERTY(implementation, extension, match_any)
1173__OMP_TRAIT_PROPERTY(implementation, extension, match_none)
1174__OMP_TRAIT_PROPERTY(implementation, extension, disable_implicit_base)
1175__OMP_TRAIT_PROPERTY(implementation, extension, allow_templates)
1176__OMP_TRAIT_PROPERTY(implementation, extension, bind_to_declaration)
1177
1178__OMP_TRAIT_SET(user)
1179
1180__OMP_TRAIT_SELECTOR(user, condition, true)
1181
1182__OMP_TRAIT_PROPERTY(user, condition, true)
1183__OMP_TRAIT_PROPERTY(user, condition, false)
1184__OMP_TRAIT_PROPERTY(user, condition, unknown)
1185
1186__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, dispatch)
1187
1188// Note that we put isa last so that the other conditions are checked first.
1189// This allows us to issue warnings wrt. isa only if we match otherwise.
1190__OMP_TRAIT_SELECTOR(device, isa, true)
1191
1192// We use "__ANY" as a placeholder in the isa property to denote the
1193// conceptual "any", not the literal `any` used in kind. The string we
1194// we use is not important except that it will show up in diagnostics.
1195OMP_TRAIT_PROPERTY(device_isa___ANY, device, device_isa,
1196                   "<any, entirely target dependent>")
1197
1198
1199#undef OMP_TRAIT_SET
1200#undef __OMP_TRAIT_SET
1201///}
1202
1203/// Traits for the requires directive
1204///
1205/// These will (potentially) become trait selectors for the OpenMP context if
1206/// the OMP_REQUIRES_TRAIT macro is not defined.
1207///
1208///{
1209
1210#ifdef OMP_REQUIRES_TRAIT
1211#define __OMP_REQUIRES_TRAIT(Name)                                             \
1212  OMP_REQUIRES_TRAIT(OMP_REQUIRES_TRAIT_##Name, #Name)
1213#else
1214#define __OMP_REQUIRES_TRAIT(Name)                                             \
1215  __OMP_TRAIT_SELECTOR_AND_PROPERTY(implementation, Name)
1216#endif
1217
1218__OMP_REQUIRES_TRAIT(unified_address)
1219__OMP_REQUIRES_TRAIT(unified_shared_memory)
1220__OMP_REQUIRES_TRAIT(reverse_offload)
1221__OMP_REQUIRES_TRAIT(dynamic_allocators)
1222__OMP_REQUIRES_TRAIT(atomic_default_mem_order)
1223
1224OMP_LAST_TRAIT_PROPERTY(
1225    implementation_atomic_default_mem_order_atomic_default_mem_order)
1226
1227#undef __OMP_TRAIT_SELECTOR_AND_PROPERTY
1228#undef OMP_TRAIT_SELECTOR
1229#undef __OMP_TRAIT_SELECTOR
1230#undef OMP_TRAIT_PROPERTY
1231#undef OMP_LAST_TRAIT_PROPERTY
1232#undef __OMP_TRAIT_PROPERTY
1233#undef __OMP_REQUIRES_TRAIT
1234#undef OMP_REQUIRES_TRAIT
1235///}
1236
1237
1238/// Assumption clauses
1239///
1240///{
1241
1242#ifdef OMP_ASSUME_CLAUSE
1243#define __OMP_ASSUME_CLAUSE(Identifier, StartsWith, HasDirectiveList, HasExpression) \
1244OMP_ASSUME_CLAUSE(Identifier, StartsWith, HasDirectiveList, HasExpression)
1245#else
1246#define __OMP_ASSUME_CLAUSE(...)
1247#endif
1248
1249__OMP_ASSUME_CLAUSE(llvm::StringLiteral("ext_"), true, false, false)
1250__OMP_ASSUME_CLAUSE(llvm::StringLiteral("absent"), false, true, false)
1251__OMP_ASSUME_CLAUSE(llvm::StringLiteral("contains"), false, true, false)
1252__OMP_ASSUME_CLAUSE(llvm::StringLiteral("holds"), false, false, true)
1253__OMP_ASSUME_CLAUSE(llvm::StringLiteral("no_openmp"), false, false, false)
1254__OMP_ASSUME_CLAUSE(llvm::StringLiteral("no_openmp_routines"), false, false, false)
1255__OMP_ASSUME_CLAUSE(llvm::StringLiteral("no_parallelism"), false, false, false)
1256
1257#undef __OMP_ASSUME_CLAUSE
1258#undef OMP_ASSUME_CLAUSE
1259///}
1260