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)
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__OMP_RTL(__kmpc_get_max_team_threads, false, Int32, Int32)
232
233__OMP_RTL(omp_get_thread_num, false, Int32, )
234__OMP_RTL(omp_get_num_threads, false, Int32, )
235__OMP_RTL(omp_get_max_threads, false, Int32, )
236__OMP_RTL(omp_in_parallel, false, Int32, )
237__OMP_RTL(omp_get_dynamic, false, Int32, )
238__OMP_RTL(omp_get_cancellation, false, Int32, )
239__OMP_RTL(omp_get_nested, false, Int32, )
240__OMP_RTL(omp_get_schedule, false, Void, Int32Ptr, Int32Ptr)
241__OMP_RTL(kmp_get_schedule_8, false, Void, Int32Ptr, Int64Ptr)
242__OMP_RTL(omp_get_thread_limit, false, Int32, )
243__OMP_RTL(omp_get_supported_active_levels, false, Int32, )
244__OMP_RTL(omp_get_max_active_levels, false, Int32, )
245__OMP_RTL(omp_get_level, false, Int32, )
246__OMP_RTL(omp_get_ancestor_thread_num, false, Int32, Int32)
247__OMP_RTL(kmp_get_ancestor_thread_num_8, false, Int32, Int64)
248__OMP_RTL(omp_get_team_size, false, Int32, Int32)
249__OMP_RTL(kmp_get_team_size_8, false, Int32, Int64)
250__OMP_RTL(omp_get_active_level, false, Int32, )
251__OMP_RTL(omp_in_final, false, Int32, )
252__OMP_RTL(omp_get_proc_bind, false, Int32, )
253__OMP_RTL(omp_get_num_places, false, Int32, )
254__OMP_RTL(omp_get_num_procs, false, Int32, )
255__OMP_RTL(omp_get_place_proc_ids, false, Void, Int32, Int32Ptr)
256__OMP_RTL(kmp_get_place_proc_ids_8, false, Void, Int64, Int64Ptr)
257__OMP_RTL(omp_get_place_num, false, Int32, )
258__OMP_RTL(omp_get_partition_num_places, false, Int32, )
259__OMP_RTL(omp_get_partition_place_nums, false, Void, Int32Ptr)
260__OMP_RTL(kmp_get_partition_place_nums_8, false, Void, Int64Ptr)
261__OMP_RTL(omp_get_wtime, false, Double,)
262
263__OMP_RTL(omp_set_num_threads, false, Void, Int32)
264__OMP_RTL(kmp_set_num_threads_8, false, Void, Int64)
265__OMP_RTL(omp_set_dynamic, false, Void, Int32)
266__OMP_RTL(omp_set_nested, false, Void, Int32)
267__OMP_RTL(omp_set_schedule, false, Void, Int32, Int32)
268__OMP_RTL(kmp_set_schedule_8, false, Void, Int32, Int64)
269__OMP_RTL(omp_set_max_active_levels, false, Void, Int32)
270__OMP_RTL(kmp_set_max_active_levels_8, false, Void, Int64)
271
272__OMP_RTL(__kmpc_master, false, Int32, IdentPtr, Int32)
273__OMP_RTL(__kmpc_end_master, false, Void, IdentPtr, Int32)
274__OMP_RTL(__kmpc_masked, false, Int32, IdentPtr, Int32, Int32)
275__OMP_RTL(__kmpc_end_masked, false, Void, IdentPtr, Int32)
276__OMP_RTL(__kmpc_critical, false, Void, IdentPtr, Int32, KmpCriticalNamePtrTy)
277__OMP_RTL(__kmpc_critical_with_hint, false, Void, IdentPtr, Int32,
278 KmpCriticalNamePtrTy, Int32)
279__OMP_RTL(__kmpc_end_critical, false, Void, IdentPtr, Int32,
280 KmpCriticalNamePtrTy)
281
282__OMP_RTL(__kmpc_begin, false, Void, IdentPtr, Int32)
283__OMP_RTL(__kmpc_end, false, Void, IdentPtr)
284
285__OMP_RTL(__kmpc_reduce, false, Int32, IdentPtr, Int32, Int32, SizeTy, VoidPtr,
286 ReduceFunctionPtr, KmpCriticalNamePtrTy)
287__OMP_RTL(__kmpc_reduce_nowait, false, Int32, IdentPtr, Int32, Int32, SizeTy,
288 VoidPtr, ReduceFunctionPtr, KmpCriticalNamePtrTy)
289__OMP_RTL(__kmpc_end_reduce, false, Void, IdentPtr, Int32, KmpCriticalNamePtrTy)
290__OMP_RTL(__kmpc_end_reduce_nowait, false, Void, IdentPtr, Int32,
291 KmpCriticalNamePtrTy)
292
293__OMP_RTL(__kmpc_ordered, false, Void, IdentPtr, Int32)
294__OMP_RTL(__kmpc_end_ordered, false, Void, IdentPtr, Int32)
295
296__OMP_RTL(__kmpc_for_static_init_4, false, Void, IdentPtr, Int32, Int32,
297 Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
298__OMP_RTL(__kmpc_for_static_init_4u, false, Void, IdentPtr, Int32, Int32,
299 Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
300__OMP_RTL(__kmpc_for_static_init_8, false, Void, IdentPtr, Int32, Int32,
301 Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
302__OMP_RTL(__kmpc_for_static_init_8u, false, Void, IdentPtr, Int32, Int32,
303 Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
304__OMP_RTL(__kmpc_for_static_fini, false, Void, IdentPtr, Int32)
305__OMP_RTL(__kmpc_distribute_static_init_4, false, Void, IdentPtr, Int32, Int32,
306 Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
307__OMP_RTL(__kmpc_distribute_static_init_4u, false, Void, IdentPtr, Int32, Int32,
308 Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
309__OMP_RTL(__kmpc_distribute_static_init_8, false, Void, IdentPtr, Int32, Int32,
310 Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
311__OMP_RTL(__kmpc_distribute_static_init_8u, false, Void, IdentPtr, Int32, Int32,
312 Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
313__OMP_RTL(__kmpc_distribute_static_fini, false, Void, IdentPtr, Int32)
314__OMP_RTL(__kmpc_dist_dispatch_init_4, false, Void, IdentPtr, Int32, Int32,
315 Int32Ptr, Int32, Int32, Int32, Int32)
316__OMP_RTL(__kmpc_dist_dispatch_init_4u, false, Void, IdentPtr, Int32, Int32,
317 Int32Ptr, Int32, Int32, Int32, Int32)
318__OMP_RTL(__kmpc_dist_dispatch_init_8, false, Void, IdentPtr, Int32, Int32,
319 Int32Ptr, Int64, Int64, Int64, Int64)
320__OMP_RTL(__kmpc_dist_dispatch_init_8u, false, Void, IdentPtr, Int32, Int32,
321 Int32Ptr, Int64, Int64, Int64, Int64)
322__OMP_RTL(__kmpc_dispatch_init_4, false, Void, IdentPtr, Int32, Int32, Int32,
323 Int32, Int32, Int32)
324__OMP_RTL(__kmpc_dispatch_init_4u, false, Void, IdentPtr, Int32, Int32, Int32,
325 Int32, Int32, Int32)
326__OMP_RTL(__kmpc_dispatch_init_8, false, Void, IdentPtr, Int32, Int32, Int64,
327 Int64, Int64, Int64)
328__OMP_RTL(__kmpc_dispatch_init_8u, false, Void, IdentPtr, Int32, Int32, Int64,
329 Int64, Int64, Int64)
330__OMP_RTL(__kmpc_dispatch_next_4, false, Int32, IdentPtr, Int32, Int32Ptr,
331 Int32Ptr, Int32Ptr, Int32Ptr)
332__OMP_RTL(__kmpc_dispatch_next_4u, false, Int32, IdentPtr, Int32, Int32Ptr,
333 Int32Ptr, Int32Ptr, Int32Ptr)
334__OMP_RTL(__kmpc_dispatch_next_8, false, Int32, IdentPtr, Int32, Int32Ptr,
335 Int64Ptr, Int64Ptr, Int64Ptr)
336__OMP_RTL(__kmpc_dispatch_next_8u, false, Int32, IdentPtr, Int32, Int32Ptr,
337 Int64Ptr, Int64Ptr, Int64Ptr)
338__OMP_RTL(__kmpc_dispatch_fini_4, false, Void, IdentPtr, Int32)
339__OMP_RTL(__kmpc_dispatch_fini_4u, false, Void, IdentPtr, Int32)
340__OMP_RTL(__kmpc_dispatch_fini_8, false, Void, IdentPtr, Int32)
341__OMP_RTL(__kmpc_dispatch_fini_8u, false, Void, IdentPtr, Int32)
342__OMP_RTL(__kmpc_dispatch_deinit, false, Void, IdentPtr, Int32)
343__OMP_RTL(__kmpc_team_static_init_4, false, Void, IdentPtr, Int32, Int32Ptr,
344 Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
345__OMP_RTL(__kmpc_team_static_init_4u, false, Void, IdentPtr, Int32, Int32Ptr,
346 Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
347__OMP_RTL(__kmpc_team_static_init_8, false, Void, IdentPtr, Int32, Int32Ptr,
348 Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
349__OMP_RTL(__kmpc_team_static_init_8u, false, Void, IdentPtr, Int32, Int32Ptr,
350 Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
351__OMP_RTL(__kmpc_dist_for_static_init_4, false, Void, IdentPtr, Int32, Int32,
352 Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
353__OMP_RTL(__kmpc_dist_for_static_init_4u, false, Void, IdentPtr, Int32, Int32,
354 Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32Ptr, Int32, Int32)
355__OMP_RTL(__kmpc_dist_for_static_init_8, false, Void, IdentPtr, Int32, Int32,
356 Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
357__OMP_RTL(__kmpc_dist_for_static_init_8u, false, Void, IdentPtr, Int32, Int32,
358 Int32Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64Ptr, Int64, Int64)
359
360__OMP_RTL(__kmpc_single, false, Int32, IdentPtr, Int32)
361__OMP_RTL(__kmpc_end_single, false, Void, IdentPtr, Int32)
362
363__OMP_RTL(__kmpc_omp_task_alloc, false, /* kmp_task_t */ VoidPtr, IdentPtr,
364 Int32, Int32, SizeTy, SizeTy, TaskRoutineEntryPtr)
365__OMP_RTL(__kmpc_omp_task, false, Int32, IdentPtr, Int32,
366 /* kmp_task_t */ VoidPtr)
367__OMP_RTL(__kmpc_end_taskgroup, false, Void, IdentPtr, Int32)
368__OMP_RTL(__kmpc_taskgroup, false, Void, IdentPtr, Int32)
369__OMP_RTL(__kmpc_omp_task_begin_if0, false, Void, IdentPtr, Int32,
370 /* kmp_task_t */ VoidPtr)
371__OMP_RTL(__kmpc_omp_task_complete_if0, false, Void, IdentPtr, Int32,
372 /* kmp_tasK_t */ VoidPtr)
373__OMP_RTL(__kmpc_omp_task_with_deps, false, Int32, IdentPtr, Int32,
374 /* kmp_task_t */ VoidPtr, Int32,
375 /* kmp_depend_info_t */ VoidPtr, Int32,
376 /* kmp_depend_info_t */ VoidPtr)
377__OMP_RTL(__kmpc_taskloop, false, Void, IdentPtr, /* Int */ Int32, VoidPtr,
378 /* Int */ Int32, Int64Ptr, Int64Ptr, Int64, /* Int */ Int32,
379 /* Int */ Int32, Int64, VoidPtr)
380__OMP_RTL(__kmpc_taskloop_5, false, Void, IdentPtr, /* Int */ Int32, VoidPtr,
381 /* Int */ Int32, Int64Ptr, Int64Ptr, Int64, /* Int */ Int32,
382 /* Int */ Int32, Int64, Int32, VoidPtr)
383__OMP_RTL(__kmpc_omp_target_task_alloc, false, /* kmp_task_t */ VoidPtr,
384 IdentPtr, Int32, Int32, SizeTy, SizeTy, TaskRoutineEntryPtr, Int64)
385__OMP_RTL(__kmpc_taskred_modifier_init, false, /* kmp_taskgroup */ VoidPtr,
386 IdentPtr, /* Int */ Int32, /* Int */ Int32, /* Int */ Int32, VoidPtr)
387__OMP_RTL(__kmpc_taskred_init, false, /* kmp_taskgroup */ VoidPtr,
388 /* Int */ Int32, /* Int */ Int32, VoidPtr)
389__OMP_RTL(__kmpc_task_reduction_modifier_fini, false, Void, IdentPtr,
390 /* Int */ Int32, /* Int */ Int32)
391__OMP_RTL(__kmpc_task_reduction_get_th_data, false, VoidPtr, Int32, VoidPtr,
392 VoidPtr)
393__OMP_RTL(__kmpc_task_reduction_init, false, VoidPtr, Int32, Int32, VoidPtr)
394__OMP_RTL(__kmpc_task_reduction_modifier_init, false, VoidPtr, VoidPtr, Int32,
395 Int32, Int32, VoidPtr)
396__OMP_RTL(__kmpc_proxy_task_completed_ooo, false, Void, VoidPtr)
397
398__OMP_RTL(__kmpc_omp_wait_deps, false, Void, IdentPtr, Int32, Int32,
399 /* kmp_depend_info_t */ VoidPtr, Int32, VoidPtr)
400__OMP_RTL(__kmpc_omp_taskwait_deps_51, false, Void, IdentPtr, Int32, Int32,
401 /* kmp_depend_info_t */ VoidPtr, Int32, VoidPtr, Int32)
402__OMP_RTL(__kmpc_cancellationpoint, false, Int32, IdentPtr, Int32, Int32)
403
404__OMP_RTL(__kmpc_fork_teams, true, Void, IdentPtr, Int32, ParallelTaskPtr)
405__OMP_RTL(__kmpc_push_num_teams, false, Void, IdentPtr, Int32, Int32, Int32)
406__OMP_RTL(__kmpc_push_num_teams_51, false, Void, IdentPtr, Int32, Int32, Int32, Int32)
407__OMP_RTL(__kmpc_set_thread_limit, false, Void, IdentPtr, Int32, Int32)
408
409__OMP_RTL(__kmpc_copyprivate, false, Void, IdentPtr, Int32, SizeTy, VoidPtr,
410 CopyFunctionPtr, Int32)
411__OMP_RTL(__kmpc_threadprivate_cached, false, VoidPtr, IdentPtr, Int32, VoidPtr,
412 SizeTy, VoidPtrPtrPtr)
413__OMP_RTL(__kmpc_threadprivate_register, false, Void, IdentPtr, VoidPtr,
414 KmpcCtorPtr, KmpcCopyCtorPtr, KmpcDtorPtr)
415
416__OMP_RTL(__kmpc_doacross_init, false, Void, IdentPtr, Int32, Int32,
417 /* kmp_dim */ VoidPtr)
418__OMP_RTL(__kmpc_doacross_post, false, Void, IdentPtr, Int32, Int64Ptr)
419__OMP_RTL(__kmpc_doacross_wait, false, Void, IdentPtr, Int32, Int64Ptr)
420__OMP_RTL(__kmpc_doacross_fini, false, Void, IdentPtr, Int32)
421
422__OMP_RTL(__kmpc_alloc, false, VoidPtr, /* Int */ Int32, SizeTy, VoidPtr)
423__OMP_RTL(__kmpc_aligned_alloc, false, VoidPtr, /* Int */ Int32, SizeTy, SizeTy,
424 VoidPtr)
425__OMP_RTL(__kmpc_free, false, Void, /* Int */ Int32, VoidPtr, VoidPtr)
426
427__OMP_RTL(__tgt_interop_init, false, Void, IdentPtr, Int32, VoidPtrPtr, Int32,
428 Int32, Int32, VoidPtr, Int32)
429__OMP_RTL(__tgt_interop_destroy, false, Void, IdentPtr, Int32, VoidPtrPtr,
430 Int32, Int32, VoidPtr, Int32)
431__OMP_RTL(__tgt_interop_use, false, Void, IdentPtr, Int32, VoidPtrPtr, Int32,
432 Int32, VoidPtr, Int32)
433
434__OMP_RTL(__kmpc_init_allocator, false, /* omp_allocator_handle_t */ VoidPtr,
435 /* Int */ Int32, /* omp_memespace_handle_t */ VoidPtr,
436 /* Int */ Int32, /* omp_alloctrait_t */ VoidPtr)
437__OMP_RTL(__kmpc_destroy_allocator, false, Void, /* Int */ Int32,
438 /* omp_allocator_handle_t */ VoidPtr)
439
440__OMP_RTL(__kmpc_push_target_tripcount_mapper, false, Void, IdentPtr, Int64, Int64)
441__OMP_RTL(__tgt_target_mapper, false, Int32, IdentPtr, Int64, VoidPtr, Int32, VoidPtrPtr,
442 VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr)
443__OMP_RTL(__tgt_target_nowait_mapper, false, Int32, IdentPtr, Int64, VoidPtr,
444 Int32, VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr,
445 VoidPtrPtr, Int32, VoidPtr, Int32, VoidPtr)
446__OMP_RTL(__tgt_target_teams_mapper, false, Int32, IdentPtr, Int64, VoidPtr, Int32,
447 VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr, Int32, Int32)
448__OMP_RTL(__tgt_target_teams_nowait_mapper, false, Int32, IdentPtr, Int64,
449 VoidPtr, Int32, VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr,
450 VoidPtrPtr, VoidPtrPtr, Int32, Int32, Int32, VoidPtr, Int32, VoidPtr)
451__OMP_RTL(__tgt_target_kernel, false, Int32, IdentPtr, Int64, Int32, Int32,
452 VoidPtr, KernelArgsPtr)
453__OMP_RTL(__tgt_target_kernel_nowait, false, Int32, IdentPtr, Int64, Int32,
454 Int32, VoidPtr, KernelArgsPtr, Int32, VoidPtr, Int32, VoidPtr)
455__OMP_RTL(__tgt_target_data_begin_mapper, false, Void, IdentPtr, Int64, Int32, VoidPtrPtr,
456 VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr)
457__OMP_RTL(__tgt_target_data_begin_nowait_mapper, false, Void, IdentPtr, Int64,
458 Int32, VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr,
459 VoidPtrPtr, Int32, VoidPtr, Int32, VoidPtr)
460__OMP_RTL(__tgt_target_data_begin_mapper_issue, false, Void, IdentPtr, Int64, Int32,
461 VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr, AsyncInfoPtr)
462__OMP_RTL(__tgt_target_data_begin_mapper_wait, false, Void, Int64, AsyncInfoPtr)
463__OMP_RTL(__tgt_target_data_end_mapper, false, Void, IdentPtr, Int64, Int32, VoidPtrPtr,
464 VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr)
465__OMP_RTL(__tgt_target_data_end_nowait_mapper, false, Void, IdentPtr, Int64,
466 Int32, VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr,
467 VoidPtrPtr, Int32, VoidPtr, Int32, VoidPtr)
468__OMP_RTL(__tgt_target_data_update_mapper, false, Void, IdentPtr, Int64, Int32,
469 VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr, VoidPtrPtr)
470__OMP_RTL(__tgt_target_data_update_nowait_mapper, false, Void, IdentPtr, Int64,
471 Int32, VoidPtrPtr, VoidPtrPtr, Int64Ptr, Int64Ptr, VoidPtrPtr,
472 VoidPtrPtr, Int32, VoidPtr, Int32, VoidPtr)
473__OMP_RTL(__tgt_mapper_num_components, false, Int64, VoidPtr)
474__OMP_RTL(__tgt_push_mapper_component, false, Void, VoidPtr, VoidPtr, VoidPtr,
475 Int64, Int64, VoidPtr)
476__OMP_RTL(__kmpc_task_allow_completion_event, false, VoidPtr, IdentPtr,
477 /* Int */ Int32, /* kmp_task_t */ VoidPtr)
478
479/// OpenMP Device runtime functions
480__OMP_RTL(__kmpc_target_init, false, Int32, KernelEnvironmentPtr, KernelLaunchEnvironmentPtr)
481__OMP_RTL(__kmpc_target_deinit, false, Void,)
482__OMP_RTL(__kmpc_kernel_prepare_parallel, false, Void, VoidPtr)
483__OMP_RTL(__kmpc_parallel_60, false, Void, IdentPtr, Int32, Int32, Int32, Int32,
484 FuncPtrTy, FuncPtrTy, VoidPtrPtr, SizeTy, Int32)
485__OMP_RTL(__kmpc_for_static_loop_4, false, Void, IdentPtr, VoidPtr, VoidPtr, Int32, Int32, Int32, Int8)
486__OMP_RTL(__kmpc_for_static_loop_4u, false, Void, IdentPtr, VoidPtr, VoidPtr, Int32, Int32, Int32, Int8)
487__OMP_RTL(__kmpc_for_static_loop_8, false, Void, IdentPtr, VoidPtr, VoidPtr, Int64, Int64, Int64, Int8)
488__OMP_RTL(__kmpc_for_static_loop_8u, false, Void, IdentPtr, VoidPtr, VoidPtr, Int64, Int64, Int64, Int8)
489__OMP_RTL(__kmpc_distribute_static_loop_4, false, Void, IdentPtr, VoidPtr, VoidPtr, Int32, Int32, Int8)
490__OMP_RTL(__kmpc_distribute_static_loop_4u, false, Void, IdentPtr, VoidPtr, VoidPtr, Int32, Int32, Int8)
491__OMP_RTL(__kmpc_distribute_static_loop_8, false, Void, IdentPtr, VoidPtr, VoidPtr, Int64, Int64, Int8)
492__OMP_RTL(__kmpc_distribute_static_loop_8u, false, Void, IdentPtr, VoidPtr, VoidPtr, Int64, Int64, Int8)
493__OMP_RTL(__kmpc_distribute_for_static_loop_4, false, Void, IdentPtr, VoidPtr, VoidPtr, Int32, Int32, Int32, Int32, Int8)
494__OMP_RTL(__kmpc_distribute_for_static_loop_4u, false, Void, IdentPtr, VoidPtr, VoidPtr, Int32, Int32, Int32, Int32, Int8)
495__OMP_RTL(__kmpc_distribute_for_static_loop_8, false, Void, IdentPtr, VoidPtr, VoidPtr, Int64, Int64, Int64, Int64, Int8)
496__OMP_RTL(__kmpc_distribute_for_static_loop_8u, false, Void, IdentPtr, VoidPtr, VoidPtr, Int64, Int64, Int64, Int64, Int8)
497__OMP_RTL(__kmpc_kernel_parallel, false, Int1, VoidPtrPtr)
498__OMP_RTL(__kmpc_kernel_end_parallel, false, Void, )
499__OMP_RTL(__kmpc_serialized_parallel, false, Void, IdentPtr, Int32)
500__OMP_RTL(__kmpc_end_serialized_parallel, false, Void, IdentPtr, Int32)
501__OMP_RTL(__kmpc_shuffle_int32, false, Int32, Int32, Int16, Int16)
502__OMP_RTL(__kmpc_nvptx_parallel_reduce_nowait_v2, false, Int32, IdentPtr,
503 Int64, VoidPtr, ShuffleReducePtr, InterWarpCopyPtr)
504__OMP_RTL(__kmpc_gpu_xteam_reduce_nowait, false, Int32, IdentPtr, VoidPtr,
505 ShuffleReducePtr, InterWarpCopyPtr, GlobalListPtr, GlobalListPtr,
506 GlobalListPtr)
507
508__OMP_RTL(__kmpc_shuffle_int64, false, Int64, Int64, Int16, Int16)
509
510__OMP_RTL(__kmpc_alloc_shared, false, VoidPtr, SizeTy)
511__OMP_RTL(__kmpc_free_shared, false, Void, VoidPtr, SizeTy)
512__OMP_RTL(__kmpc_begin_sharing_variables, false, Void, VoidPtrPtrPtr, SizeTy)
513__OMP_RTL(__kmpc_end_sharing_variables, false, Void, )
514__OMP_RTL(__kmpc_get_shared_variables, false, Void, VoidPtrPtrPtr)
515__OMP_RTL(__kmpc_parallel_level, false, Int16, IdentPtr, Int32)
516__OMP_RTL(__kmpc_is_spmd_exec_mode, false, Int8, )
517__OMP_RTL(__kmpc_is_team_main_thread, false, Int32, )
518__OMP_RTL(__kmpc_barrier_simple_spmd, false, Void, IdentPtr, Int32)
519__OMP_RTL(__kmpc_barrier_simple_generic, false, Void, IdentPtr, Int32)
520
521__OMP_RTL(__kmpc_warp_active_thread_mask, false, Int64,)
522__OMP_RTL(__kmpc_syncwarp, false, Void, Int64)
523
524__OMP_RTL(__llvm_profile_register_function, false, Void, VoidPtr)
525__OMP_RTL(__llvm_profile_register_names_function, false, Void, VoidPtr, Int64)
526
527__OMP_RTL(__last, false, Void, )
528
529#undef __OMP_RTL
530#undef OMP_RTL
531
532#define ParamAttrs(...) ArrayRef<AttributeSet>({__VA_ARGS__})
533#define EnumAttr(Kind) Attribute::get(Ctx, Attribute::AttrKind::Kind)
534#define EnumAttrInt(Kind, N) Attribute::get(Ctx, Attribute::AttrKind::Kind, N)
535#define AllocSizeAttr(N, M) Attribute::getWithAllocSizeArgs(Ctx, N, M)
536#define AllocKindAttr(Kind) Attribute::getWithAllocKind(Ctx, Kind)
537#define AllocFamilyAttr(Name) Attribute::get(Ctx, "alloc-family", Name)
538#define MemoryAttr(ME) Attribute::getWithMemoryEffects(Ctx, ME)
539#define NoCaptureAttr Attribute::getWithCaptureInfo(Ctx, CaptureInfo::none())
540#define AttributeSet(...) \
541 AttributeSet::get(Ctx, ArrayRef<Attribute>({__VA_ARGS__}))
542
543#ifndef OMP_ATTRS_SET
544#define OMP_ATTRS_SET(VarName, AttrSet)
545#endif
546
547#define __OMP_ATTRS_SET(VarName, AttrSet) OMP_ATTRS_SET(VarName, AttrSet)
548
549__OMP_ATTRS_SET(
550 GetterAttrs,
551 OptimisticAttributes
552 ? AttributeSet(
553 EnumAttr(NoUnwind), EnumAttr(NoSync), EnumAttr(NoFree),
554 EnumAttr(WillReturn),
555 MemoryAttr(MemoryEffects::inaccessibleMemOnly(ModRefInfo::Ref)))
556 : AttributeSet(EnumAttr(NoUnwind)))
557__OMP_ATTRS_SET(
558 GetterArgReadAttrs,
559 OptimisticAttributes
560 ? AttributeSet(
561 EnumAttr(NoUnwind), EnumAttr(NoSync), EnumAttr(NoFree),
562 EnumAttr(WillReturn),
563 MemoryAttr(MemoryEffects::inaccessibleOrArgMemOnly(ModRefInfo::Ref)))
564 : AttributeSet(EnumAttr(NoUnwind)))
565__OMP_ATTRS_SET(
566 GetterArgWriteAttrs,
567 OptimisticAttributes
568 ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync), EnumAttr(NoFree),
569 EnumAttr(WillReturn),
570 MemoryAttr(MemoryEffects::argMemOnly() | MemoryEffects::inaccessibleMemOnly(ModRefInfo::Ref)))
571 : AttributeSet(EnumAttr(NoUnwind)))
572__OMP_ATTRS_SET(
573 SetterAttrs,
574 OptimisticAttributes
575 ? AttributeSet(
576 EnumAttr(NoUnwind), EnumAttr(NoSync), EnumAttr(NoFree),
577 EnumAttr(WillReturn),
578 MemoryAttr(MemoryEffects::inaccessibleMemOnly(ModRefInfo::Mod)))
579 : AttributeSet(EnumAttr(NoUnwind)))
580
581__OMP_ATTRS_SET(DefaultAttrs,
582 OptimisticAttributes
583 ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync),
584 EnumAttr(WillReturn), EnumAttr(NoFree))
585 : AttributeSet(EnumAttr(NoUnwind)))
586
587__OMP_ATTRS_SET(BarrierAttrs,
588 OptimisticAttributes
589 ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(Convergent))
590 : AttributeSet(EnumAttr(NoUnwind), EnumAttr(Convergent)))
591
592__OMP_ATTRS_SET(
593 InaccessibleArgOnlyAttrs,
594 OptimisticAttributes
595 ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync), EnumAttr(NoFree),
596 EnumAttr(WillReturn),
597 MemoryAttr(MemoryEffects::inaccessibleOrArgMemOnly()))
598 : AttributeSet(EnumAttr(NoUnwind)))
599
600__OMP_ATTRS_SET(AlwaysInlineAttrs,
601 OptimisticAttributes
602 ? AttributeSet(EnumAttr(AlwaysInline))
603 : AttributeSet(EnumAttr(AlwaysInline)))
604
605#if 0
606__OMP_ATTRS_SET(
607 InaccessibleOnlyAttrs,
608 OptimisticAttributes
609 ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync), EnumAttr(NoFree),
610 EnumAttr(WillReturn),
611 MemoryAttr(MemoryEffects::inaccessibleMemOnly()))
612 : AttributeSet(EnumAttr(NoUnwind)))
613#endif
614
615__OMP_ATTRS_SET(AllocAttrs,
616 OptimisticAttributes
617 ? AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync),
618 EnumAttr(WillReturn))
619 : AttributeSet(EnumAttr(NoUnwind)))
620
621__OMP_ATTRS_SET(ForkAttrs, OptimisticAttributes
622 ? AttributeSet(EnumAttr(NoUnwind))
623 : AttributeSet(EnumAttr(NoUnwind)))
624
625__OMP_ATTRS_SET(ReadOnlyPtrAttrs,
626 OptimisticAttributes
627 ? AttributeSet(EnumAttr(ReadOnly), EnumAttr(NoFree),
628 NoCaptureAttr)
629 : AttributeSet())
630
631#if 0
632__OMP_ATTRS_SET(WriteOnlyPtrAttrs,
633 OptimisticAttributes
634 ? AttributeSet(EnumAttr(WriteOnly), EnumAttr(NoFree),
635 NoCaptureAttr)
636 : AttributeSet())
637#endif
638
639__OMP_ATTRS_SET(ArgPtrAttrs,
640 OptimisticAttributes
641 ? AttributeSet(NoCaptureAttr, EnumAttr(NoFree))
642 : AttributeSet())
643
644__OMP_ATTRS_SET(ReturnPtrAttrs, AttributeSet(EnumAttr(NoAlias)))
645
646__OMP_ATTRS_SET(ZExt, AttributeSet(EnumAttr(ZExt)))
647__OMP_ATTRS_SET(SExt, AttributeSet(EnumAttr(SExt)))
648__OMP_ATTRS_SET(SizeTyExt,
649 M.getDataLayout().getIntPtrType(Ctx)->getBitWidth() < 64
650 ? AttributeSet(EnumAttr(ZExt))
651 : AttributeSet())
652
653#if 0
654__OMP_ATTRS_SET(ReturnAlignedPtrAttrs,
655 OptimisticAttributes
656 ? AttributeSet(EnumAttr(NoAlias), EnumAttrInt(Alignment, 8),
657 EnumAttrInt(DereferenceableOrNull, 8))
658 : AttributeSet())
659#endif
660
661#undef __OMP_ATTRS_SET
662#undef OMP_ATTRS_SET
663
664#ifndef OMP_RTL_ATTRS
665#define OMP_RTL_ATTRS(Enum, FnAttrSet, RetAttrSet, ArgAttrSets)
666#endif
667
668#define __OMP_RTL_ATTRS(Name, FnAttrSet, RetAttrSet, ArgAttrSets) \
669 OMP_RTL_ATTRS(OMPRTL_##Name, FnAttrSet, RetAttrSet, ArgAttrSets)
670
671__OMP_RTL_ATTRS(__kmpc_barrier, BarrierAttrs, AttributeSet(),
672 ParamAttrs(ReadOnlyPtrAttrs, SExt))
673__OMP_RTL_ATTRS(__kmpc_barrier_simple_spmd, BarrierAttrs, AttributeSet(),
674 ParamAttrs(ReadOnlyPtrAttrs, SExt))
675__OMP_RTL_ATTRS(__kmpc_barrier_simple_generic, BarrierAttrs, AttributeSet(),
676 ParamAttrs(ReadOnlyPtrAttrs, SExt))
677__OMP_RTL_ATTRS(__kmpc_warp_active_thread_mask, BarrierAttrs, AttributeSet(),
678 ParamAttrs())
679__OMP_RTL_ATTRS(__kmpc_syncwarp, BarrierAttrs, AttributeSet(), ParamAttrs())
680__OMP_RTL_ATTRS(__kmpc_cancel, InaccessibleArgOnlyAttrs, SExt,
681 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
682__OMP_RTL_ATTRS(__kmpc_cancel_barrier, BarrierAttrs, SExt,
683 ParamAttrs(ReadOnlyPtrAttrs, SExt))
684__OMP_RTL_ATTRS(__kmpc_distribute_for_static_loop_4, AlwaysInlineAttrs, AttributeSet(),
685 ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
686 SExt, SExt, SExt, SExt, ZExt))
687__OMP_RTL_ATTRS(__kmpc_distribute_for_static_loop_4u, AlwaysInlineAttrs, AttributeSet(),
688 ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
689 ZExt, ZExt, ZExt, ZExt, ZExt))
690__OMP_RTL_ATTRS(__kmpc_distribute_static_loop_4, AlwaysInlineAttrs, AttributeSet(),
691 ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
692 SExt, SExt, ZExt))
693__OMP_RTL_ATTRS(__kmpc_distribute_static_loop_4u, AlwaysInlineAttrs, AttributeSet(),
694 ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
695 ZExt, ZExt, ZExt))
696__OMP_RTL_ATTRS(__kmpc_for_static_loop_4, AlwaysInlineAttrs, AttributeSet(),
697 ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
698 SExt, SExt, SExt, ZExt))
699__OMP_RTL_ATTRS(__kmpc_for_static_loop_4u, AlwaysInlineAttrs, AttributeSet(),
700 ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), AttributeSet(),
701 ZExt, ZExt, ZExt, ZExt))
702__OMP_RTL_ATTRS(__kmpc_error, AttributeSet(), AttributeSet(),
703 ParamAttrs(AttributeSet(), SExt))
704__OMP_RTL_ATTRS(__kmpc_flush, BarrierAttrs, AttributeSet(),
705 ParamAttrs(ReadOnlyPtrAttrs))
706__OMP_RTL_ATTRS(__kmpc_global_thread_num, GetterArgReadAttrs, SExt,
707 ParamAttrs(ReadOnlyPtrAttrs))
708__OMP_RTL_ATTRS(__kmpc_get_hardware_thread_id_in_block, GetterAttrs, ZExt,
709 ParamAttrs())
710__OMP_RTL_ATTRS(__kmpc_fork_call, ForkAttrs, AttributeSet(),
711 ParamAttrs(ReadOnlyPtrAttrs, SExt, ReadOnlyPtrAttrs))
712__OMP_RTL_ATTRS(__kmpc_fork_call_if, AttributeSet(), AttributeSet(),
713 ParamAttrs(ReadOnlyPtrAttrs, SExt, ReadOnlyPtrAttrs, SExt))
714__OMP_RTL_ATTRS(__kmpc_omp_taskwait, BarrierAttrs, SExt,
715 ParamAttrs(ReadOnlyPtrAttrs, SExt))
716__OMP_RTL_ATTRS(__kmpc_omp_taskyield, InaccessibleArgOnlyAttrs, SExt,
717 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
718__OMP_RTL_ATTRS(__kmpc_push_num_threads, InaccessibleArgOnlyAttrs,
719 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
720__OMP_RTL_ATTRS(__kmpc_push_num_threads_strict, InaccessibleArgOnlyAttrs,
721 AttributeSet(),
722 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SExt,
723 ReadOnlyPtrAttrs))
724__OMP_RTL_ATTRS(__kmpc_push_proc_bind, InaccessibleArgOnlyAttrs, AttributeSet(),
725 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
726__OMP_RTL_ATTRS(__kmpc_omp_reg_task_with_affinity, DefaultAttrs, SExt,
727 ParamAttrs(ReadOnlyPtrAttrs, SExt, ReadOnlyPtrAttrs,
728 SExt, ReadOnlyPtrAttrs))
729
730__OMP_RTL_ATTRS(__kmpc_get_hardware_num_blocks, GetterAttrs, ZExt, ParamAttrs())
731__OMP_RTL_ATTRS(__kmpc_get_hardware_num_threads_in_block, GetterAttrs, ZExt, ParamAttrs())
732__OMP_RTL_ATTRS(__kmpc_get_warp_size, GetterAttrs, ZExt, ParamAttrs())
733__OMP_RTL_ATTRS(__kmpc_get_max_team_threads, GetterAttrs, ZExt, ParamAttrs(SExt))
734
735__OMP_RTL_ATTRS(omp_get_thread_num, GetterAttrs, SExt, ParamAttrs())
736__OMP_RTL_ATTRS(omp_get_num_threads, GetterAttrs, SExt, ParamAttrs())
737__OMP_RTL_ATTRS(omp_get_max_threads, GetterAttrs, SExt, ParamAttrs())
738__OMP_RTL_ATTRS(omp_in_parallel, GetterAttrs, SExt, ParamAttrs())
739__OMP_RTL_ATTRS(omp_get_dynamic, GetterAttrs, SExt, ParamAttrs())
740__OMP_RTL_ATTRS(omp_get_cancellation, GetterAttrs, SExt, ParamAttrs())
741__OMP_RTL_ATTRS(omp_get_nested, GetterAttrs, SExt, ParamAttrs())
742__OMP_RTL_ATTRS(
743 omp_get_schedule, GetterArgWriteAttrs, AttributeSet(),
744 ParamAttrs(AttributeSet(NoCaptureAttr, EnumAttr(WriteOnly)),
745 AttributeSet(NoCaptureAttr, EnumAttr(WriteOnly))))
746__OMP_RTL_ATTRS(
747 kmp_get_schedule_8, GetterArgWriteAttrs, AttributeSet(),
748 ParamAttrs(AttributeSet(NoCaptureAttr, EnumAttr(WriteOnly)),
749 AttributeSet(NoCaptureAttr, EnumAttr(WriteOnly))))
750__OMP_RTL_ATTRS(omp_get_thread_limit, GetterAttrs, SExt, ParamAttrs())
751__OMP_RTL_ATTRS(omp_get_supported_active_levels, GetterAttrs, SExt, ParamAttrs())
752__OMP_RTL_ATTRS(omp_get_max_active_levels, GetterAttrs, SExt, ParamAttrs())
753__OMP_RTL_ATTRS(omp_get_level, GetterAttrs, SExt, ParamAttrs())
754__OMP_RTL_ATTRS(omp_get_ancestor_thread_num, GetterAttrs, SExt, ParamAttrs(SExt))
755__OMP_RTL_ATTRS(kmp_get_ancestor_thread_num_8, GetterAttrs, SExt, ParamAttrs())
756__OMP_RTL_ATTRS(omp_get_team_size, GetterAttrs, SExt, ParamAttrs(SExt))
757__OMP_RTL_ATTRS(kmp_get_team_size_8, GetterAttrs, SExt, ParamAttrs())
758__OMP_RTL_ATTRS(omp_get_active_level, GetterAttrs, SExt, ParamAttrs())
759__OMP_RTL_ATTRS(omp_in_final, GetterAttrs, SExt, ParamAttrs())
760__OMP_RTL_ATTRS(omp_get_proc_bind, GetterAttrs, SExt, ParamAttrs())
761__OMP_RTL_ATTRS(omp_get_num_places, GetterAttrs, SExt, ParamAttrs())
762__OMP_RTL_ATTRS(omp_get_num_procs, GetterAttrs, SExt, ParamAttrs())
763__OMP_RTL_ATTRS(omp_get_place_proc_ids, GetterArgWriteAttrs, AttributeSet(),
764 ParamAttrs(SExt, AttributeSet(NoCaptureAttr,
765 EnumAttr(WriteOnly))))
766__OMP_RTL_ATTRS(kmp_get_place_proc_ids_8, GetterArgWriteAttrs, AttributeSet(),
767 ParamAttrs(AttributeSet(),
768 AttributeSet(NoCaptureAttr, EnumAttr(WriteOnly))))
769__OMP_RTL_ATTRS(omp_get_place_num, GetterAttrs, SExt, ParamAttrs())
770__OMP_RTL_ATTRS(omp_get_partition_num_places, GetterAttrs, SExt, ParamAttrs())
771__OMP_RTL_ATTRS(omp_get_partition_place_nums, GetterArgWriteAttrs, AttributeSet(),
772 ParamAttrs())
773__OMP_RTL_ATTRS(kmp_get_partition_place_nums_8, GetterArgWriteAttrs,
774 AttributeSet(), ParamAttrs())
775__OMP_RTL_ATTRS(omp_get_wtime, GetterAttrs, AttributeSet(), ParamAttrs())
776
777__OMP_RTL_ATTRS(omp_set_num_threads, SetterAttrs, AttributeSet(),
778 ParamAttrs(SExt))
779__OMP_RTL_ATTRS(kmp_set_num_threads_8, SetterAttrs, AttributeSet(),
780 ParamAttrs())
781__OMP_RTL_ATTRS(omp_set_dynamic, SetterAttrs, AttributeSet(), ParamAttrs(SExt))
782__OMP_RTL_ATTRS(omp_set_nested, SetterAttrs, AttributeSet(), ParamAttrs(SExt))
783__OMP_RTL_ATTRS(omp_set_schedule, SetterAttrs, AttributeSet(),
784 ParamAttrs(SExt, SExt))
785__OMP_RTL_ATTRS(kmp_set_schedule_8, SetterAttrs, AttributeSet(),
786 ParamAttrs(SExt, AttributeSet()))
787__OMP_RTL_ATTRS(omp_set_max_active_levels, SetterAttrs, AttributeSet(),
788 ParamAttrs(SExt))
789__OMP_RTL_ATTRS(kmp_set_max_active_levels_8, SetterAttrs, AttributeSet(),
790 ParamAttrs())
791
792__OMP_RTL_ATTRS(__kmpc_master, InaccessibleArgOnlyAttrs, SExt,
793 ParamAttrs(ReadOnlyPtrAttrs, SExt))
794__OMP_RTL_ATTRS(__kmpc_end_master, InaccessibleArgOnlyAttrs, AttributeSet(),
795 ParamAttrs(ReadOnlyPtrAttrs, SExt))
796__OMP_RTL_ATTRS(__kmpc_masked, InaccessibleArgOnlyAttrs, SExt,
797 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
798__OMP_RTL_ATTRS(__kmpc_end_masked, InaccessibleArgOnlyAttrs, AttributeSet(),
799 ParamAttrs(ReadOnlyPtrAttrs, SExt))
800__OMP_RTL_ATTRS(__kmpc_critical, BarrierAttrs, AttributeSet(),
801 ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet()))
802__OMP_RTL_ATTRS(__kmpc_critical_with_hint, BarrierAttrs, AttributeSet(),
803 ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet(), ZExt))
804__OMP_RTL_ATTRS(__kmpc_end_critical, BarrierAttrs, AttributeSet(),
805 ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet()))
806
807__OMP_RTL_ATTRS(__kmpc_begin, DefaultAttrs, AttributeSet(),
808 ParamAttrs(ReadOnlyPtrAttrs, SExt))
809__OMP_RTL_ATTRS(__kmpc_end, DefaultAttrs, AttributeSet(),
810 ParamAttrs(ReadOnlyPtrAttrs))
811
812__OMP_RTL_ATTRS(__kmpc_reduce, BarrierAttrs, SExt,
813 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SizeTyExt,
814 ReadOnlyPtrAttrs, AttributeSet()))
815__OMP_RTL_ATTRS(__kmpc_reduce_nowait, BarrierAttrs, SExt,
816 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SizeTyExt,
817 ReadOnlyPtrAttrs, AttributeSet()))
818__OMP_RTL_ATTRS(__kmpc_end_reduce, BarrierAttrs, AttributeSet(),
819 ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet()))
820__OMP_RTL_ATTRS(__kmpc_end_reduce_nowait, BarrierAttrs, AttributeSet(),
821 ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet()))
822
823__OMP_RTL_ATTRS(__kmpc_ordered, BarrierAttrs, AttributeSet(),
824 ParamAttrs(ReadOnlyPtrAttrs, SExt))
825__OMP_RTL_ATTRS(__kmpc_end_ordered, BarrierAttrs, AttributeSet(),
826 ParamAttrs(ReadOnlyPtrAttrs, SExt))
827
828__OMP_RTL_ATTRS(__kmpc_for_static_init_4, GetterArgWriteAttrs, AttributeSet(),
829 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
830 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, SExt, SExt))
831__OMP_RTL_ATTRS(__kmpc_for_static_init_4u, GetterArgWriteAttrs, AttributeSet(),
832 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
833 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, SExt, SExt))
834__OMP_RTL_ATTRS(__kmpc_for_static_init_8, GetterArgWriteAttrs, AttributeSet(),
835 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
836 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
837 AttributeSet(), AttributeSet()))
838__OMP_RTL_ATTRS(__kmpc_for_static_init_8u, GetterArgWriteAttrs, AttributeSet(),
839 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
840 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
841 AttributeSet(), AttributeSet()))
842__OMP_RTL_ATTRS(__kmpc_for_static_fini, InaccessibleArgOnlyAttrs,
843 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt))
844__OMP_RTL_ATTRS(__kmpc_distribute_static_init_4, GetterArgWriteAttrs,
845 AttributeSet(),
846 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
847 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, SExt, SExt))
848__OMP_RTL_ATTRS(__kmpc_distribute_static_init_4u, GetterArgWriteAttrs,
849 AttributeSet(),
850 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
851 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, SExt, SExt))
852__OMP_RTL_ATTRS(__kmpc_distribute_static_init_8, GetterArgWriteAttrs,
853 AttributeSet(),
854 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
855 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
856 AttributeSet(), AttributeSet()))
857__OMP_RTL_ATTRS(__kmpc_distribute_static_init_8u, GetterArgWriteAttrs,
858 AttributeSet(),
859 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
860 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
861 AttributeSet(), AttributeSet()))
862__OMP_RTL_ATTRS(__kmpc_distribute_static_fini, InaccessibleArgOnlyAttrs,
863 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt))
864__OMP_RTL_ATTRS(__kmpc_dist_dispatch_init_4, GetterArgWriteAttrs,
865 AttributeSet(),
866 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs, SExt,
867 SExt, SExt, SExt))
868__OMP_RTL_ATTRS(__kmpc_dist_dispatch_init_4u, GetterArgWriteAttrs,
869 AttributeSet(),
870 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs, ZExt,
871 ZExt, SExt, SExt))
872__OMP_RTL_ATTRS(__kmpc_dist_dispatch_init_8, GetterArgWriteAttrs,
873 AttributeSet(),
874 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs))
875__OMP_RTL_ATTRS(__kmpc_dist_dispatch_init_8u, GetterArgWriteAttrs,
876 AttributeSet(),
877 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs))
878__OMP_RTL_ATTRS(__kmpc_dispatch_init_4, GetterArgWriteAttrs, AttributeSet(),
879 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SExt, SExt, SExt, SExt))
880__OMP_RTL_ATTRS(__kmpc_dispatch_init_4u, GetterArgWriteAttrs, AttributeSet(),
881 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ZExt, ZExt, SExt, SExt))
882__OMP_RTL_ATTRS(__kmpc_dispatch_init_8, GetterArgWriteAttrs, AttributeSet(),
883 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
884__OMP_RTL_ATTRS(__kmpc_dispatch_init_8u, GetterArgWriteAttrs, AttributeSet(),
885 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
886__OMP_RTL_ATTRS(__kmpc_dispatch_next_4, GetterArgWriteAttrs, SExt,
887 ParamAttrs(ReadOnlyPtrAttrs, SExt, ArgPtrAttrs, ArgPtrAttrs,
888 ArgPtrAttrs, ArgPtrAttrs))
889__OMP_RTL_ATTRS(__kmpc_dispatch_next_4u, GetterArgWriteAttrs, SExt,
890 ParamAttrs(ReadOnlyPtrAttrs, SExt, ArgPtrAttrs, ArgPtrAttrs,
891 ArgPtrAttrs, ArgPtrAttrs))
892__OMP_RTL_ATTRS(__kmpc_dispatch_next_8, GetterArgWriteAttrs, SExt,
893 ParamAttrs(ReadOnlyPtrAttrs, SExt, ArgPtrAttrs, ArgPtrAttrs,
894 ArgPtrAttrs, ArgPtrAttrs))
895__OMP_RTL_ATTRS(__kmpc_dispatch_next_8u, GetterArgWriteAttrs, SExt,
896 ParamAttrs(ReadOnlyPtrAttrs, SExt, ArgPtrAttrs, ArgPtrAttrs,
897 ArgPtrAttrs, ArgPtrAttrs))
898__OMP_RTL_ATTRS(__kmpc_dispatch_fini_4, InaccessibleArgOnlyAttrs,
899 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt))
900__OMP_RTL_ATTRS(__kmpc_dispatch_fini_4u, InaccessibleArgOnlyAttrs,
901 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt))
902__OMP_RTL_ATTRS(__kmpc_dispatch_fini_8, InaccessibleArgOnlyAttrs,
903 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt))
904__OMP_RTL_ATTRS(__kmpc_dispatch_fini_8u, InaccessibleArgOnlyAttrs,
905 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt))
906__OMP_RTL_ATTRS(__kmpc_dispatch_deinit, InaccessibleArgOnlyAttrs,
907 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt))
908__OMP_RTL_ATTRS(__kmpc_team_static_init_4, GetterArgWriteAttrs, AttributeSet(),
909 ParamAttrs(ReadOnlyPtrAttrs, SExt, ArgPtrAttrs, ArgPtrAttrs,
910 ArgPtrAttrs, ArgPtrAttrs, SExt, SExt))
911__OMP_RTL_ATTRS(__kmpc_team_static_init_4u, GetterArgWriteAttrs, AttributeSet(),
912 ParamAttrs(ReadOnlyPtrAttrs, SExt, ArgPtrAttrs, ArgPtrAttrs,
913 ArgPtrAttrs, ArgPtrAttrs, SExt, SExt))
914__OMP_RTL_ATTRS(__kmpc_team_static_init_8, GetterArgWriteAttrs, AttributeSet(),
915 ParamAttrs(ReadOnlyPtrAttrs, SExt, ArgPtrAttrs, ArgPtrAttrs,
916 ArgPtrAttrs, ArgPtrAttrs))
917__OMP_RTL_ATTRS(__kmpc_team_static_init_8u, GetterArgWriteAttrs, AttributeSet(),
918 ParamAttrs(ReadOnlyPtrAttrs, SExt, ArgPtrAttrs, ArgPtrAttrs,
919 ArgPtrAttrs, ArgPtrAttrs))
920__OMP_RTL_ATTRS(__kmpc_dist_for_static_init_4, GetterArgWriteAttrs,
921 AttributeSet(),
922 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
923 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
924 ArgPtrAttrs, SExt, SExt))
925__OMP_RTL_ATTRS(__kmpc_dist_for_static_init_4u, GetterArgWriteAttrs,
926 AttributeSet(),
927 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
928 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs,
929 ArgPtrAttrs, SExt, SExt))
930__OMP_RTL_ATTRS(__kmpc_dist_for_static_init_8, GetterArgWriteAttrs,
931 AttributeSet(),
932 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
933 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs))
934__OMP_RTL_ATTRS(__kmpc_dist_for_static_init_8u, GetterArgWriteAttrs,
935 AttributeSet(),
936 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ArgPtrAttrs,
937 ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs, ArgPtrAttrs))
938
939__OMP_RTL_ATTRS(__kmpc_single, BarrierAttrs, SExt,
940 ParamAttrs(ReadOnlyPtrAttrs, SExt))
941__OMP_RTL_ATTRS(__kmpc_end_single, BarrierAttrs, AttributeSet(),
942 ParamAttrs(ReadOnlyPtrAttrs, SExt))
943
944__OMP_RTL_ATTRS(__kmpc_omp_task_alloc, DefaultAttrs, ReturnPtrAttrs,
945 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SizeTyExt, SizeTyExt,
946 ReadOnlyPtrAttrs))
947__OMP_RTL_ATTRS(__kmpc_omp_task, DefaultAttrs, SExt,
948 ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet()))
949__OMP_RTL_ATTRS(__kmpc_end_taskgroup, BarrierAttrs, AttributeSet(),
950 ParamAttrs(ReadOnlyPtrAttrs, SExt))
951__OMP_RTL_ATTRS(__kmpc_taskgroup, BarrierAttrs, AttributeSet(),
952 ParamAttrs(ReadOnlyPtrAttrs, SExt))
953__OMP_RTL_ATTRS(__kmpc_omp_task_begin_if0, DefaultAttrs, AttributeSet(),
954 ParamAttrs(ReadOnlyPtrAttrs, SExt))
955__OMP_RTL_ATTRS(__kmpc_omp_task_complete_if0, DefaultAttrs, AttributeSet(),
956 ParamAttrs(ReadOnlyPtrAttrs, SExt))
957__OMP_RTL_ATTRS(__kmpc_omp_task_with_deps, DefaultAttrs, SExt,
958 ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet(), SExt,
959 ReadOnlyPtrAttrs, SExt, ReadOnlyPtrAttrs))
960__OMP_RTL_ATTRS(__kmpc_taskloop, DefaultAttrs, AttributeSet(),
961 ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet(), SExt,
962 ArgPtrAttrs, ArgPtrAttrs, AttributeSet(), SExt, SExt))
963__OMP_RTL_ATTRS(__kmpc_taskloop_5, DefaultAttrs, AttributeSet(),
964 ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet(), SExt,
965 ArgPtrAttrs, ArgPtrAttrs, AttributeSet(), SExt, SExt,
966 AttributeSet(), SExt))
967__OMP_RTL_ATTRS(__kmpc_omp_target_task_alloc, DefaultAttrs, ReturnPtrAttrs,
968 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SizeTyExt, SizeTyExt,
969 ReadOnlyPtrAttrs, AttributeSet()))
970__OMP_RTL_ATTRS(__kmpc_taskred_modifier_init, DefaultAttrs, AttributeSet(),
971 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SExt))
972__OMP_RTL_ATTRS(__kmpc_taskred_init, DefaultAttrs, AttributeSet(),
973 ParamAttrs(SExt, SExt))
974__OMP_RTL_ATTRS(__kmpc_task_reduction_modifier_fini, BarrierAttrs,
975 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
976__OMP_RTL_ATTRS(__kmpc_task_reduction_get_th_data, DefaultAttrs, AttributeSet(),
977 ParamAttrs(SExt))
978__OMP_RTL_ATTRS(__kmpc_task_reduction_init, DefaultAttrs, AttributeSet(),
979 ParamAttrs(SExt, SExt))
980__OMP_RTL_ATTRS(__kmpc_task_reduction_modifier_init, DefaultAttrs,
981 AttributeSet(), ParamAttrs(AttributeSet(), SExt, SExt, SExt))
982__OMP_RTL_ATTRS(__kmpc_proxy_task_completed_ooo, DefaultAttrs, AttributeSet(),
983 ParamAttrs())
984
985__OMP_RTL_ATTRS(__kmpc_omp_wait_deps, BarrierAttrs, AttributeSet(),
986 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ReadOnlyPtrAttrs, SExt))
987__OMP_RTL_ATTRS(__kmpc_omp_taskwait_deps_51, BarrierAttrs, AttributeSet(),
988 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, ReadOnlyPtrAttrs, SExt,
989 AttributeSet(), SExt))
990__OMP_RTL_ATTRS(__kmpc_cancellationpoint, DefaultAttrs, SExt,
991 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
992
993__OMP_RTL_ATTRS(__kmpc_fork_teams, ForkAttrs, AttributeSet(),
994 ParamAttrs(ReadOnlyPtrAttrs, SExt, ReadOnlyPtrAttrs))
995__OMP_RTL_ATTRS(__kmpc_push_num_teams, InaccessibleArgOnlyAttrs, AttributeSet(),
996 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SExt))
997__OMP_RTL_ATTRS(__kmpc_push_num_teams_51, InaccessibleArgOnlyAttrs,
998 AttributeSet(),
999 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt, SExt, SExt))
1000__OMP_RTL_ATTRS(__kmpc_set_thread_limit, InaccessibleArgOnlyAttrs, AttributeSet(),
1001 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
1002
1003__OMP_RTL_ATTRS(__kmpc_copyprivate, DefaultAttrs, AttributeSet(),
1004 ParamAttrs(ReadOnlyPtrAttrs, SExt, SizeTyExt,
1005 ReadOnlyPtrAttrs, AttributeSet(), SExt))
1006__OMP_RTL_ATTRS(__kmpc_threadprivate_cached, DefaultAttrs, AttributeSet(),
1007 ParamAttrs(ReadOnlyPtrAttrs, SExt, AttributeSet(), SizeTyExt))
1008__OMP_RTL_ATTRS(__kmpc_threadprivate_register, DefaultAttrs, AttributeSet(),
1009 ParamAttrs(ReadOnlyPtrAttrs, AttributeSet(), ReadOnlyPtrAttrs,
1010 ReadOnlyPtrAttrs, ReadOnlyPtrAttrs))
1011
1012__OMP_RTL_ATTRS(__kmpc_doacross_init, BarrierAttrs, AttributeSet(),
1013 ParamAttrs(ReadOnlyPtrAttrs, SExt, SExt))
1014__OMP_RTL_ATTRS(__kmpc_doacross_post, BarrierAttrs, AttributeSet(),
1015 ParamAttrs(ReadOnlyPtrAttrs, SExt, ReadOnlyPtrAttrs))
1016__OMP_RTL_ATTRS(__kmpc_doacross_wait, BarrierAttrs, AttributeSet(),
1017 ParamAttrs(ReadOnlyPtrAttrs, SExt, ReadOnlyPtrAttrs))
1018__OMP_RTL_ATTRS(__kmpc_doacross_fini, BarrierAttrs, AttributeSet(),
1019 ParamAttrs(ReadOnlyPtrAttrs, SExt))
1020
1021__OMP_RTL_ATTRS(__kmpc_alloc_shared,
1022 AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync),
1023 AllocSizeAttr(0, std::nullopt),
1024 AllocKindAttr(AllocFnKind::Alloc |
1025 AllocFnKind::Uninitialized),
1026 AllocFamilyAttr("__kmpc_alloc_shared")),
1027 ReturnPtrAttrs, ParamAttrs(SizeTyExt))
1028__OMP_RTL_ATTRS(__kmpc_free_shared,
1029 AttributeSet(EnumAttr(NoUnwind), EnumAttr(NoSync),
1030 AllocKindAttr(AllocFnKind::Free),
1031 AllocFamilyAttr("__kmpc_alloc_shared")),
1032 AttributeSet(),
1033 ParamAttrs(AttributeSet(NoCaptureAttr,
1034 EnumAttr(AllocatedPointer)),
1035 SizeTyExt))
1036__OMP_RTL_ATTRS(__kmpc_begin_sharing_variables, AttributeSet(), AttributeSet(),
1037 ParamAttrs(AttributeSet(), SizeTyExt))
1038
1039__OMP_RTL_ATTRS(__kmpc_alloc, DefaultAttrs, ReturnPtrAttrs,
1040 ParamAttrs(SExt, SizeTyExt))
1041__OMP_RTL_ATTRS(__kmpc_aligned_alloc, DefaultAttrs, ReturnPtrAttrs,
1042 ParamAttrs(SExt, SizeTyExt, SizeTyExt))
1043__OMP_RTL_ATTRS(__kmpc_free, AllocAttrs, AttributeSet(),
1044 ParamAttrs(SExt))
1045
1046__OMP_RTL_ATTRS(__tgt_interop_init, AttributeSet(), AttributeSet(),
1047 ParamAttrs(AttributeSet(), SExt, AttributeSet(), SExt,
1048 SExt, SExt, AttributeSet(), SExt))
1049__OMP_RTL_ATTRS(__tgt_interop_destroy, AttributeSet(), AttributeSet(),
1050 ParamAttrs(AttributeSet(), SExt, AttributeSet(), SExt, SExt,
1051 AttributeSet(), SExt))
1052__OMP_RTL_ATTRS(__tgt_interop_use, AttributeSet(), AttributeSet(),
1053 ParamAttrs(AttributeSet(), SExt, AttributeSet(), SExt, SExt,
1054 AttributeSet(), SExt))
1055
1056__OMP_RTL_ATTRS(__kmpc_init_allocator, DefaultAttrs, AttributeSet(),
1057 ParamAttrs(SExt, AttributeSet(), SExt))
1058__OMP_RTL_ATTRS(__kmpc_destroy_allocator, AllocAttrs, AttributeSet(),
1059 ParamAttrs(SExt))
1060
1061__OMP_RTL_ATTRS(__kmpc_push_target_tripcount_mapper, SetterAttrs,
1062 AttributeSet(), ParamAttrs())
1063__OMP_RTL_ATTRS(__tgt_target_mapper, ForkAttrs, SExt,
1064 ParamAttrs(AttributeSet(),AttributeSet(),AttributeSet(), SExt))
1065__OMP_RTL_ATTRS(__tgt_target_nowait_mapper, ForkAttrs, SExt,
1066 ParamAttrs(AttributeSet(), AttributeSet(), AttributeSet(), SExt,
1067 AttributeSet(), AttributeSet(), AttributeSet(),
1068 AttributeSet(), AttributeSet(), AttributeSet(),
1069 SExt, AttributeSet(), SExt))
1070__OMP_RTL_ATTRS(__tgt_target_teams_mapper, ForkAttrs, SExt,
1071 ParamAttrs(AttributeSet(), AttributeSet(), AttributeSet(), SExt,
1072 AttributeSet(), AttributeSet(), AttributeSet(),
1073 AttributeSet(), AttributeSet(), AttributeSet(), SExt,
1074 SExt))
1075__OMP_RTL_ATTRS(__tgt_target_teams_nowait_mapper, ForkAttrs, SExt,
1076 ParamAttrs(AttributeSet(), AttributeSet(), AttributeSet(), SExt,
1077 AttributeSet(), AttributeSet(), AttributeSet(),
1078 AttributeSet(), AttributeSet(), AttributeSet(),
1079 SExt, SExt, SExt, AttributeSet(), SExt))
1080__OMP_RTL_ATTRS(__tgt_target_kernel, ForkAttrs, SExt,
1081 ParamAttrs(AttributeSet(), AttributeSet(), SExt, SExt))
1082__OMP_RTL_ATTRS(__tgt_target_kernel_nowait, ForkAttrs, SExt,
1083 ParamAttrs(AttributeSet(), AttributeSet(), SExt, SExt,
1084 AttributeSet(), AttributeSet(), SExt, AttributeSet(),
1085 SExt))
1086__OMP_RTL_ATTRS(__tgt_target_data_begin_mapper, ForkAttrs, AttributeSet(),
1087 ParamAttrs(AttributeSet(), AttributeSet(), SExt))
1088__OMP_RTL_ATTRS(__tgt_target_data_begin_nowait_mapper, ForkAttrs,
1089 AttributeSet(),
1090 ParamAttrs(AttributeSet(), AttributeSet(), SExt, AttributeSet(),
1091 AttributeSet(), AttributeSet(), AttributeSet(),
1092 AttributeSet(), AttributeSet(), SExt, AttributeSet(),
1093 SExt, AttributeSet()))
1094__OMP_RTL_ATTRS(__tgt_target_data_begin_mapper_issue, AttributeSet(),
1095 AttributeSet(),
1096 ParamAttrs(AttributeSet(), AttributeSet(), SExt))
1097__OMP_RTL_ATTRS(__tgt_target_data_end_mapper, ForkAttrs, AttributeSet(),
1098 ParamAttrs(AttributeSet(), AttributeSet(), SExt))
1099__OMP_RTL_ATTRS(__tgt_target_data_end_nowait_mapper, ForkAttrs, AttributeSet(),
1100 ParamAttrs(AttributeSet(), AttributeSet(), SExt, AttributeSet(),
1101 AttributeSet(), AttributeSet(), AttributeSet(),
1102 AttributeSet(), AttributeSet(), SExt, AttributeSet(),
1103 SExt, AttributeSet()))
1104__OMP_RTL_ATTRS(__tgt_target_data_update_mapper, ForkAttrs, AttributeSet(),
1105 ParamAttrs(AttributeSet(), AttributeSet(), SExt))
1106__OMP_RTL_ATTRS(__tgt_target_data_update_nowait_mapper, ForkAttrs,
1107 AttributeSet(),
1108 ParamAttrs(AttributeSet(), AttributeSet(), SExt, AttributeSet(),
1109 AttributeSet(), AttributeSet(), AttributeSet(),
1110 AttributeSet(), AttributeSet(), SExt, AttributeSet(),
1111 SExt, AttributeSet()))
1112__OMP_RTL_ATTRS(__tgt_mapper_num_components, ForkAttrs, AttributeSet(),
1113 ParamAttrs())
1114__OMP_RTL_ATTRS(__tgt_push_mapper_component, ForkAttrs, AttributeSet(),
1115 ParamAttrs())
1116__OMP_RTL_ATTRS(__kmpc_task_allow_completion_event, DefaultAttrs,
1117 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt))
1118
1119__OMP_RTL_ATTRS(__kmpc_target_init, AttributeSet(), SExt,
1120 ParamAttrs(AttributeSet()))
1121__OMP_RTL_ATTRS(__kmpc_target_deinit, AttributeSet(), AttributeSet(),
1122 ParamAttrs())
1123__OMP_RTL_ATTRS(__kmpc_parallel_60, AlwaysInlineAttrs, AttributeSet(),
1124 ParamAttrs(AttributeSet(), SExt, SExt, SExt, SExt,
1125 AttributeSet(), AttributeSet(), AttributeSet(),
1126 SizeTyExt))
1127__OMP_RTL_ATTRS(__kmpc_serialized_parallel, InaccessibleArgOnlyAttrs,
1128 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt))
1129__OMP_RTL_ATTRS(__kmpc_end_serialized_parallel, InaccessibleArgOnlyAttrs,
1130 AttributeSet(), ParamAttrs(ReadOnlyPtrAttrs, SExt))
1131__OMP_RTL_ATTRS(__kmpc_shuffle_int32, AttributeSet(), SExt,
1132 ParamAttrs(SExt, SExt, SExt))
1133__OMP_RTL_ATTRS(__kmpc_nvptx_parallel_reduce_nowait_v2, AttributeSet(), SExt,
1134 ParamAttrs())
1135__OMP_RTL_ATTRS(__kmpc_gpu_xteam_reduce_nowait, AttributeSet(), SExt,
1136 ParamAttrs())
1137
1138__OMP_RTL_ATTRS(__kmpc_shuffle_int64, AttributeSet(), AttributeSet(),
1139 ParamAttrs(AttributeSet(), SExt, SExt))
1140
1141__OMP_RTL_ATTRS(__kmpc_is_spmd_exec_mode, AttributeSet(), SExt, ParamAttrs())
1142__OMP_RTL_ATTRS(__kmpc_is_team_main_thread, AttributeSet(), SExt, ParamAttrs())
1143
1144#undef __OMP_RTL_ATTRS
1145#undef OMP_RTL_ATTRS
1146#undef AttributeSet
1147#undef EnumAttr
1148#undef EnumAttrInt
1149#undef ParamAttrs
1150#undef AllocSizeAttr
1151#undef AllocKindAttr
1152#undef AllocFamilyAttr
1153
1154///}
1155
1156/// KMP ident_t bit flags
1157///
1158/// In accordance with the values in `openmp/runtime/src/kmp.h`.
1159///
1160///{
1161
1162#ifndef OMP_IDENT_FLAG
1163#define OMP_IDENT_FLAG(Enum, Str, Value)
1164#endif
1165
1166#define __OMP_IDENT_FLAG(Name, Value) \
1167 OMP_IDENT_FLAG(OMP_IDENT_FLAG_##Name, #Name, Value)
1168
1169__OMP_IDENT_FLAG(KMPC, 0x02)
1170__OMP_IDENT_FLAG(ATOMIC_REDUCE, 0x10)
1171__OMP_IDENT_FLAG(BARRIER_EXPL, 0x20)
1172__OMP_IDENT_FLAG(BARRIER_IMPL, 0x0040)
1173__OMP_IDENT_FLAG(BARRIER_IMPL_MASK, 0x01C0)
1174__OMP_IDENT_FLAG(BARRIER_IMPL_FOR, 0x0040)
1175__OMP_IDENT_FLAG(BARRIER_IMPL_SECTIONS, 0x00C0)
1176__OMP_IDENT_FLAG(BARRIER_IMPL_SINGLE, 0x0140)
1177__OMP_IDENT_FLAG(BARRIER_IMPL_WORKSHARE, 0x01C0)
1178__OMP_IDENT_FLAG(WORK_LOOP, 0x200)
1179__OMP_IDENT_FLAG(WORK_SECTIONS, 0x400)
1180__OMP_IDENT_FLAG(WORK_DISTRIBUTE, 0x800)
1181
1182#undef __OMP_IDENT_FLAG
1183#undef OMP_IDENT_FLAG
1184
1185///}
1186
1187/// KMP cancel kind
1188///
1189///{
1190
1191#ifndef OMP_CANCEL_KIND
1192#define OMP_CANCEL_KIND(Enum, Str, DirectiveEnum, Value)
1193#endif
1194
1195#define __OMP_CANCEL_KIND(Name, Value) \
1196 OMP_CANCEL_KIND(OMP_CANCEL_KIND_##Name, #Name, OMPD_##Name, Value)
1197
1198__OMP_CANCEL_KIND(parallel, 1)
1199__OMP_CANCEL_KIND(for, 2)
1200__OMP_CANCEL_KIND(sections, 3)
1201__OMP_CANCEL_KIND(taskgroup, 4)
1202
1203#undef __OMP_CANCEL_KIND
1204#undef OMP_CANCEL_KIND
1205
1206///}
1207
1208/// Default kinds
1209///
1210///{
1211
1212#ifndef OMP_DEFAULT_KIND
1213#define OMP_DEFAULT_KIND(Enum, Str)
1214#endif
1215
1216#define __OMP_DEFAULT_KIND(Name) OMP_DEFAULT_KIND(OMP_DEFAULT_##Name, #Name)
1217
1218__OMP_DEFAULT_KIND(none)
1219__OMP_DEFAULT_KIND(shared)
1220__OMP_DEFAULT_KIND(private)
1221__OMP_DEFAULT_KIND(firstprivate)
1222__OMP_DEFAULT_KIND(unknown)
1223
1224#undef __OMP_DEFAULT_KIND
1225#undef OMP_DEFAULT_KIND
1226
1227///}
1228
1229/// Proc bind kinds
1230///
1231///{
1232
1233#ifndef OMP_PROC_BIND_KIND
1234#define OMP_PROC_BIND_KIND(Enum, Str, Value)
1235#endif
1236
1237#define __OMP_PROC_BIND_KIND(Name, Value) \
1238 OMP_PROC_BIND_KIND(OMP_PROC_BIND_##Name, #Name, Value)
1239
1240__OMP_PROC_BIND_KIND(master, 2)
1241__OMP_PROC_BIND_KIND(close, 3)
1242__OMP_PROC_BIND_KIND(spread, 4)
1243__OMP_PROC_BIND_KIND(primary, 5)
1244__OMP_PROC_BIND_KIND(default, 6)
1245__OMP_PROC_BIND_KIND(unknown, 7)
1246
1247#undef __OMP_PROC_BIND_KIND
1248#undef OMP_PROC_BIND_KIND
1249
1250///}
1251
1252/// Which argument of a runtime function is a callback, and what the callback
1253/// receives, in the encoding !callback metadata uses: the argument number the
1254/// callee is passed in, then one entry per callback parameter giving the
1255/// argument of the runtime call it is forwarded from, with -1 for a parameter
1256/// the runtime supplies itself.
1257///
1258///{
1259
1260#ifndef OMP_RTL_CB_INFO
1261#define OMP_RTL_CB_INFO(Enum, Str, ArgNo, ArgIndices, IsVarArg)
1262#endif
1263
1264#define __OMP_RTL_CB_INFO(Name, ArgNo, ArgIndices, IsVarArg) \
1265 OMP_RTL_CB_INFO(OMPRTL_##Name, #Name, ArgNo, ArgIndices, IsVarArg)
1266
1267/// The loop runtime functions all take (loc, fn, arg, num_iters, ...) and hand
1268/// the loop body (fn) an iteration the runtime picks and the arg they were
1269/// given, so the body's second parameter is in fact argument 2. It is left
1270/// unknown deliberately: the runtime invokes the body once per iteration while
1271/// the IR shows a single call, and naming the argument it comes from would let
1272/// a consumer reason about what the payload carries from one iteration to the
1273/// next as if the body ran once.
1274#define __OMP_LOOP_CB_INDICES ArrayRef<int>({-1, -1})
1275
1276__OMP_RTL_CB_INFO(__kmpc_distribute_static_loop_4, 1, __OMP_LOOP_CB_INDICES,
1277 false)
1278__OMP_RTL_CB_INFO(__kmpc_distribute_static_loop_4u, 1, __OMP_LOOP_CB_INDICES,
1279 false)
1280__OMP_RTL_CB_INFO(__kmpc_distribute_static_loop_8, 1, __OMP_LOOP_CB_INDICES,
1281 false)
1282__OMP_RTL_CB_INFO(__kmpc_distribute_static_loop_8u, 1, __OMP_LOOP_CB_INDICES,
1283 false)
1284__OMP_RTL_CB_INFO(__kmpc_distribute_for_static_loop_4, 1, __OMP_LOOP_CB_INDICES,
1285 false)
1286__OMP_RTL_CB_INFO(__kmpc_distribute_for_static_loop_4u, 1,
1287 __OMP_LOOP_CB_INDICES, false)
1288__OMP_RTL_CB_INFO(__kmpc_distribute_for_static_loop_8, 1, __OMP_LOOP_CB_INDICES,
1289 false)
1290__OMP_RTL_CB_INFO(__kmpc_distribute_for_static_loop_8u, 1,
1291 __OMP_LOOP_CB_INDICES, false)
1292__OMP_RTL_CB_INFO(__kmpc_for_static_loop_4, 1, __OMP_LOOP_CB_INDICES, false)
1293__OMP_RTL_CB_INFO(__kmpc_for_static_loop_4u, 1, __OMP_LOOP_CB_INDICES, false)
1294__OMP_RTL_CB_INFO(__kmpc_for_static_loop_8, 1, __OMP_LOOP_CB_INDICES, false)
1295__OMP_RTL_CB_INFO(__kmpc_for_static_loop_8u, 1, __OMP_LOOP_CB_INDICES, false)
1296
1297#undef __OMP_LOOP_CB_INDICES
1298#undef __OMP_RTL_CB_INFO
1299#undef OMP_RTL_CB_INFO
1300
1301///}
1302
1303/// OpenMP context related definitions:
1304/// - trait set selector
1305/// - trait selector
1306/// - trait property
1307///
1308///{
1309
1310#ifndef OMP_TRAIT_SET
1311#define OMP_TRAIT_SET(Enum, Str)
1312#endif
1313#ifndef OMP_TRAIT_SELECTOR
1314#define OMP_TRAIT_SELECTOR(Enum, TraitSetEnum, Str, RequiresProperty)
1315#endif
1316#ifndef OMP_TRAIT_PROPERTY
1317#define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str)
1318#endif
1319#ifndef OMP_LAST_TRAIT_PROPERTY
1320#define OMP_LAST_TRAIT_PROPERTY(Enum)
1321#endif
1322
1323#define __OMP_TRAIT_SET(Name) OMP_TRAIT_SET(Name, #Name)
1324#define __OMP_TRAIT_SELECTOR(TraitSet, Name, RequiresProperty) \
1325 OMP_TRAIT_SELECTOR(TraitSet##_##Name, TraitSet, #Name, RequiresProperty)
1326#define __OMP_TRAIT_SELECTOR_AND_PROPERTY(TraitSet, Name) \
1327 OMP_TRAIT_SELECTOR(TraitSet##_##Name, TraitSet, #Name, false) \
1328 OMP_TRAIT_PROPERTY(TraitSet##_##Name##_##Name, TraitSet, TraitSet##_##Name, \
1329 #Name)
1330#define __OMP_TRAIT_PROPERTY(TraitSet, TraitSelector, Name) \
1331 OMP_TRAIT_PROPERTY(TraitSet##_##TraitSelector##_##Name, TraitSet, \
1332 TraitSet##_##TraitSelector, #Name)
1333
1334// "invalid" must go first.
1335OMP_TRAIT_SET(invalid, "invalid")
1336OMP_TRAIT_SELECTOR(invalid, invalid, "invalid", false)
1337OMP_TRAIT_PROPERTY(invalid, invalid, invalid, "invalid")
1338
1339__OMP_TRAIT_SET(construct)
1340__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, target)
1341__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, teams)
1342__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, parallel)
1343__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, for)
1344__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, simd)
1345
1346__OMP_TRAIT_SET(device)
1347
1348__OMP_TRAIT_SELECTOR(device, kind, true)
1349
1350__OMP_TRAIT_PROPERTY(device, kind, host)
1351__OMP_TRAIT_PROPERTY(device, kind, nohost)
1352__OMP_TRAIT_PROPERTY(device, kind, cpu)
1353__OMP_TRAIT_PROPERTY(device, kind, gpu)
1354__OMP_TRAIT_PROPERTY(device, kind, fpga)
1355__OMP_TRAIT_PROPERTY(device, kind, any)
1356
1357__OMP_TRAIT_SELECTOR(device, arch, true)
1358
1359__OMP_TRAIT_PROPERTY(device, arch, arm)
1360__OMP_TRAIT_PROPERTY(device, arch, armeb)
1361__OMP_TRAIT_PROPERTY(device, arch, aarch64)
1362__OMP_TRAIT_PROPERTY(device, arch, aarch64_be)
1363__OMP_TRAIT_PROPERTY(device, arch, aarch64_32)
1364__OMP_TRAIT_PROPERTY(device, arch, ppc)
1365__OMP_TRAIT_PROPERTY(device, arch, ppcle)
1366__OMP_TRAIT_PROPERTY(device, arch, ppc64)
1367__OMP_TRAIT_PROPERTY(device, arch, ppc64le)
1368__OMP_TRAIT_PROPERTY(device, arch, x86)
1369__OMP_TRAIT_PROPERTY(device, arch, x86_64)
1370// TODO: Should also cover subarches
1371__OMP_TRAIT_PROPERTY(device, arch, amdgcn)
1372__OMP_TRAIT_PROPERTY(device, arch, amdgpu)
1373__OMP_TRAIT_PROPERTY(device, arch, nvptx)
1374__OMP_TRAIT_PROPERTY(device, arch, nvptx64)
1375__OMP_TRAIT_PROPERTY(device, arch, spirv64)
1376
1377__OMP_TRAIT_SET(target_device)
1378
1379__OMP_TRAIT_SELECTOR(target_device, kind, true)
1380
1381__OMP_TRAIT_PROPERTY(target_device, kind, host)
1382__OMP_TRAIT_PROPERTY(target_device, kind, nohost)
1383__OMP_TRAIT_PROPERTY(target_device, kind, cpu)
1384__OMP_TRAIT_PROPERTY(target_device, kind, gpu)
1385__OMP_TRAIT_PROPERTY(target_device, kind, fpga)
1386__OMP_TRAIT_PROPERTY(target_device, kind, any)
1387
1388__OMP_TRAIT_SELECTOR(target_device, device_num, true)
1389
1390__OMP_TRAIT_PROPERTY(target_device, device_num, number)
1391
1392__OMP_TRAIT_SELECTOR(target_device, arch, true)
1393
1394__OMP_TRAIT_PROPERTY(target_device, arch, arm)
1395__OMP_TRAIT_PROPERTY(target_device, arch, armeb)
1396__OMP_TRAIT_PROPERTY(target_device, arch, aarch64)
1397__OMP_TRAIT_PROPERTY(target_device, arch, aarch64_be)
1398__OMP_TRAIT_PROPERTY(target_device, arch, aarch64_32)
1399__OMP_TRAIT_PROPERTY(target_device, arch, ppc)
1400__OMP_TRAIT_PROPERTY(target_device, arch, ppcle)
1401__OMP_TRAIT_PROPERTY(target_device, arch, ppc64)
1402__OMP_TRAIT_PROPERTY(target_device, arch, ppc64le)
1403__OMP_TRAIT_PROPERTY(target_device, arch, x86)
1404__OMP_TRAIT_PROPERTY(target_device, arch, x86_64)
1405__OMP_TRAIT_PROPERTY(target_device, arch, amdgcn)
1406__OMP_TRAIT_PROPERTY(target_device, arch, nvptx)
1407__OMP_TRAIT_PROPERTY(target_device, arch, nvptx64)
1408__OMP_TRAIT_PROPERTY(target_device, arch, spirv64)
1409
1410__OMP_TRAIT_SET(implementation)
1411
1412__OMP_TRAIT_SELECTOR(implementation, vendor, true)
1413
1414__OMP_TRAIT_PROPERTY(implementation, vendor, amd)
1415__OMP_TRAIT_PROPERTY(implementation, vendor, arm)
1416__OMP_TRAIT_PROPERTY(implementation, vendor, bsc)
1417__OMP_TRAIT_PROPERTY(implementation, vendor, cray)
1418__OMP_TRAIT_PROPERTY(implementation, vendor, fujitsu)
1419__OMP_TRAIT_PROPERTY(implementation, vendor, gnu)
1420__OMP_TRAIT_PROPERTY(implementation, vendor, ibm)
1421__OMP_TRAIT_PROPERTY(implementation, vendor, intel)
1422__OMP_TRAIT_PROPERTY(implementation, vendor, llvm)
1423__OMP_TRAIT_PROPERTY(implementation, vendor, nec)
1424__OMP_TRAIT_PROPERTY(implementation, vendor, nvidia)
1425__OMP_TRAIT_PROPERTY(implementation, vendor, pgi)
1426__OMP_TRAIT_PROPERTY(implementation, vendor, ti)
1427__OMP_TRAIT_PROPERTY(implementation, vendor, unknown)
1428
1429__OMP_TRAIT_SELECTOR(implementation, extension, true)
1430__OMP_TRAIT_PROPERTY(implementation, extension, match_all)
1431__OMP_TRAIT_PROPERTY(implementation, extension, match_any)
1432__OMP_TRAIT_PROPERTY(implementation, extension, match_none)
1433__OMP_TRAIT_PROPERTY(implementation, extension, disable_implicit_base)
1434__OMP_TRAIT_PROPERTY(implementation, extension, allow_templates)
1435__OMP_TRAIT_PROPERTY(implementation, extension, bind_to_declaration)
1436
1437__OMP_TRAIT_SET(user)
1438
1439__OMP_TRAIT_SELECTOR(user, condition, true)
1440
1441__OMP_TRAIT_PROPERTY(user, condition, true)
1442__OMP_TRAIT_PROPERTY(user, condition, false)
1443__OMP_TRAIT_PROPERTY(user, condition, unknown)
1444
1445__OMP_TRAIT_SELECTOR_AND_PROPERTY(construct, dispatch)
1446
1447// Note that we put isa last so that the other conditions are checked first.
1448// This allows us to issue warnings wrt. isa only if we match otherwise.
1449__OMP_TRAIT_SELECTOR(device, isa, true)
1450
1451__OMP_TRAIT_SELECTOR(target_device, isa, true)
1452
1453// We use "__ANY" as a placeholder in the isa property to denote the
1454// conceptual "any", not the literal `any` used in kind. The string we
1455// we use is not important except that it will show up in diagnostics.
1456OMP_TRAIT_PROPERTY(device_isa___ANY, device, device_isa,
1457 "<any, entirely target dependent>")
1458
1459OMP_TRAIT_PROPERTY(target_device_isa___ANY, target_device, target_device_isa,
1460 "<any, entirely target dependent>")
1461
1462#undef OMP_TRAIT_SET
1463#undef __OMP_TRAIT_SET
1464///}
1465
1466/// Traits for the requires directive
1467///
1468/// These will (potentially) become trait selectors for the OpenMP context if
1469/// the OMP_REQUIRES_TRAIT macro is not defined.
1470///
1471///{
1472
1473#ifdef OMP_REQUIRES_TRAIT
1474#define __OMP_REQUIRES_TRAIT(Name) \
1475 OMP_REQUIRES_TRAIT(OMP_REQUIRES_TRAIT_##Name, #Name)
1476#else
1477#define __OMP_REQUIRES_TRAIT(Name) \
1478 __OMP_TRAIT_SELECTOR_AND_PROPERTY(implementation, Name)
1479#endif
1480
1481__OMP_REQUIRES_TRAIT(unified_address)
1482__OMP_REQUIRES_TRAIT(unified_shared_memory)
1483__OMP_REQUIRES_TRAIT(reverse_offload)
1484__OMP_REQUIRES_TRAIT(dynamic_allocators)
1485__OMP_REQUIRES_TRAIT(atomic_default_mem_order)
1486
1487OMP_LAST_TRAIT_PROPERTY(
1488 implementation_atomic_default_mem_order_atomic_default_mem_order)
1489
1490#undef __OMP_TRAIT_SELECTOR_AND_PROPERTY
1491#undef OMP_TRAIT_SELECTOR
1492#undef __OMP_TRAIT_SELECTOR
1493#undef OMP_TRAIT_PROPERTY
1494#undef OMP_LAST_TRAIT_PROPERTY
1495#undef __OMP_TRAIT_PROPERTY
1496#undef __OMP_REQUIRES_TRAIT
1497#undef OMP_REQUIRES_TRAIT
1498///}
1499
1500
1501/// Assumption clauses
1502///
1503///{
1504
1505#ifdef OMP_ASSUME_CLAUSE
1506#define __OMP_ASSUME_CLAUSE(Identifier, StartsWith, HasDirectiveList, HasExpression) \
1507OMP_ASSUME_CLAUSE(Identifier, StartsWith, HasDirectiveList, HasExpression)
1508#else
1509#define __OMP_ASSUME_CLAUSE(...)
1510#endif
1511
1512__OMP_ASSUME_CLAUSE(llvm::StringLiteral("ext_"), true, false, false)
1513__OMP_ASSUME_CLAUSE(llvm::StringLiteral("absent"), false, true, false)
1514__OMP_ASSUME_CLAUSE(llvm::StringLiteral("contains"), false, true, false)
1515__OMP_ASSUME_CLAUSE(llvm::StringLiteral("holds"), false, false, true)
1516__OMP_ASSUME_CLAUSE(llvm::StringLiteral("no_openmp"), false, false, false)
1517__OMP_ASSUME_CLAUSE(llvm::StringLiteral("no_openmp_routines"), false, false, false)
1518__OMP_ASSUME_CLAUSE(llvm::StringLiteral("no_openmp_constructs"), false, false, false)
1519__OMP_ASSUME_CLAUSE(llvm::StringLiteral("no_parallelism"), false, false, false)
1520
1521#undef __OMP_ASSUME_CLAUSE
1522#undef OMP_ASSUME_CLAUSE
1523///}
1524