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