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