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