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