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