Warning, /include/llvm/Frontend/OpenMP/OMP.td is written in an unsupported language. File is not indexed.
0001 //===-- OMP.td - OpenMP directive definition file ----------*- tablegen -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This is the definition file for OpenMP directives and clauses.
0010 //
0011 //===----------------------------------------------------------------------===//
0012
0013 include "llvm/Frontend/Directive/DirectiveBase.td"
0014
0015 //===----------------------------------------------------------------------===//
0016 // Definition of general OpenMP information
0017 //===----------------------------------------------------------------------===//
0018
0019 def OpenMP : DirectiveLanguage {
0020 let name = "OpenMP";
0021 let cppNamespace = "omp"; // final namespace will be llvm::omp
0022 let directivePrefix = "OMPD_";
0023 let clausePrefix = "OMPC_";
0024 let makeEnumAvailableInNamespace = true;
0025 let enableBitmaskEnumInNamespace = true;
0026 let clauseEnumSetClass = "OmpClauseSet";
0027 let flangClauseBaseClass = "OmpClause";
0028 }
0029
0030 //===----------------------------------------------------------------------===//
0031 // Definitions of OpenMP clauses
0032 // Sorted alphabetically wrt clause spelling.
0033 //===----------------------------------------------------------------------===//
0034
0035 def OMPC_Absent : Clause<"absent"> {
0036 let clangClass = "OMPAbsentClause";
0037 }
0038 def OMPC_Acquire : Clause<"acquire"> {
0039 let clangClass = "OMPAcquireClause";
0040 }
0041 def OMPC_AcqRel : Clause<"acq_rel"> {
0042 let clangClass = "OMPAcqRelClause";
0043 }
0044 def OMPC_AdjustArgs : Clause<"adjust_args"> {
0045 }
0046 def OMPC_Affinity : Clause<"affinity"> {
0047 let clangClass = "OMPAffinityClause";
0048 let flangClass = "OmpAffinityClause";
0049 }
0050 def OMPC_Align : Clause<"align"> {
0051 let clangClass = "OMPAlignClause";
0052 let flangClass = "OmpAlignClause";
0053 }
0054 def OMPC_Aligned : Clause<"aligned"> {
0055 let clangClass = "OMPAlignedClause";
0056 let flangClass = "OmpAlignedClause";
0057 }
0058 def OMPC_Allocate : Clause<"allocate"> {
0059 let clangClass = "OMPAllocateClause";
0060 let flangClass = "OmpAllocateClause";
0061 }
0062 def OMPC_Allocator : Clause<"allocator"> {
0063 let clangClass = "OMPAllocatorClause";
0064 let flangClass = "ScalarIntExpr";
0065 }
0066 def OMPC_AppendArgs : Clause<"append_args"> {
0067 }
0068 def OMPC_At : Clause<"at"> {
0069 let clangClass = "OMPAtClause";
0070 let flangClass = "OmpAtClause";
0071 }
0072 def OMPC_AtomicDefaultMemOrder : Clause<"atomic_default_mem_order"> {
0073 let clangClass = "OMPAtomicDefaultMemOrderClause";
0074 let flangClass = "OmpAtomicDefaultMemOrderClause";
0075 }
0076
0077 def OMP_BIND_parallel : ClauseVal<"parallel",1,1> {}
0078 def OMP_BIND_teams : ClauseVal<"teams",2,1> {}
0079 def OMP_BIND_thread : ClauseVal<"thread",3,1> { let isDefault = true; }
0080 def OMPC_Bind : Clause<"bind"> {
0081 let clangClass = "OMPBindClause";
0082 let flangClass = "OmpBindClause";
0083 let enumClauseValue = "BindKind";
0084 let allowedClauseValues = [
0085 OMP_BIND_parallel,
0086 OMP_BIND_teams,
0087 OMP_BIND_thread
0088 ];
0089 }
0090
0091 def OMP_CANCELLATION_CONSTRUCT_Parallel : ClauseVal<"parallel", 1, 1> {}
0092 def OMP_CANCELLATION_CONSTRUCT_Loop : ClauseVal<"loop", 2, 1> {}
0093 def OMP_CANCELLATION_CONSTRUCT_Sections : ClauseVal<"sections", 3, 1> {}
0094 def OMP_CANCELLATION_CONSTRUCT_Taskgroup : ClauseVal<"taskgroup", 4, 1> {}
0095 def OMP_CANCELLATION_CONSTRUCT_None : ClauseVal<"none", 5, 0> {
0096 let isDefault = 1;
0097 }
0098 def OMPC_CancellationConstructType : Clause<"cancellation_construct_type"> {
0099 let enumClauseValue = "CancellationConstructType";
0100 let allowedClauseValues = [
0101 OMP_CANCELLATION_CONSTRUCT_Parallel,
0102 OMP_CANCELLATION_CONSTRUCT_Loop,
0103 OMP_CANCELLATION_CONSTRUCT_Sections,
0104 OMP_CANCELLATION_CONSTRUCT_Taskgroup,
0105 OMP_CANCELLATION_CONSTRUCT_None
0106 ];
0107 }
0108 def OMPC_Contains : Clause<"contains"> {
0109 let clangClass = "OMPContainsClause";
0110 }
0111 def OMPC_Capture : Clause<"capture"> {
0112 let clangClass = "OMPCaptureClause";
0113 }
0114 def OMPC_Collapse : Clause<"collapse"> {
0115 let clangClass = "OMPCollapseClause";
0116 let flangClass = "ScalarIntConstantExpr";
0117 }
0118 def OMPC_Compare : Clause<"compare"> {
0119 let clangClass = "OMPCompareClause";
0120 }
0121 def OMPC_Copyin : Clause<"copyin"> {
0122 let clangClass = "OMPCopyinClause";
0123 let flangClass = "OmpObjectList";
0124 }
0125 def OMPC_CopyPrivate : Clause<"copyprivate"> {
0126 let clangClass = "OMPCopyprivateClause";
0127 let flangClass = "OmpObjectList";
0128 }
0129 def OMPC_Default : Clause<"default"> {
0130 let clangClass = "OMPDefaultClause";
0131 let flangClass = "OmpDefaultClause";
0132 }
0133 def OMPC_DefaultMap : Clause<"defaultmap"> {
0134 let clangClass = "OMPDefaultmapClause";
0135 let flangClass = "OmpDefaultmapClause";
0136 }
0137 def OMPC_Depend : Clause<"depend"> {
0138 let clangClass = "OMPDependClause";
0139 let flangClass = "OmpDependClause";
0140 }
0141 def OMPC_Depobj : Clause<"depobj"> {
0142 let clangClass = "OMPDepobjClause";
0143 let isImplicit = true;
0144 }
0145 def OMPC_Destroy : Clause<"destroy"> {
0146 let clangClass = "OMPDestroyClause";
0147 let flangClass = "OmpDestroyClause";
0148 let isValueOptional = true;
0149 }
0150 def OMPC_Detach : Clause<"detach"> {
0151 let clangClass = "OMPDetachClause";
0152 let flangClass = "OmpDetachClause";
0153 }
0154 def OMPC_Device : Clause<"device"> {
0155 let clangClass = "OMPDeviceClause";
0156 let flangClass = "OmpDeviceClause";
0157 }
0158 def OMPC_DeviceType : Clause<"device_type"> {
0159 let flangClass = "OmpDeviceTypeClause";
0160 }
0161 def OMPC_DistSchedule : Clause<"dist_schedule"> {
0162 let clangClass = "OMPDistScheduleClause";
0163 let flangClass = "ScalarIntExpr";
0164 let isValueOptional = true;
0165 }
0166 def OMPC_Doacross : Clause<"doacross"> {
0167 let clangClass = "OMPDoacrossClause";
0168 let flangClass = "OmpDoacrossClause";
0169 }
0170 def OMPC_DynamicAllocators : Clause<"dynamic_allocators"> {
0171 let clangClass = "OMPDynamicAllocatorsClause";
0172 }
0173 def OMPC_Enter : Clause<"enter"> {
0174 let flangClass = "OmpObjectList";
0175 }
0176 def OMPC_Exclusive : Clause<"exclusive"> {
0177 let clangClass = "OMPExclusiveClause";
0178 let flangClass = "OmpObjectList";
0179 }
0180 def OMPC_Fail : Clause<"fail"> {
0181 let clangClass = "OMPFailClause";
0182 let flangClass = "OmpFailClause";
0183 }
0184 def OMPC_Filter : Clause<"filter"> {
0185 let clangClass = "OMPFilterClause";
0186 let flangClass = "ScalarIntExpr";
0187 }
0188 def OMPC_Final : Clause<"final"> {
0189 let clangClass = "OMPFinalClause";
0190 let flangClass = "ScalarLogicalExpr";
0191 }
0192 def OMPC_FirstPrivate : Clause<"firstprivate"> {
0193 let clangClass = "OMPFirstprivateClause";
0194 let flangClass = "OmpObjectList";
0195 }
0196 def OMPC_Flush : Clause<"flush"> {
0197 let clangClass = "OMPFlushClause";
0198 let isImplicit = true;
0199 }
0200 def OMPC_From : Clause<"from"> {
0201 let clangClass = "OMPFromClause";
0202 let flangClass = "OmpFromClause";
0203 }
0204 def OMPC_Full: Clause<"full"> {
0205 let clangClass = "OMPFullClause";
0206 }
0207 def OMP_GRAINSIZE_Strict : ClauseVal<"strict", 1, 1> {}
0208 def OMP_GRAINSIZE_Unknown : ClauseVal<"unknown", 2, 0> { let isDefault = 1; }
0209 def OMPC_GrainSize : Clause<"grainsize"> {
0210 let clangClass = "OMPGrainsizeClause";
0211 let flangClass = "OmpGrainsizeClause";
0212 let enumClauseValue = "GrainsizeType";
0213 let allowedClauseValues = [
0214 OMP_GRAINSIZE_Strict,
0215 OMP_GRAINSIZE_Unknown
0216 ];
0217 }
0218 def OMPC_HasDeviceAddr : Clause<"has_device_addr"> {
0219 let clangClass = "OMPHasDeviceAddrClause";
0220 let flangClass = "OmpObjectList";
0221 }
0222 def OMPC_Hint : Clause<"hint"> {
0223 let clangClass = "OMPHintClause";
0224 let flangClass = "ConstantExpr";
0225 }
0226 def OMPC_Holds : Clause<"holds"> {
0227 let clangClass = "OMPHoldsClause";
0228 }
0229 def OMPC_If : Clause<"if"> {
0230 let clangClass = "OMPIfClause";
0231 let flangClass = "OmpIfClause";
0232 }
0233 def OMPC_Inbranch : Clause<"inbranch"> {
0234 }
0235 def OMPC_Inclusive : Clause<"inclusive"> {
0236 let clangClass = "OMPInclusiveClause";
0237 let flangClass = "OmpObjectList";
0238 }
0239 def OMPC_Indirect : Clause<"indirect"> {
0240 }
0241 def OMPC_Init : Clause<"init"> {
0242 let clangClass = "OMPInitClause";
0243 }
0244 def OMPC_InReduction : Clause<"in_reduction"> {
0245 let clangClass = "OMPInReductionClause";
0246 let flangClass = "OmpInReductionClause";
0247 }
0248 def OMPC_IsDevicePtr : Clause<"is_device_ptr"> {
0249 let clangClass = "OMPIsDevicePtrClause";
0250 let flangClass = "OmpObjectList";
0251 }
0252 def OMPC_LastPrivate : Clause<"lastprivate"> {
0253 let clangClass = "OMPLastprivateClause";
0254 let flangClass = "OmpLastprivateClause";
0255 }
0256 def OMPC_Linear : Clause<"linear"> {
0257 let clangClass = "OMPLinearClause";
0258 let flangClass = "OmpLinearClause";
0259 }
0260 def OMPC_Link : Clause<"link"> {
0261 let flangClass = "OmpObjectList";
0262 }
0263 def OMPC_Map : Clause<"map"> {
0264 let clangClass = "OMPMapClause";
0265 let flangClass = "OmpMapClause";
0266 }
0267 def OMPC_Match : Clause<"match"> {
0268 }
0269 def OMP_MEMORY_ORDER_SeqCst : ClauseVal<"seq_cst", 1, 1> {}
0270 def OMP_MEMORY_ORDER_AcqRel : ClauseVal<"acq_rel", 2, 1> {}
0271 def OMP_MEMORY_ORDER_Acquire : ClauseVal<"acquire", 3, 1> {}
0272 def OMP_MEMORY_ORDER_Release : ClauseVal<"release", 4, 1> {}
0273 def OMP_MEMORY_ORDER_Relaxed : ClauseVal<"relaxed", 5, 1> {}
0274 def OMP_MEMORY_ORDER_Default : ClauseVal<"default", 6, 0> {
0275 let isDefault = 1;
0276 }
0277 def OMPC_MemoryOrder : Clause<"memory_order"> {
0278 let enumClauseValue = "MemoryOrderKind";
0279 let allowedClauseValues = [
0280 OMP_MEMORY_ORDER_SeqCst,
0281 OMP_MEMORY_ORDER_AcqRel,
0282 OMP_MEMORY_ORDER_Acquire,
0283 OMP_MEMORY_ORDER_Release,
0284 OMP_MEMORY_ORDER_Relaxed,
0285 OMP_MEMORY_ORDER_Default
0286 ];
0287 }
0288 def OMPC_Mergeable : Clause<"mergeable"> {
0289 let clangClass = "OMPMergeableClause";
0290 }
0291 def OMPC_Message : Clause<"message"> {
0292 let clangClass = "OMPMessageClause";
0293 let flangClass = "OmpMessageClause";
0294 }
0295 def OMPC_NoOpenMP : Clause<"no_openmp"> {
0296 let clangClass = "OMPNoOpenMPClause";
0297 }
0298 def OMPC_NoOpenMPRoutines : Clause<"no_openmp_routines"> {
0299 let clangClass = "OMPNoOpenMPRoutinesClause";
0300 }
0301 def OMPC_NoParallelism : Clause<"no_parallelism"> {
0302 let clangClass = "OMPNoParallelismClause";
0303 }
0304 def OMPC_Nocontext : Clause<"nocontext"> {
0305 let clangClass = "OMPNocontextClause";
0306 let flangClass = "ScalarLogicalExpr";
0307 }
0308 def OMPC_NoGroup : Clause<"nogroup"> {
0309 let clangClass = "OMPNogroupClause";
0310 }
0311 def OMPC_NonTemporal : Clause<"nontemporal"> {
0312 let clangClass = "OMPNontemporalClause";
0313 let flangClass = "Name";
0314 let isValueList = true;
0315 }
0316 def OMPC_Notinbranch : Clause<"notinbranch"> {
0317 }
0318 def OMPC_Novariants : Clause<"novariants"> {
0319 let clangClass = "OMPNovariantsClause";
0320 let flangClass = "ScalarLogicalExpr";
0321 }
0322 def OMPC_NoWait : Clause<"nowait"> {
0323 let clangClass = "OMPNowaitClause";
0324 }
0325 def OMP_NUMTASKS_Strict : ClauseVal<"strict", 1, 1> {}
0326 def OMP_NUMTASKS_Unknown : ClauseVal<"unknown", 2, 0> { let isDefault = 1; }
0327 def OMPC_NumTasks : Clause<"num_tasks"> {
0328 let clangClass = "OMPNumTasksClause";
0329 let flangClass = "OmpNumTasksClause";
0330 let enumClauseValue = "NumTasksType";
0331 let allowedClauseValues = [
0332 OMP_NUMTASKS_Strict,
0333 OMP_NUMTASKS_Unknown
0334 ];
0335 }
0336 def OMPC_NumTeams : Clause<"num_teams"> {
0337 let clangClass = "OMPNumTeamsClause";
0338 let flangClass = "ScalarIntExpr";
0339 }
0340 def OMPC_NumThreads : Clause<"num_threads"> {
0341 let clangClass = "OMPNumThreadsClause";
0342 let flangClass = "ScalarIntExpr";
0343 }
0344 def OMPC_OMPX_Attribute : Clause<"ompx_attribute"> {
0345 let clangClass = "OMPXAttributeClause";
0346 }
0347 def OMPC_OMPX_Bare : Clause<"ompx_bare"> {
0348 let clangClass = "OMPXBareClause";
0349 }
0350 def OMPC_OMPX_DynCGroupMem : Clause<"ompx_dyn_cgroup_mem"> {
0351 let clangClass = "OMPXDynCGroupMemClause";
0352 let flangClass = "ScalarIntExpr";
0353 }
0354 def OMP_ORDER_concurrent : ClauseVal<"concurrent",1,1> {}
0355 def OMP_ORDER_unknown : ClauseVal<"unknown",2,0> { let isDefault = 1; }
0356 def OMPC_Order : Clause<"order"> {
0357 let clangClass = "OMPOrderClause";
0358 let flangClass = "OmpOrderClause";
0359 let enumClauseValue = "OrderKind";
0360 let allowedClauseValues = [
0361 OMP_ORDER_unknown,
0362 OMP_ORDER_concurrent
0363 ];
0364 }
0365 def OMPC_Ordered : Clause<"ordered"> {
0366 let clangClass = "OMPOrderedClause";
0367 let flangClass = "ScalarIntConstantExpr";
0368 let isValueOptional = true;
0369 }
0370 def OMPC_Partial: Clause<"partial"> {
0371 let clangClass = "OMPPartialClause";
0372 let flangClass = "ScalarIntConstantExpr";
0373 let isValueOptional = true;
0374 }
0375 def OMPC_Permutation: Clause<"permutation"> {
0376 let clangClass = "OMPPermutationClause";
0377 let flangClass = "ScalarIntExpr";
0378 let isValueList = true;
0379 }
0380 def OMPC_Priority : Clause<"priority"> {
0381 let clangClass = "OMPPriorityClause";
0382 let flangClass = "ScalarIntExpr";
0383 }
0384 def OMPC_Private : Clause<"private"> {
0385 let clangClass = "OMPPrivateClause";
0386 let flangClass = "OmpObjectList";
0387 }
0388 def OMP_PROC_BIND_master : ClauseVal<"master",2,1> {}
0389 def OMP_PROC_BIND_close : ClauseVal<"close",3,1> {}
0390 def OMP_PROC_BIND_spread : ClauseVal<"spread",4,1> {}
0391 def OMP_PROC_BIND_primary : ClauseVal<"primary",5,1> {}
0392 def OMP_PROC_BIND_default : ClauseVal<"default",6,0> {}
0393 def OMP_PROC_BIND_unknown : ClauseVal<"unknown",7,0> { let isDefault = true; }
0394 def OMPC_ProcBind : Clause<"proc_bind"> {
0395 let clangClass = "OMPProcBindClause";
0396 let flangClass = "OmpProcBindClause";
0397 let enumClauseValue = "ProcBindKind";
0398 let allowedClauseValues = [
0399 OMP_PROC_BIND_primary,
0400 OMP_PROC_BIND_master,
0401 OMP_PROC_BIND_close,
0402 OMP_PROC_BIND_spread,
0403 OMP_PROC_BIND_default,
0404 OMP_PROC_BIND_unknown
0405 ];
0406 }
0407 def OMPC_Read : Clause<"read"> {
0408 let clangClass = "OMPReadClause";
0409 }
0410 def OMPC_Reduction : Clause<"reduction"> {
0411 let clangClass = "OMPReductionClause";
0412 let flangClass = "OmpReductionClause";
0413 }
0414 def OMPC_Relaxed : Clause<"relaxed"> {
0415 let clangClass = "OMPRelaxedClause";
0416 }
0417 def OMPC_Release : Clause<"release"> {
0418 let clangClass = "OMPReleaseClause";
0419 }
0420 def OMPC_ReverseOffload : Clause<"reverse_offload"> {
0421 let clangClass = "OMPReverseOffloadClause";
0422 }
0423 def OMPC_SafeLen : Clause<"safelen"> {
0424 let clangClass = "OMPSafelenClause";
0425 let flangClass = "ScalarIntConstantExpr";
0426 }
0427 def OMP_SCHEDULE_Static : ClauseVal<"static", 2, 1> {}
0428 def OMP_SCHEDULE_Dynamic : ClauseVal<"dynamic", 3, 1> {}
0429 def OMP_SCHEDULE_Guided : ClauseVal<"guided", 4, 1> {}
0430 def OMP_SCHEDULE_Auto : ClauseVal<"auto", 5, 1> {}
0431 def OMP_SCHEDULE_Runtime : ClauseVal<"runtime", 6, 1> {}
0432 def OMP_SCHEDULE_Default : ClauseVal<"default", 7, 0> { let isDefault = 1; }
0433 def OMPC_Schedule : Clause<"schedule"> {
0434 let clangClass = "OMPScheduleClause";
0435 let flangClass = "OmpScheduleClause";
0436 let enumClauseValue = "ScheduleKind";
0437 let allowedClauseValues = [
0438 OMP_SCHEDULE_Static,
0439 OMP_SCHEDULE_Dynamic,
0440 OMP_SCHEDULE_Guided,
0441 OMP_SCHEDULE_Auto,
0442 OMP_SCHEDULE_Runtime,
0443 OMP_SCHEDULE_Default
0444 ];
0445 }
0446 def OMPC_SeqCst : Clause<"seq_cst"> {
0447 let clangClass = "OMPSeqCstClause";
0448 }
0449 def OMPC_Severity : Clause<"severity"> {
0450 let clangClass = "OMPSeverityClause";
0451 let flangClass = "OmpSeverityClause";
0452 }
0453 def OMPC_Shared : Clause<"shared"> {
0454 let clangClass = "OMPSharedClause";
0455 let flangClass = "OmpObjectList";
0456 }
0457 def OMPC_Simd : Clause<"simd"> {
0458 let clangClass = "OMPSIMDClause";
0459 }
0460 def OMPC_SimdLen : Clause<"simdlen"> {
0461 let clangClass = "OMPSimdlenClause";
0462 let flangClass = "ScalarIntConstantExpr";
0463 }
0464 def OMPC_Sizes: Clause<"sizes"> {
0465 let clangClass = "OMPSizesClause";
0466 let flangClass = "ScalarIntExpr";
0467 let isValueList = true;
0468 }
0469 def OMPC_TaskReduction : Clause<"task_reduction"> {
0470 let clangClass = "OMPTaskReductionClause";
0471 let flangClass = "OmpTaskReductionClause";
0472 }
0473 def OMPC_ThreadLimit : Clause<"thread_limit"> {
0474 let clangClass = "OMPThreadLimitClause";
0475 let flangClass = "ScalarIntExpr";
0476 }
0477 def OMPC_ThreadPrivate : Clause<"threadprivate"> {
0478 let alternativeName = "threadprivate or thread local";
0479 let isImplicit = true;
0480 }
0481 def OMPC_Threads : Clause<"threads"> {
0482 let clangClass = "OMPThreadsClause";
0483 }
0484 def OMPC_To : Clause<"to"> {
0485 let clangClass = "OMPToClause";
0486 let flangClass = "OmpToClause";
0487 }
0488 def OMPC_UnifiedAddress : Clause<"unified_address"> {
0489 let clangClass = "OMPUnifiedAddressClause";
0490 }
0491 def OMPC_UnifiedSharedMemory : Clause<"unified_shared_memory"> {
0492 let clangClass = "OMPUnifiedSharedMemoryClause";
0493 }
0494 def OMPC_Uniform : Clause<"uniform"> {
0495 let flangClass = "Name";
0496 let isValueList = true;
0497 }
0498 def OMPC_Unknown : Clause<"unknown"> {
0499 let isImplicit = true;
0500 let isDefault = true;
0501 }
0502 def OMPC_Untied : Clause<"untied"> {
0503 let clangClass = "OMPUntiedClause";
0504 }
0505 def OMPC_Update : Clause<"update"> {
0506 let clangClass = "OMPUpdateClause";
0507 let flangClass = "OmpUpdateClause";
0508 }
0509 def OMPC_Use : Clause<"use"> {
0510 let clangClass = "OMPUseClause";
0511 }
0512 def OMPC_UsesAllocators : Clause<"uses_allocators"> {
0513 let clangClass = "OMPUsesAllocatorsClause";
0514 }
0515 def OMPC_UseDeviceAddr : Clause<"use_device_addr"> {
0516 let clangClass = "OMPUseDeviceAddrClause";
0517 let flangClass = "OmpObjectList";
0518 }
0519 def OMPC_UseDevicePtr : Clause<"use_device_ptr"> {
0520 let clangClass = "OMPUseDevicePtrClause";
0521 let flangClass = "OmpObjectList";
0522 }
0523 def OMPC_Weak : Clause<"weak"> {
0524 let clangClass = "OMPWeakClause";
0525 }
0526 def OMPC_When: Clause<"when"> {
0527 }
0528 def OMPC_Write : Clause<"write"> {
0529 let clangClass = "OMPWriteClause";
0530 }
0531
0532 //===----------------------------------------------------------------------===//
0533 // Definitions of OpenMP leaf directives
0534 // Sorted alphabetically wrt directive spelling, except "end xyz" immediately
0535 // follows "xyz".
0536 //===----------------------------------------------------------------------===//
0537
0538 def OMP_Allocate : Directive<"allocate"> {
0539 let allowedOnceClauses = [
0540 VersionedClause<OMPC_Align, 51>,
0541 VersionedClause<OMPC_Allocator>,
0542 ];
0543 let association = AS_None;
0544 let category = CA_Declarative;
0545 }
0546 def OMP_Allocators : Directive<"allocators"> {
0547 let allowedClauses = [
0548 VersionedClause<OMPC_Allocate>,
0549 ];
0550 let association = AS_Block;
0551 let category = CA_Executable;
0552 }
0553 def OMP_Assumes : Directive<"assumes"> {
0554 let association = AS_None;
0555 let category = CA_Informational;
0556 }
0557 def OMP_EndAssumes : Directive<"end assumes"> {
0558 let association = AS_Delimited;
0559 let category = OMP_Assumes.category;
0560 }
0561 def OMP_Assume : Directive<"assume"> {
0562 let association = AS_Block;
0563 let category = CA_Informational;
0564 let allowedOnceClauses = [
0565 VersionedClause<OMPC_Absent, 51>,
0566 VersionedClause<OMPC_Contains, 51>,
0567 VersionedClause<OMPC_Holds, 51>,
0568 VersionedClause<OMPC_NoOpenMP, 51>,
0569 VersionedClause<OMPC_NoOpenMPRoutines, 51>,
0570 VersionedClause<OMPC_NoParallelism, 51>,
0571 ];
0572 }
0573 def OMP_Atomic : Directive<"atomic"> {
0574 let allowedClauses = [
0575 VersionedClause<OMPC_Capture>,
0576 VersionedClause<OMPC_Compare, 51>,
0577 VersionedClause<OMPC_Read>,
0578 VersionedClause<OMPC_Update>,
0579 VersionedClause<OMPC_Write>,
0580 ];
0581 let allowedOnceClauses = [
0582 VersionedClause<OMPC_AcqRel, 50>,
0583 VersionedClause<OMPC_Acquire, 50>,
0584 VersionedClause<OMPC_Fail, 51>,
0585 VersionedClause<OMPC_Hint, 50>,
0586 VersionedClause<OMPC_Relaxed, 50>,
0587 VersionedClause<OMPC_Release, 50>,
0588 VersionedClause<OMPC_SeqCst>,
0589 VersionedClause<OMPC_Weak, 51>,
0590 ];
0591 let association = AS_Block;
0592 let category = CA_Executable;
0593 }
0594 def OMP_Barrier : Directive<"barrier"> {
0595 let association = AS_None;
0596 let category = CA_Executable;
0597 }
0598 def OMP_BeginAssumes : Directive<"begin assumes"> {
0599 let association = AS_Delimited;
0600 let category = CA_Informational;
0601 }
0602 def OMP_BeginDeclareTarget : Directive<"begin declare target"> {
0603 let allowedClauses = [
0604 VersionedClause<OMPC_DeviceType>,
0605 VersionedClause<OMPC_Indirect>,
0606 VersionedClause<OMPC_Link>,
0607 VersionedClause<OMPC_To>,
0608 ];
0609 let association = AS_Delimited;
0610 let category = CA_Declarative;
0611 }
0612 def OMP_BeginDeclareVariant : Directive<"begin declare variant"> {
0613 let association = AS_Delimited;
0614 let category = CA_Declarative;
0615 }
0616 def OMP_Cancel : Directive<"cancel"> {
0617 let allowedOnceClauses = [
0618 VersionedClause<OMPC_If>,
0619 ];
0620 let association = AS_None;
0621 let category = CA_Executable;
0622 }
0623 def OMP_CancellationPoint : Directive<"cancellation point"> {
0624 let association = AS_None;
0625 let category = CA_Executable;
0626 }
0627 def OMP_Critical : Directive<"critical"> {
0628 let allowedClauses = [
0629 VersionedClause<OMPC_Hint>,
0630 ];
0631 let association = AS_Block;
0632 let category = CA_Executable;
0633 }
0634 def OMP_DeclareMapper : Directive<"declare mapper"> {
0635 let requiredClauses = [
0636 VersionedClause<OMPC_Map, 45>,
0637 ];
0638 let association = AS_None;
0639 let category = CA_Declarative;
0640 }
0641 def OMP_DeclareReduction : Directive<"declare reduction"> {
0642 let association = AS_None;
0643 let category = CA_Declarative;
0644 }
0645 def OMP_DeclareSimd : Directive<"declare simd"> {
0646 let allowedClauses = [
0647 VersionedClause<OMPC_Aligned>,
0648 VersionedClause<OMPC_Linear>,
0649 VersionedClause<OMPC_Uniform>,
0650 ];
0651 let allowedOnceClauses = [
0652 VersionedClause<OMPC_SimdLen>,
0653 ];
0654 let allowedExclusiveClauses = [
0655 VersionedClause<OMPC_Inbranch>,
0656 VersionedClause<OMPC_Notinbranch>,
0657 ];
0658 let association = AS_Declaration;
0659 let category = CA_Declarative;
0660 }
0661 def OMP_DeclareTarget : Directive<"declare target"> {
0662 let allowedClauses = [
0663 VersionedClause<OMPC_Enter, 52>,
0664 VersionedClause<OMPC_Indirect>,
0665 VersionedClause<OMPC_Link>,
0666 VersionedClause<OMPC_To>,
0667 ];
0668 let allowedOnceClauses = [
0669 VersionedClause<OMPC_DeviceType, 50>,
0670 ];
0671 let association = AS_None;
0672 let category = CA_Declarative;
0673 }
0674 def OMP_EndDeclareTarget : Directive<"end declare target"> {
0675 let association = AS_Delimited;
0676 let category = OMP_DeclareTarget.category;
0677 }
0678 def OMP_DeclareVariant : Directive<"declare variant"> {
0679 let allowedClauses = [
0680 VersionedClause<OMPC_Match>,
0681 ];
0682 let allowedExclusiveClauses = [
0683 VersionedClause<OMPC_AdjustArgs, 51>,
0684 VersionedClause<OMPC_AppendArgs, 51>,
0685 ];
0686 let association = AS_Declaration;
0687 let category = CA_Declarative;
0688 }
0689 def OMP_EndDeclareVariant : Directive<"end declare variant"> {
0690 let association = AS_Delimited;
0691 let category = OMP_DeclareVariant.category;
0692 }
0693 def OMP_Depobj : Directive<"depobj"> {
0694 let allowedClauses = [
0695 VersionedClause<OMPC_Depend, 50>,
0696 // TODO This should ne `none` instead. Comment carried over from
0697 // OMPKinds.def.
0698 VersionedClause<OMPC_Depobj, 50>,
0699 VersionedClause<OMPC_Destroy, 50>,
0700 VersionedClause<OMPC_Update, 50>,
0701 ];
0702 let association = AS_None;
0703 let category = CA_Executable;
0704 }
0705 def OMP_dispatch : Directive<"dispatch"> {
0706 let allowedClauses = [
0707 VersionedClause<OMPC_Depend>,
0708 VersionedClause<OMPC_Device>,
0709 VersionedClause<OMPC_HasDeviceAddr, 51>,
0710 VersionedClause<OMPC_IsDevicePtr>,
0711 VersionedClause<OMPC_Nocontext>,
0712 VersionedClause<OMPC_Novariants>,
0713 VersionedClause<OMPC_NoWait>,
0714 ];
0715 let association = AS_Block;
0716 let category = CA_Executable;
0717 }
0718 def OMP_Distribute : Directive<"distribute"> {
0719 let allowedClauses = [
0720 VersionedClause<OMPC_Allocate>,
0721 VersionedClause<OMPC_FirstPrivate>,
0722 VersionedClause<OMPC_LastPrivate>,
0723 VersionedClause<OMPC_Private>,
0724 ];
0725 let allowedOnceClauses = [
0726 VersionedClause<OMPC_Collapse>,
0727 VersionedClause<OMPC_DistSchedule>,
0728 VersionedClause<OMPC_Order, 50>,
0729 ];
0730 let association = AS_Loop;
0731 let category = CA_Executable;
0732 }
0733 def OMP_Do : Directive<"do"> {
0734 let allowedClauses = [
0735 VersionedClause<OMPC_FirstPrivate>,
0736 VersionedClause<OMPC_LastPrivate>,
0737 VersionedClause<OMPC_Linear>,
0738 VersionedClause<OMPC_Private>,
0739 VersionedClause<OMPC_Reduction>,
0740 ];
0741 let allowedOnceClauses = [
0742 VersionedClause<OMPC_Collapse>,
0743 VersionedClause<OMPC_NoWait>,
0744 VersionedClause<OMPC_Order, 50>,
0745 VersionedClause<OMPC_Ordered>,
0746 VersionedClause<OMPC_Schedule>,
0747 ];
0748 let association = AS_Loop;
0749 let category = CA_Executable;
0750 }
0751 def OMP_EndDo : Directive<"end do"> {
0752 let allowedOnceClauses = [
0753 VersionedClause<OMPC_NoWait>,
0754 ];
0755 // Needed for association computation, since OMP_Do has it "from leafConstructs".
0756 let leafConstructs = OMP_Do.leafConstructs;
0757 let association = OMP_Do.association;
0758 let category = OMP_Do.category;
0759 }
0760 def OMP_Error : Directive<"error"> {
0761 let allowedClauses = [
0762 VersionedClause<OMPC_At, 51>,
0763 VersionedClause<OMPC_Message, 51>,
0764 VersionedClause<OMPC_Severity, 51>,
0765 ];
0766 let association = AS_None;
0767 let category = CA_Utility;
0768 }
0769 def OMP_Flush : Directive<"flush"> {
0770 let allowedOnceClauses = [
0771 VersionedClause<OMPC_AcqRel, 50>,
0772 VersionedClause<OMPC_Acquire, 50>,
0773 // TODO This should ne `none` instead. Comment carried over from
0774 // OMPKinds.def.
0775 VersionedClause<OMPC_Flush>,
0776 VersionedClause<OMPC_Release, 50>,
0777 VersionedClause<OMPC_SeqCst, 51>,
0778 ];
0779 let association = AS_None;
0780 let category = CA_Executable;
0781 }
0782 def OMP_For : Directive<"for"> {
0783 let allowedClauses = [
0784 VersionedClause<OMPC_Allocate>,
0785 VersionedClause<OMPC_Collapse>,
0786 VersionedClause<OMPC_FirstPrivate>,
0787 VersionedClause<OMPC_LastPrivate>,
0788 VersionedClause<OMPC_Linear>,
0789 VersionedClause<OMPC_NoWait>,
0790 VersionedClause<OMPC_Order, 50>,
0791 VersionedClause<OMPC_Ordered>,
0792 VersionedClause<OMPC_Private>,
0793 VersionedClause<OMPC_Reduction>,
0794 VersionedClause<OMPC_Schedule>,
0795 ];
0796 let association = AS_Loop;
0797 let category = CA_Executable;
0798 }
0799 def OMP_Interchange : Directive<"interchange"> {
0800 let allowedOnceClauses = [
0801 VersionedClause<OMPC_Permutation>,
0802 ];
0803 let association = AS_Loop;
0804 let category = CA_Executable;
0805 }
0806 def OMP_interop : Directive<"interop"> {
0807 let allowedClauses = [
0808 VersionedClause<OMPC_Depend>,
0809 VersionedClause<OMPC_Destroy>,
0810 VersionedClause<OMPC_Device>,
0811 VersionedClause<OMPC_Init>,
0812 VersionedClause<OMPC_NoWait>,
0813 VersionedClause<OMPC_Use>,
0814 ];
0815 let association = AS_None;
0816 let category = CA_Executable;
0817 }
0818 def OMP_loop : Directive<"loop"> {
0819 let allowedClauses = [
0820 VersionedClause<OMPC_LastPrivate>,
0821 VersionedClause<OMPC_Private>,
0822 VersionedClause<OMPC_Reduction>,
0823 ];
0824 let allowedOnceClauses = [
0825 VersionedClause<OMPC_Bind, 50>,
0826 VersionedClause<OMPC_Collapse>,
0827 VersionedClause<OMPC_Order, 50>,
0828 ];
0829 let association = AS_Loop;
0830 let category = CA_Executable;
0831 }
0832 def OMP_masked : Directive<"masked"> {
0833 let allowedOnceClauses = [
0834 VersionedClause<OMPC_Filter>,
0835 ];
0836 let association = AS_Block;
0837 let category = CA_Executable;
0838 }
0839 def OMP_Master : Directive<"master"> {
0840 let association = AS_Block;
0841 let category = CA_Executable;
0842 }
0843 def OMP_Metadirective : Directive<"metadirective"> {
0844 let allowedClauses = [
0845 VersionedClause<OMPC_When>,
0846 ];
0847 let allowedOnceClauses = [
0848 VersionedClause<OMPC_Default>,
0849 ];
0850 let association = AS_None;
0851 let category = CA_Meta;
0852 }
0853 def OMP_Nothing : Directive<"nothing"> {
0854 let association = AS_None;
0855 let category = CA_Utility;
0856 }
0857 def OMP_Ordered : Directive<"ordered"> {
0858 let allowedClauses = [
0859 VersionedClause<OMPC_Depend>,
0860 VersionedClause<OMPC_Doacross, 52>,
0861 ];
0862 let allowedOnceClauses = [
0863 VersionedClause<OMPC_Simd>,
0864 VersionedClause<OMPC_Threads>,
0865 ];
0866 let association = AS_None;
0867 // There is also a block-associated "ordered" directive.
0868 let category = CA_Executable;
0869 }
0870 def OMP_Parallel : Directive<"parallel"> {
0871 let allowedClauses = [
0872 VersionedClause<OMPC_Allocate>,
0873 VersionedClause<OMPC_Copyin>,
0874 VersionedClause<OMPC_FirstPrivate>,
0875 VersionedClause<OMPC_OMPX_Attribute>,
0876 VersionedClause<OMPC_Private>,
0877 VersionedClause<OMPC_Reduction>,
0878 VersionedClause<OMPC_Shared>,
0879 ];
0880 let allowedOnceClauses = [
0881 VersionedClause<OMPC_Default>,
0882 VersionedClause<OMPC_If>,
0883 VersionedClause<OMPC_NumThreads>,
0884 VersionedClause<OMPC_ProcBind>,
0885 ];
0886 let association = AS_Block;
0887 let category = CA_Executable;
0888 }
0889 def OMP_Requires : Directive<"requires"> {
0890 let allowedOnceClauses = [
0891 VersionedClause<OMPC_UnifiedAddress>,
0892 VersionedClause<OMPC_UnifiedSharedMemory>,
0893 // OpenMP 5.2 Spec: If an implementation is not supporting a requirement
0894 // (reverse offload in this case) then it should give compile-time error
0895 // termination.
0896 // Seeting supported version for reverse_offload to a distant future version
0897 // 9.9 so that its partial support can be tested in the meantime.
0898 //
0899 // TODO: Correct this supprted version number whenever complete
0900 // implementation of reverse_offload is available.
0901 VersionedClause<OMPC_AtomicDefaultMemOrder>,
0902 VersionedClause<OMPC_DynamicAllocators>,
0903 VersionedClause<OMPC_ReverseOffload, 99>,
0904 ];
0905 let association = AS_None;
0906 let category = CA_Informational;
0907 }
0908 def OMP_Reverse : Directive<"reverse"> {
0909 let association = AS_Loop;
0910 let category = CA_Executable;
0911 }
0912 def OMP_Scan : Directive<"scan"> {
0913 let allowedClauses = [
0914 VersionedClause<OMPC_Exclusive>,
0915 VersionedClause<OMPC_Inclusive>,
0916 ];
0917 let association = AS_Separating;
0918 let category = CA_Subsidiary;
0919 }
0920 def OMP_Scope : Directive<"scope"> {
0921 let allowedClauses = [
0922 VersionedClause<OMPC_Private, 51>,
0923 VersionedClause<OMPC_Reduction, 51>,
0924 VersionedClause<OMPC_FirstPrivate, 52>,
0925 VersionedClause<OMPC_Allocate, 52>,
0926 ];
0927 let allowedOnceClauses = [
0928 VersionedClause<OMPC_NoWait, 51>,
0929 ];
0930 let association = AS_Block;
0931 let category = CA_Executable;
0932 }
0933 def OMP_EndScope : Directive<"end scope"> {
0934 let allowedOnceClauses = [
0935 VersionedClause<OMPC_NoWait>,
0936 ];
0937 let leafConstructs = OMP_Scope.leafConstructs;
0938 let association = OMP_Scope.association;
0939 let category = OMP_Scope.category;
0940 }
0941 def OMP_Section : Directive<"section"> {
0942 let association = AS_Separating;
0943 let category = CA_Subsidiary;
0944 }
0945 def OMP_Sections : Directive<"sections"> {
0946 let allowedClauses = [
0947 VersionedClause<OMPC_Allocate>,
0948 VersionedClause<OMPC_FirstPrivate>,
0949 VersionedClause<OMPC_LastPrivate>,
0950 VersionedClause<OMPC_NoWait>,
0951 VersionedClause<OMPC_Private>,
0952 VersionedClause<OMPC_Reduction>,
0953 ];
0954 let association = AS_Block;
0955 let category = CA_Executable;
0956 }
0957 def OMP_EndSections : Directive<"end sections"> {
0958 let allowedOnceClauses = [
0959 VersionedClause<OMPC_NoWait>,
0960 ];
0961 let leafConstructs = OMP_Sections.leafConstructs;
0962 let association = OMP_Sections.association;
0963 let category = OMP_Sections.category;
0964 }
0965 def OMP_Simd : Directive<"simd"> {
0966 let allowedClauses = [
0967 VersionedClause<OMPC_Aligned>,
0968 VersionedClause<OMPC_Allocate>,
0969 VersionedClause<OMPC_LastPrivate>,
0970 VersionedClause<OMPC_Linear>,
0971 VersionedClause<OMPC_NonTemporal, 50>,
0972 VersionedClause<OMPC_Private>,
0973 VersionedClause<OMPC_Reduction>,
0974 ];
0975 let allowedOnceClauses = [
0976 VersionedClause<OMPC_Collapse>,
0977 VersionedClause<OMPC_If, 50>,
0978 VersionedClause<OMPC_Order, 50>,
0979 VersionedClause<OMPC_SafeLen>,
0980 VersionedClause<OMPC_SimdLen>,
0981 ];
0982 let association = AS_Loop;
0983 let category = CA_Executable;
0984 }
0985 def OMP_Single : Directive<"single"> {
0986 let allowedClauses = [
0987 VersionedClause<OMPC_Allocate>,
0988 VersionedClause<OMPC_CopyPrivate>,
0989 VersionedClause<OMPC_FirstPrivate>,
0990 VersionedClause<OMPC_NoWait>,
0991 VersionedClause<OMPC_Private>,
0992 ];
0993 let association = AS_Block;
0994 let category = CA_Executable;
0995 }
0996 def OMP_EndSingle : Directive<"end single"> {
0997 let allowedClauses = [
0998 VersionedClause<OMPC_CopyPrivate>,
0999 ];
1000 let allowedOnceClauses = [
1001 VersionedClause<OMPC_NoWait>,
1002 ];
1003 let leafConstructs = OMP_Single.leafConstructs;
1004 let association = OMP_Single.association;
1005 let category = OMP_Single.category;
1006 }
1007 def OMP_Target : Directive<"target"> {
1008 let allowedClauses = [
1009 VersionedClause<OMPC_Allocate>,
1010 VersionedClause<OMPC_Depend>,
1011 VersionedClause<OMPC_FirstPrivate>,
1012 VersionedClause<OMPC_HasDeviceAddr, 51>,
1013 VersionedClause<OMPC_InReduction, 50>,
1014 VersionedClause<OMPC_IsDevicePtr>,
1015 VersionedClause<OMPC_Map>,
1016 VersionedClause<OMPC_OMPX_Attribute>,
1017 VersionedClause<OMPC_Private>,
1018 VersionedClause<OMPC_UsesAllocators, 50>,
1019 ];
1020 let allowedOnceClauses = [
1021 VersionedClause<OMPC_DefaultMap>,
1022 VersionedClause<OMPC_Device>,
1023 VersionedClause<OMPC_If>,
1024 VersionedClause<OMPC_NoWait>,
1025 VersionedClause<OMPC_OMPX_Bare>,
1026 VersionedClause<OMPC_OMPX_DynCGroupMem>,
1027 VersionedClause<OMPC_ThreadLimit, 51>,
1028 ];
1029 let association = AS_Block;
1030 let category = CA_Executable;
1031 }
1032 def OMP_TargetData : Directive<"target data"> {
1033 let allowedOnceClauses = [
1034 VersionedClause<OMPC_Device>,
1035 VersionedClause<OMPC_If>,
1036 ];
1037 let requiredClauses = [
1038 VersionedClause<OMPC_Map>,
1039 VersionedClause<OMPC_UseDeviceAddr, 50>,
1040 VersionedClause<OMPC_UseDevicePtr>,
1041 ];
1042 let association = AS_Block;
1043 let category = CA_Executable;
1044 }
1045 def OMP_TargetEnterData : Directive<"target enter data"> {
1046 let allowedClauses = [
1047 VersionedClause<OMPC_Depend>,
1048 ];
1049 let allowedOnceClauses = [
1050 VersionedClause<OMPC_Device>,
1051 VersionedClause<OMPC_If>,
1052 VersionedClause<OMPC_NoWait>,
1053 ];
1054 let requiredClauses = [
1055 VersionedClause<OMPC_Map>,
1056 ];
1057 let association = AS_None;
1058 let category = CA_Executable;
1059 }
1060 def OMP_TargetExitData : Directive<"target exit data"> {
1061 let allowedClauses = [
1062 VersionedClause<OMPC_Depend>,
1063 ];
1064 let allowedOnceClauses = [
1065 VersionedClause<OMPC_Device>,
1066 VersionedClause<OMPC_If>,
1067 VersionedClause<OMPC_NoWait>,
1068 ];
1069 let requiredClauses = [
1070 VersionedClause<OMPC_Map>,
1071 ];
1072 let association = AS_None;
1073 let category = CA_Executable;
1074 }
1075 def OMP_TargetUpdate : Directive<"target update"> {
1076 let allowedClauses = [
1077 VersionedClause<OMPC_Depend>,
1078 VersionedClause<OMPC_From>,
1079 VersionedClause<OMPC_To>,
1080 ];
1081 let allowedOnceClauses = [
1082 VersionedClause<OMPC_Device>,
1083 VersionedClause<OMPC_If>,
1084 VersionedClause<OMPC_NoWait>,
1085 ];
1086 let association = AS_None;
1087 let category = CA_Executable;
1088 }
1089 def OMP_Task : Directive<"task"> {
1090 let allowedClauses = [
1091 VersionedClause<OMPC_Affinity, 50>,
1092 VersionedClause<OMPC_Allocate>,
1093 VersionedClause<OMPC_Depend>,
1094 VersionedClause<OMPC_Detach, 50>,
1095 VersionedClause<OMPC_FirstPrivate>,
1096 VersionedClause<OMPC_InReduction>,
1097 VersionedClause<OMPC_Mergeable>,
1098 VersionedClause<OMPC_Private>,
1099 VersionedClause<OMPC_Shared>,
1100 VersionedClause<OMPC_Untied>,
1101 ];
1102 let allowedOnceClauses = [
1103 VersionedClause<OMPC_Default>,
1104 VersionedClause<OMPC_Final>,
1105 VersionedClause<OMPC_If>,
1106 VersionedClause<OMPC_Priority>,
1107 ];
1108 let association = AS_Block;
1109 let category = CA_Executable;
1110 }
1111 def OMP_TaskGroup : Directive<"taskgroup"> {
1112 let allowedClauses = [
1113 VersionedClause<OMPC_Allocate, 50>,
1114 VersionedClause<OMPC_TaskReduction, 50>,
1115 ];
1116 let association = AS_Block;
1117 let category = CA_Executable;
1118 }
1119 def OMP_TaskLoop : Directive<"taskloop"> {
1120 let allowedClauses = [
1121 VersionedClause<OMPC_Allocate>,
1122 VersionedClause<OMPC_FirstPrivate>,
1123 VersionedClause<OMPC_InReduction>,
1124 VersionedClause<OMPC_LastPrivate>,
1125 VersionedClause<OMPC_Mergeable>,
1126 VersionedClause<OMPC_NoGroup>,
1127 VersionedClause<OMPC_Private>,
1128 VersionedClause<OMPC_Reduction>,
1129 VersionedClause<OMPC_Shared>,
1130 VersionedClause<OMPC_Untied>,
1131 ];
1132 let allowedOnceClauses = [
1133 VersionedClause<OMPC_Collapse>,
1134 VersionedClause<OMPC_Default>,
1135 VersionedClause<OMPC_Final>,
1136 VersionedClause<OMPC_If>,
1137 VersionedClause<OMPC_Priority>,
1138 ];
1139 let allowedExclusiveClauses = [
1140 VersionedClause<OMPC_GrainSize>,
1141 VersionedClause<OMPC_NumTasks>,
1142 ];
1143 let association = AS_Loop;
1144 let category = CA_Executable;
1145 }
1146 def OMP_TaskWait : Directive<"taskwait"> {
1147 let allowedClauses = [
1148 VersionedClause<OMPC_Depend, 50>,
1149 VersionedClause<OMPC_NoWait, 51>,
1150 ];
1151 let association = AS_None;
1152 let category = CA_Executable;
1153 }
1154 def OMP_TaskYield : Directive<"taskyield"> {
1155 let association = AS_None;
1156 let category = CA_Executable;
1157 }
1158 def OMP_Teams : Directive<"teams"> {
1159 let allowedClauses = [
1160 VersionedClause<OMPC_Allocate>,
1161 VersionedClause<OMPC_FirstPrivate>,
1162 VersionedClause<OMPC_OMPX_Attribute>,
1163 VersionedClause<OMPC_Private>,
1164 VersionedClause<OMPC_Reduction>,
1165 VersionedClause<OMPC_Shared>,
1166 ];
1167 let allowedOnceClauses = [
1168 VersionedClause<OMPC_Default>,
1169 VersionedClause<OMPC_If, 52>,
1170 VersionedClause<OMPC_NumTeams>,
1171 VersionedClause<OMPC_ThreadLimit>,
1172 ];
1173 let association = AS_Block;
1174 let category = CA_Executable;
1175 }
1176 def OMP_ThreadPrivate : Directive<"threadprivate"> {
1177 let association = AS_None;
1178 let category = CA_Declarative;
1179 }
1180 def OMP_Tile : Directive<"tile"> {
1181 let allowedOnceClauses = [
1182 VersionedClause<OMPC_Sizes, 51>,
1183 ];
1184 let association = AS_Loop;
1185 let category = CA_Executable;
1186 }
1187 def OMP_Unknown : Directive<"unknown"> {
1188 let isDefault = true;
1189 let association = AS_None;
1190 let category = CA_Utility;
1191 }
1192 def OMP_Unroll : Directive<"unroll"> {
1193 let allowedOnceClauses = [
1194 VersionedClause<OMPC_Full, 51>,
1195 VersionedClause<OMPC_Partial, 51>,
1196 ];
1197 let association = AS_Loop;
1198 let category = CA_Executable;
1199 }
1200 def OMP_Workshare : Directive<"workshare"> {
1201 let allowedOnceClauses = [
1202 VersionedClause<OMPC_NoWait>,
1203 ];
1204 let association = AS_Block;
1205 let category = CA_Executable;
1206 }
1207 def OMP_EndWorkshare : Directive<"end workshare"> {
1208 let allowedOnceClauses = [
1209 VersionedClause<OMPC_NoWait>,
1210 ];
1211 let leafConstructs = OMP_Workshare.leafConstructs;
1212 let association = OMP_Workshare.association;
1213 let category = OMP_Workshare.category;
1214 }
1215
1216 //===----------------------------------------------------------------------===//
1217 // Definitions of OpenMP compound directives
1218 // Sorted alphabetically wrt directive spelling, except "end xyz" immediately
1219 // follows "xyz".
1220 //===----------------------------------------------------------------------===//
1221
1222 def OMP_DistributeParallelDo : Directive<"distribute parallel do"> {
1223 let allowedClauses = [
1224 VersionedClause<OMPC_Allocate>,
1225 VersionedClause<OMPC_Copyin>,
1226 VersionedClause<OMPC_Default>,
1227 VersionedClause<OMPC_FirstPrivate>,
1228 VersionedClause<OMPC_LastPrivate>,
1229 VersionedClause<OMPC_Linear>,
1230 VersionedClause<OMPC_Private>,
1231 VersionedClause<OMPC_Reduction>,
1232 VersionedClause<OMPC_Shared>,
1233 ];
1234 let allowedOnceClauses = [
1235 VersionedClause<OMPC_Collapse>,
1236 VersionedClause<OMPC_DistSchedule>,
1237 VersionedClause<OMPC_If>,
1238 VersionedClause<OMPC_NumThreads>,
1239 VersionedClause<OMPC_Order, 50>,
1240 VersionedClause<OMPC_ProcBind>,
1241 VersionedClause<OMPC_Schedule>,
1242 ];
1243 let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_Do];
1244 let category = CA_Executable;
1245 }
1246 def OMP_DistributeParallelDoSimd : Directive<"distribute parallel do simd"> {
1247 let allowedClauses = [
1248 VersionedClause<OMPC_Aligned>,
1249 VersionedClause<OMPC_Allocate>,
1250 VersionedClause<OMPC_Collapse>,
1251 VersionedClause<OMPC_Copyin>,
1252 VersionedClause<OMPC_Default>,
1253 VersionedClause<OMPC_DistSchedule>,
1254 VersionedClause<OMPC_FirstPrivate>,
1255 VersionedClause<OMPC_If>,
1256 VersionedClause<OMPC_LastPrivate>,
1257 VersionedClause<OMPC_Linear>,
1258 VersionedClause<OMPC_NonTemporal>,
1259 VersionedClause<OMPC_NumThreads>,
1260 VersionedClause<OMPC_Order, 50>,
1261 VersionedClause<OMPC_Private>,
1262 VersionedClause<OMPC_ProcBind>,
1263 VersionedClause<OMPC_Reduction>,
1264 VersionedClause<OMPC_SafeLen>,
1265 VersionedClause<OMPC_Schedule>,
1266 VersionedClause<OMPC_Shared>,
1267 VersionedClause<OMPC_SimdLen>,
1268 ];
1269 let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd];
1270 let category = CA_Executable;
1271 }
1272 def OMP_DistributeParallelFor : Directive<"distribute parallel for"> {
1273 let allowedClauses = [
1274 VersionedClause<OMPC_Allocate>,
1275 VersionedClause<OMPC_Collapse>,
1276 VersionedClause<OMPC_Copyin>,
1277 VersionedClause<OMPC_Default>,
1278 VersionedClause<OMPC_DistSchedule>,
1279 VersionedClause<OMPC_FirstPrivate>,
1280 VersionedClause<OMPC_If>,
1281 VersionedClause<OMPC_LastPrivate>,
1282 VersionedClause<OMPC_NumThreads>,
1283 VersionedClause<OMPC_OMPX_Attribute>,
1284 VersionedClause<OMPC_Order, 50>,
1285 VersionedClause<OMPC_Private>,
1286 VersionedClause<OMPC_ProcBind>,
1287 VersionedClause<OMPC_Reduction>,
1288 VersionedClause<OMPC_Schedule>,
1289 VersionedClause<OMPC_Shared>,
1290 ];
1291 let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_For];
1292 let category = CA_Executable;
1293 }
1294 def OMP_DistributeParallelForSimd : Directive<"distribute parallel for simd"> {
1295 let allowedClauses = [
1296 VersionedClause<OMPC_Aligned>,
1297 VersionedClause<OMPC_Allocate>,
1298 VersionedClause<OMPC_Collapse>,
1299 VersionedClause<OMPC_Copyin>,
1300 VersionedClause<OMPC_Default>,
1301 VersionedClause<OMPC_DistSchedule>,
1302 VersionedClause<OMPC_FirstPrivate>,
1303 VersionedClause<OMPC_If>,
1304 VersionedClause<OMPC_LastPrivate>,
1305 VersionedClause<OMPC_Linear>,
1306 VersionedClause<OMPC_NonTemporal, 50>,
1307 VersionedClause<OMPC_NumThreads>,
1308 VersionedClause<OMPC_OMPX_Attribute>,
1309 VersionedClause<OMPC_Order, 50>,
1310 VersionedClause<OMPC_Private>,
1311 VersionedClause<OMPC_ProcBind>,
1312 VersionedClause<OMPC_Reduction>,
1313 VersionedClause<OMPC_SafeLen>,
1314 VersionedClause<OMPC_Schedule>,
1315 VersionedClause<OMPC_Shared>,
1316 VersionedClause<OMPC_SimdLen>,
1317 ];
1318 let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd];
1319 let category = CA_Executable;
1320 }
1321 def OMP_DistributeSimd : Directive<"distribute simd"> {
1322 let allowedClauses = [
1323 VersionedClause<OMPC_Aligned>,
1324 VersionedClause<OMPC_Allocate>,
1325 VersionedClause<OMPC_Copyin>,
1326 VersionedClause<OMPC_Default>,
1327 VersionedClause<OMPC_FirstPrivate>,
1328 VersionedClause<OMPC_LastPrivate>,
1329 VersionedClause<OMPC_Linear>,
1330 VersionedClause<OMPC_NonTemporal, 50>,
1331 VersionedClause<OMPC_Private>,
1332 VersionedClause<OMPC_Reduction>,
1333 ];
1334 let allowedOnceClauses = [
1335 VersionedClause<OMPC_Collapse>,
1336 VersionedClause<OMPC_DistSchedule>,
1337 VersionedClause<OMPC_If, 50>,
1338 VersionedClause<OMPC_NumThreads>,
1339 VersionedClause<OMPC_Order, 50>,
1340 VersionedClause<OMPC_ProcBind>,
1341 VersionedClause<OMPC_SafeLen>,
1342 VersionedClause<OMPC_Schedule>,
1343 VersionedClause<OMPC_SimdLen>,
1344 ];
1345 let leafConstructs = [OMP_Distribute, OMP_Simd];
1346 let category = CA_Executable;
1347 }
1348 def OMP_DoSimd : Directive<"do simd"> {
1349 let allowedClauses = [
1350 VersionedClause<OMPC_Aligned>,
1351 VersionedClause<OMPC_FirstPrivate>,
1352 VersionedClause<OMPC_LastPrivate>,
1353 VersionedClause<OMPC_Linear>,
1354 VersionedClause<OMPC_Private>,
1355 VersionedClause<OMPC_Reduction>,
1356 ];
1357 let allowedOnceClauses = [
1358 VersionedClause<OMPC_Collapse>,
1359 VersionedClause<OMPC_If>,
1360 VersionedClause<OMPC_NoWait>,
1361 VersionedClause<OMPC_Order, 50>,
1362 VersionedClause<OMPC_Ordered>,
1363 VersionedClause<OMPC_SafeLen>,
1364 VersionedClause<OMPC_Schedule>,
1365 VersionedClause<OMPC_SimdLen>,
1366 ];
1367 let leafConstructs = [OMP_Do, OMP_Simd];
1368 let category = CA_Executable;
1369 }
1370 def OMP_EndDoSimd : Directive<"end do simd"> {
1371 let allowedOnceClauses = [
1372 VersionedClause<OMPC_NoWait>,
1373 ];
1374 let leafConstructs = OMP_DoSimd.leafConstructs;
1375 let association = OMP_DoSimd.association;
1376 let category = OMP_DoSimd.category;
1377 }
1378 def OMP_ForSimd : Directive<"for simd"> {
1379 let allowedClauses = [
1380 VersionedClause<OMPC_Aligned>,
1381 VersionedClause<OMPC_Allocate>,
1382 VersionedClause<OMPC_Collapse>,
1383 VersionedClause<OMPC_FirstPrivate>,
1384 VersionedClause<OMPC_If, 50>,
1385 VersionedClause<OMPC_LastPrivate>,
1386 VersionedClause<OMPC_Linear>,
1387 VersionedClause<OMPC_NonTemporal, 50>,
1388 VersionedClause<OMPC_NoWait>,
1389 VersionedClause<OMPC_Order, 50>,
1390 VersionedClause<OMPC_Ordered>,
1391 VersionedClause<OMPC_Private>,
1392 VersionedClause<OMPC_Reduction>,
1393 VersionedClause<OMPC_SafeLen>,
1394 VersionedClause<OMPC_Schedule>,
1395 VersionedClause<OMPC_SimdLen>,
1396 ];
1397 let leafConstructs = [OMP_For, OMP_Simd];
1398 let category = CA_Executable;
1399 }
1400 def OMP_target_loop : Directive<"target loop"> {
1401 let allowedClauses = [
1402 VersionedClause<OMPC_Allocate>,
1403 VersionedClause<OMPC_Depend>,
1404 VersionedClause<OMPC_FirstPrivate>,
1405 VersionedClause<OMPC_IsDevicePtr>,
1406 VersionedClause<OMPC_HasDeviceAddr, 51>,
1407 VersionedClause<OMPC_LastPrivate>,
1408 VersionedClause<OMPC_Map>,
1409 VersionedClause<OMPC_Private>,
1410 VersionedClause<OMPC_Reduction>,
1411 VersionedClause<OMPC_UsesAllocators, 50>,
1412 VersionedClause<OMPC_OMPX_Attribute>,
1413 VersionedClause<OMPC_InReduction, 50>,
1414
1415 ];
1416 let allowedOnceClauses = [
1417 VersionedClause<OMPC_Bind, 50>,
1418 VersionedClause<OMPC_Collapse>,
1419 VersionedClause<OMPC_Order>,
1420 VersionedClause<OMPC_ThreadLimit>,
1421 VersionedClause<OMPC_OMPX_DynCGroupMem>,
1422 VersionedClause<OMPC_If>,
1423 VersionedClause<OMPC_Device>,
1424 VersionedClause<OMPC_DefaultMap>,
1425 VersionedClause<OMPC_NoWait>,
1426 ];
1427 let leafConstructs = [OMP_Target, OMP_loop];
1428 let category = CA_Executable;
1429 }
1430 def OMP_MaskedTaskloop : Directive<"masked taskloop"> {
1431 let allowedClauses = [
1432 VersionedClause<OMPC_Allocate>,
1433 VersionedClause<OMPC_Collapse>,
1434 VersionedClause<OMPC_Default>,
1435 VersionedClause<OMPC_Filter>,
1436 VersionedClause<OMPC_Final>,
1437 VersionedClause<OMPC_FirstPrivate>,
1438 VersionedClause<OMPC_GrainSize>,
1439 VersionedClause<OMPC_If>,
1440 VersionedClause<OMPC_InReduction>,
1441 VersionedClause<OMPC_LastPrivate>,
1442 VersionedClause<OMPC_Mergeable>,
1443 VersionedClause<OMPC_NoGroup>,
1444 VersionedClause<OMPC_NumTasks>,
1445 VersionedClause<OMPC_Priority>,
1446 VersionedClause<OMPC_Private>,
1447 VersionedClause<OMPC_Reduction>,
1448 VersionedClause<OMPC_Shared>,
1449 VersionedClause<OMPC_Untied>,
1450 ];
1451 let leafConstructs = [OMP_masked, OMP_TaskLoop];
1452 let category = CA_Executable;
1453 }
1454 def OMP_MaskedTaskloopSimd : Directive<"masked taskloop simd"> {
1455 let allowedClauses = [
1456 VersionedClause<OMPC_Aligned>,
1457 VersionedClause<OMPC_Allocate>,
1458 VersionedClause<OMPC_Collapse>,
1459 VersionedClause<OMPC_Default>,
1460 VersionedClause<OMPC_Filter>,
1461 VersionedClause<OMPC_Final>,
1462 VersionedClause<OMPC_FirstPrivate>,
1463 VersionedClause<OMPC_GrainSize>,
1464 VersionedClause<OMPC_If>,
1465 VersionedClause<OMPC_InReduction>,
1466 VersionedClause<OMPC_LastPrivate>,
1467 VersionedClause<OMPC_Linear>,
1468 VersionedClause<OMPC_Mergeable>,
1469 VersionedClause<OMPC_NoGroup>,
1470 VersionedClause<OMPC_NonTemporal, 50>,
1471 VersionedClause<OMPC_NumTasks>,
1472 VersionedClause<OMPC_Order, 50>,
1473 VersionedClause<OMPC_Priority>,
1474 VersionedClause<OMPC_Private>,
1475 VersionedClause<OMPC_Reduction>,
1476 VersionedClause<OMPC_SafeLen>,
1477 VersionedClause<OMPC_Shared>,
1478 VersionedClause<OMPC_SimdLen>,
1479 VersionedClause<OMPC_Untied>,
1480 ];
1481 let leafConstructs = [OMP_masked, OMP_TaskLoop, OMP_Simd];
1482 let category = CA_Executable;
1483 }
1484 def OMP_MasterTaskloop : Directive<"master taskloop"> {
1485 let allowedClauses = [
1486 VersionedClause<OMPC_Allocate>,
1487 VersionedClause<OMPC_Collapse>,
1488 VersionedClause<OMPC_Default>,
1489 VersionedClause<OMPC_Final>,
1490 VersionedClause<OMPC_FirstPrivate>,
1491 VersionedClause<OMPC_GrainSize>,
1492 VersionedClause<OMPC_If>,
1493 VersionedClause<OMPC_InReduction>,
1494 VersionedClause<OMPC_LastPrivate>,
1495 VersionedClause<OMPC_Mergeable>,
1496 VersionedClause<OMPC_NoGroup>,
1497 VersionedClause<OMPC_NumTasks>,
1498 VersionedClause<OMPC_Priority>,
1499 VersionedClause<OMPC_Private>,
1500 VersionedClause<OMPC_Reduction>,
1501 VersionedClause<OMPC_Shared>,
1502 VersionedClause<OMPC_Untied>,
1503 ];
1504 let leafConstructs = [OMP_Master, OMP_TaskLoop];
1505 let category = CA_Executable;
1506 }
1507 def OMP_MasterTaskloopSimd : Directive<"master taskloop simd"> {
1508 let allowedClauses = [
1509 VersionedClause<OMPC_Aligned>,
1510 VersionedClause<OMPC_Allocate>,
1511 VersionedClause<OMPC_Collapse>,
1512 VersionedClause<OMPC_Default>,
1513 VersionedClause<OMPC_Final>,
1514 VersionedClause<OMPC_FirstPrivate>,
1515 VersionedClause<OMPC_GrainSize>,
1516 VersionedClause<OMPC_If>,
1517 VersionedClause<OMPC_InReduction>,
1518 VersionedClause<OMPC_LastPrivate>,
1519 VersionedClause<OMPC_Linear>,
1520 VersionedClause<OMPC_Mergeable>,
1521 VersionedClause<OMPC_NoGroup>,
1522 VersionedClause<OMPC_NonTemporal, 50>,
1523 VersionedClause<OMPC_NumTasks>,
1524 VersionedClause<OMPC_Order, 50>,
1525 VersionedClause<OMPC_Priority>,
1526 VersionedClause<OMPC_Private>,
1527 VersionedClause<OMPC_Reduction>,
1528 VersionedClause<OMPC_SafeLen>,
1529 VersionedClause<OMPC_Shared>,
1530 VersionedClause<OMPC_SimdLen>,
1531 VersionedClause<OMPC_Untied>,
1532 ];
1533 let leafConstructs = [OMP_Master, OMP_TaskLoop, OMP_Simd];
1534 let category = CA_Executable;
1535 }
1536 def OMP_ParallelDo : Directive<"parallel do"> {
1537 let allowedClauses = [
1538 VersionedClause<OMPC_Copyin>,
1539 VersionedClause<OMPC_Default>,
1540 VersionedClause<OMPC_FirstPrivate>,
1541 VersionedClause<OMPC_LastPrivate>,
1542 VersionedClause<OMPC_Linear>,
1543 VersionedClause<OMPC_Private>,
1544 VersionedClause<OMPC_Reduction>,
1545 VersionedClause<OMPC_Shared>,
1546 ];
1547 let allowedOnceClauses = [
1548 VersionedClause<OMPC_Collapse>,
1549 VersionedClause<OMPC_If>,
1550 VersionedClause<OMPC_NumThreads>,
1551 VersionedClause<OMPC_Order, 50>,
1552 VersionedClause<OMPC_Ordered>,
1553 VersionedClause<OMPC_ProcBind>,
1554 VersionedClause<OMPC_Schedule>,
1555 ];
1556 let leafConstructs = [OMP_Parallel, OMP_Do];
1557 let category = CA_Executable;
1558 }
1559 def OMP_ParallelDoSimd : Directive<"parallel do simd"> {
1560 let allowedClauses = [
1561 VersionedClause<OMPC_Aligned>,
1562 VersionedClause<OMPC_Allocate>,
1563 VersionedClause<OMPC_Copyin>,
1564 VersionedClause<OMPC_Default>,
1565 VersionedClause<OMPC_FirstPrivate>,
1566 VersionedClause<OMPC_If>,
1567 VersionedClause<OMPC_LastPrivate>,
1568 VersionedClause<OMPC_Linear>,
1569 VersionedClause<OMPC_NonTemporal>,
1570 VersionedClause<OMPC_Private>,
1571 VersionedClause<OMPC_Reduction>,
1572 VersionedClause<OMPC_Shared>,
1573 ];
1574 let allowedOnceClauses = [
1575 VersionedClause<OMPC_Collapse>,
1576 VersionedClause<OMPC_NumThreads>,
1577 VersionedClause<OMPC_Order, 50>,
1578 VersionedClause<OMPC_Ordered>,
1579 VersionedClause<OMPC_ProcBind>,
1580 VersionedClause<OMPC_SafeLen>,
1581 VersionedClause<OMPC_Schedule>,
1582 VersionedClause<OMPC_SimdLen>,
1583 ];
1584 let leafConstructs = [OMP_Parallel, OMP_Do, OMP_Simd];
1585 let category = CA_Executable;
1586 }
1587 def OMP_ParallelFor : Directive<"parallel for"> {
1588 let allowedClauses = [
1589 VersionedClause<OMPC_Allocate>,
1590 VersionedClause<OMPC_Collapse>,
1591 VersionedClause<OMPC_Copyin>,
1592 VersionedClause<OMPC_Default>,
1593 VersionedClause<OMPC_FirstPrivate>,
1594 VersionedClause<OMPC_If>,
1595 VersionedClause<OMPC_LastPrivate>,
1596 VersionedClause<OMPC_Linear>,
1597 VersionedClause<OMPC_NumThreads>,
1598 VersionedClause<OMPC_OMPX_Attribute>,
1599 VersionedClause<OMPC_Order, 50>,
1600 VersionedClause<OMPC_Ordered>,
1601 VersionedClause<OMPC_Private>,
1602 VersionedClause<OMPC_ProcBind>,
1603 VersionedClause<OMPC_Reduction>,
1604 VersionedClause<OMPC_Schedule>,
1605 VersionedClause<OMPC_Shared>,
1606 ];
1607 let leafConstructs = [OMP_Parallel, OMP_For];
1608 let category = CA_Executable;
1609 }
1610 def OMP_ParallelForSimd : Directive<"parallel for simd"> {
1611 let allowedClauses = [
1612 VersionedClause<OMPC_Aligned>,
1613 VersionedClause<OMPC_Allocate>,
1614 VersionedClause<OMPC_Collapse>,
1615 VersionedClause<OMPC_Copyin>,
1616 VersionedClause<OMPC_Default>,
1617 VersionedClause<OMPC_FirstPrivate>,
1618 VersionedClause<OMPC_If>,
1619 VersionedClause<OMPC_LastPrivate>,
1620 VersionedClause<OMPC_Linear>,
1621 VersionedClause<OMPC_NonTemporal, 50>,
1622 VersionedClause<OMPC_NumThreads>,
1623 VersionedClause<OMPC_OMPX_Attribute>,
1624 VersionedClause<OMPC_Order, 50>,
1625 VersionedClause<OMPC_Ordered>,
1626 VersionedClause<OMPC_Private>,
1627 VersionedClause<OMPC_ProcBind>,
1628 VersionedClause<OMPC_Reduction>,
1629 VersionedClause<OMPC_SafeLen>,
1630 VersionedClause<OMPC_Schedule>,
1631 VersionedClause<OMPC_Shared>,
1632 VersionedClause<OMPC_SimdLen>,
1633 ];
1634 let leafConstructs = [OMP_Parallel, OMP_For, OMP_Simd];
1635 let category = CA_Executable;
1636 }
1637 def OMP_parallel_loop : Directive<"parallel loop"> {
1638 let allowedClauses = [
1639 VersionedClause<OMPC_Allocate>,
1640 VersionedClause<OMPC_Copyin>,
1641 VersionedClause<OMPC_FirstPrivate>,
1642 VersionedClause<OMPC_LastPrivate>,
1643 VersionedClause<OMPC_OMPX_Attribute>,
1644 VersionedClause<OMPC_Private>,
1645 VersionedClause<OMPC_Reduction>,
1646 VersionedClause<OMPC_Shared>,
1647 ];
1648 let allowedOnceClauses = [
1649 VersionedClause<OMPC_Bind, 50>,
1650 VersionedClause<OMPC_Collapse>,
1651 VersionedClause<OMPC_Default>,
1652 VersionedClause<OMPC_If>,
1653 VersionedClause<OMPC_NumThreads>,
1654 VersionedClause<OMPC_Order>,
1655 VersionedClause<OMPC_ProcBind>,
1656 ];
1657 let leafConstructs = [OMP_Parallel, OMP_loop];
1658 let category = CA_Executable;
1659 }
1660 def OMP_ParallelMasked : Directive<"parallel masked"> {
1661 let allowedClauses = [
1662 VersionedClause<OMPC_Allocate>,
1663 VersionedClause<OMPC_Copyin>,
1664 VersionedClause<OMPC_Default>,
1665 VersionedClause<OMPC_Filter>,
1666 VersionedClause<OMPC_FirstPrivate>,
1667 VersionedClause<OMPC_If>,
1668 VersionedClause<OMPC_NumThreads>,
1669 VersionedClause<OMPC_OMPX_Attribute>,
1670 VersionedClause<OMPC_Private>,
1671 VersionedClause<OMPC_ProcBind>,
1672 VersionedClause<OMPC_Reduction>,
1673 VersionedClause<OMPC_Shared>,
1674 ];
1675 let leafConstructs = [OMP_Parallel, OMP_masked];
1676 let category = CA_Executable;
1677 }
1678 def OMP_ParallelMaskedTaskloop :
1679 Directive<"parallel masked taskloop"> {
1680 let allowedClauses = [
1681 VersionedClause<OMPC_Allocate>,
1682 VersionedClause<OMPC_Collapse>,
1683 VersionedClause<OMPC_Copyin>,
1684 VersionedClause<OMPC_Default>,
1685 VersionedClause<OMPC_Filter>,
1686 VersionedClause<OMPC_Final>,
1687 VersionedClause<OMPC_FirstPrivate>,
1688 VersionedClause<OMPC_GrainSize>,
1689 VersionedClause<OMPC_If>,
1690 VersionedClause<OMPC_LastPrivate>,
1691 VersionedClause<OMPC_Mergeable>,
1692 VersionedClause<OMPC_NoGroup>,
1693 VersionedClause<OMPC_NumTasks>,
1694 VersionedClause<OMPC_NumThreads>,
1695 VersionedClause<OMPC_OMPX_Attribute>,
1696 VersionedClause<OMPC_Priority>,
1697 VersionedClause<OMPC_Private>,
1698 VersionedClause<OMPC_ProcBind>,
1699 VersionedClause<OMPC_Reduction>,
1700 VersionedClause<OMPC_Shared>,
1701 VersionedClause<OMPC_Untied>,
1702 ];
1703 let leafConstructs = [OMP_Parallel, OMP_masked, OMP_TaskLoop];
1704 let category = CA_Executable;
1705 }
1706 def OMP_ParallelMaskedTaskloopSimd :
1707 Directive<"parallel masked taskloop simd"> {
1708 let allowedClauses = [
1709 VersionedClause<OMPC_Aligned>,
1710 VersionedClause<OMPC_Allocate>,
1711 VersionedClause<OMPC_Collapse>,
1712 VersionedClause<OMPC_Copyin>,
1713 VersionedClause<OMPC_Default>,
1714 VersionedClause<OMPC_Filter>,
1715 VersionedClause<OMPC_Final>,
1716 VersionedClause<OMPC_FirstPrivate>,
1717 VersionedClause<OMPC_GrainSize>,
1718 VersionedClause<OMPC_If>,
1719 VersionedClause<OMPC_LastPrivate>,
1720 VersionedClause<OMPC_Linear>,
1721 VersionedClause<OMPC_Mergeable>,
1722 VersionedClause<OMPC_NoGroup>,
1723 VersionedClause<OMPC_NonTemporal, 50>,
1724 VersionedClause<OMPC_NumTasks>,
1725 VersionedClause<OMPC_NumThreads>,
1726 VersionedClause<OMPC_OMPX_Attribute>,
1727 VersionedClause<OMPC_Order, 50>,
1728 VersionedClause<OMPC_Priority>,
1729 VersionedClause<OMPC_Private>,
1730 VersionedClause<OMPC_ProcBind>,
1731 VersionedClause<OMPC_Reduction>,
1732 VersionedClause<OMPC_SafeLen>,
1733 VersionedClause<OMPC_Shared>,
1734 VersionedClause<OMPC_SimdLen>,
1735 VersionedClause<OMPC_Untied>,
1736 ];
1737 let leafConstructs = [OMP_Parallel, OMP_masked, OMP_TaskLoop, OMP_Simd];
1738 let category = CA_Executable;
1739 }
1740 def OMP_ParallelMaster : Directive<"parallel master"> {
1741 let allowedClauses = [
1742 VersionedClause<OMPC_Allocate>,
1743 VersionedClause<OMPC_Copyin>,
1744 VersionedClause<OMPC_Default>,
1745 VersionedClause<OMPC_FirstPrivate>,
1746 VersionedClause<OMPC_If>,
1747 VersionedClause<OMPC_NumThreads>,
1748 VersionedClause<OMPC_OMPX_Attribute>,
1749 VersionedClause<OMPC_Private>,
1750 VersionedClause<OMPC_ProcBind>,
1751 VersionedClause<OMPC_Reduction>,
1752 VersionedClause<OMPC_Shared>,
1753 ];
1754 let leafConstructs = [OMP_Parallel, OMP_Master];
1755 let category = CA_Executable;
1756 }
1757 def OMP_ParallelMasterTaskloop :
1758 Directive<"parallel master taskloop"> {
1759 let allowedClauses = [
1760 VersionedClause<OMPC_Allocate>,
1761 VersionedClause<OMPC_Collapse>,
1762 VersionedClause<OMPC_Copyin>,
1763 VersionedClause<OMPC_Default>,
1764 VersionedClause<OMPC_Final>,
1765 VersionedClause<OMPC_FirstPrivate>,
1766 VersionedClause<OMPC_GrainSize>,
1767 VersionedClause<OMPC_If>,
1768 VersionedClause<OMPC_LastPrivate>,
1769 VersionedClause<OMPC_Mergeable>,
1770 VersionedClause<OMPC_NoGroup>,
1771 VersionedClause<OMPC_NumTasks>,
1772 VersionedClause<OMPC_NumThreads>,
1773 VersionedClause<OMPC_OMPX_Attribute>,
1774 VersionedClause<OMPC_Priority>,
1775 VersionedClause<OMPC_Private>,
1776 VersionedClause<OMPC_ProcBind>,
1777 VersionedClause<OMPC_Reduction>,
1778 VersionedClause<OMPC_Shared>,
1779 VersionedClause<OMPC_Untied>,
1780 ];
1781 let leafConstructs = [OMP_Parallel, OMP_Master, OMP_TaskLoop];
1782 let category = CA_Executable;
1783 }
1784 def OMP_ParallelMasterTaskloopSimd :
1785 Directive<"parallel master taskloop simd"> {
1786 let allowedClauses = [
1787 VersionedClause<OMPC_Aligned>,
1788 VersionedClause<OMPC_Allocate>,
1789 VersionedClause<OMPC_Collapse>,
1790 VersionedClause<OMPC_Copyin>,
1791 VersionedClause<OMPC_Default>,
1792 VersionedClause<OMPC_Final>,
1793 VersionedClause<OMPC_FirstPrivate>,
1794 VersionedClause<OMPC_GrainSize>,
1795 VersionedClause<OMPC_If>,
1796 VersionedClause<OMPC_LastPrivate>,
1797 VersionedClause<OMPC_Linear>,
1798 VersionedClause<OMPC_Mergeable>,
1799 VersionedClause<OMPC_NoGroup>,
1800 VersionedClause<OMPC_NonTemporal, 50>,
1801 VersionedClause<OMPC_NumTasks>,
1802 VersionedClause<OMPC_NumThreads>,
1803 VersionedClause<OMPC_OMPX_Attribute>,
1804 VersionedClause<OMPC_Order, 50>,
1805 VersionedClause<OMPC_Priority>,
1806 VersionedClause<OMPC_Private>,
1807 VersionedClause<OMPC_ProcBind>,
1808 VersionedClause<OMPC_Reduction>,
1809 VersionedClause<OMPC_SafeLen>,
1810 VersionedClause<OMPC_Shared>,
1811 VersionedClause<OMPC_SimdLen>,
1812 VersionedClause<OMPC_Untied>,
1813 ];
1814 let leafConstructs = [OMP_Parallel, OMP_Master, OMP_TaskLoop, OMP_Simd];
1815 let category = CA_Executable;
1816 }
1817 def OMP_ParallelSections : Directive<"parallel sections"> {
1818 let allowedClauses = [
1819 VersionedClause<OMPC_Allocate>,
1820 VersionedClause<OMPC_Copyin>,
1821 VersionedClause<OMPC_Default>,
1822 VersionedClause<OMPC_FirstPrivate>,
1823 VersionedClause<OMPC_LastPrivate>,
1824 VersionedClause<OMPC_OMPX_Attribute>,
1825 VersionedClause<OMPC_Private>,
1826 VersionedClause<OMPC_ProcBind>,
1827 VersionedClause<OMPC_Reduction>,
1828 VersionedClause<OMPC_Shared>,
1829 ];
1830 let allowedOnceClauses = [
1831 VersionedClause<OMPC_If>,
1832 VersionedClause<OMPC_NumThreads>,
1833 ];
1834 let leafConstructs = [OMP_Parallel, OMP_Sections];
1835 let category = CA_Executable;
1836 }
1837 def OMP_ParallelWorkshare : Directive<"parallel workshare"> {
1838 let allowedClauses = [
1839 VersionedClause<OMPC_Allocate>,
1840 VersionedClause<OMPC_Copyin>,
1841 VersionedClause<OMPC_Default>,
1842 VersionedClause<OMPC_FirstPrivate>,
1843 VersionedClause<OMPC_Private>,
1844 VersionedClause<OMPC_Reduction>,
1845 VersionedClause<OMPC_Shared>,
1846 ];
1847 let allowedOnceClauses = [
1848 VersionedClause<OMPC_If>,
1849 VersionedClause<OMPC_NumThreads>,
1850 VersionedClause<OMPC_ProcBind>,
1851 ];
1852 let leafConstructs = [OMP_Parallel, OMP_Workshare];
1853 let category = CA_Executable;
1854 }
1855 def OMP_TargetParallel : Directive<"target parallel"> {
1856 let allowedClauses = [
1857 VersionedClause<OMPC_Allocate>,
1858 VersionedClause<OMPC_Default>,
1859 VersionedClause<OMPC_Depend>,
1860 VersionedClause<OMPC_FirstPrivate>,
1861 VersionedClause<OMPC_HasDeviceAddr, 51>,
1862 VersionedClause<OMPC_If>,
1863 VersionedClause<OMPC_IsDevicePtr>,
1864 VersionedClause<OMPC_Map>,
1865 VersionedClause<OMPC_NoWait>,
1866 VersionedClause<OMPC_OMPX_Attribute>,
1867 VersionedClause<OMPC_Private>,
1868 VersionedClause<OMPC_Reduction>,
1869 VersionedClause<OMPC_Shared>,
1870 VersionedClause<OMPC_UsesAllocators, 50>,
1871 ];
1872 let allowedOnceClauses = [
1873 VersionedClause<OMPC_DefaultMap>,
1874 VersionedClause<OMPC_Device>,
1875 VersionedClause<OMPC_NumThreads>,
1876 VersionedClause<OMPC_OMPX_DynCGroupMem>,
1877 VersionedClause<OMPC_ProcBind>,
1878 VersionedClause<OMPC_ThreadLimit, 51>,
1879 ];
1880 let leafConstructs = [OMP_Target, OMP_Parallel];
1881 let category = CA_Executable;
1882 }
1883 def OMP_TargetParallelDo : Directive<"target parallel do"> {
1884 let allowedClauses = [
1885 VersionedClause<OMPC_Allocator>,
1886 VersionedClause<OMPC_Default>,
1887 VersionedClause<OMPC_Depend>,
1888 VersionedClause<OMPC_FirstPrivate>,
1889 VersionedClause<OMPC_HasDeviceAddr, 51>,
1890 VersionedClause<OMPC_If>,
1891 VersionedClause<OMPC_IsDevicePtr>,
1892 VersionedClause<OMPC_LastPrivate>,
1893 VersionedClause<OMPC_Linear>,
1894 VersionedClause<OMPC_Map>,
1895 VersionedClause<OMPC_Private>,
1896 VersionedClause<OMPC_Reduction>,
1897 VersionedClause<OMPC_Shared>,
1898 VersionedClause<OMPC_UsesAllocators>,
1899 ];
1900 let allowedOnceClauses = [
1901 VersionedClause<OMPC_Collapse>,
1902 VersionedClause<OMPC_DefaultMap>,
1903 VersionedClause<OMPC_Device>,
1904 VersionedClause<OMPC_NoWait>,
1905 VersionedClause<OMPC_NumThreads>,
1906 VersionedClause<OMPC_Order, 50>,
1907 VersionedClause<OMPC_Ordered>,
1908 VersionedClause<OMPC_ProcBind>,
1909 VersionedClause<OMPC_Schedule>,
1910 ];
1911 let leafConstructs = [OMP_Target, OMP_Parallel, OMP_Do];
1912 let category = CA_Executable;
1913 }
1914 def OMP_TargetParallelDoSimd : Directive<"target parallel do simd"> {
1915 let allowedClauses = [
1916 VersionedClause<OMPC_Aligned>,
1917 VersionedClause<OMPC_Allocate>,
1918 VersionedClause<OMPC_Collapse>,
1919 VersionedClause<OMPC_Default>,
1920 VersionedClause<OMPC_DefaultMap>,
1921 VersionedClause<OMPC_Depend>,
1922 VersionedClause<OMPC_Device>,
1923 VersionedClause<OMPC_FirstPrivate>,
1924 VersionedClause<OMPC_HasDeviceAddr, 51>,
1925 VersionedClause<OMPC_If>,
1926 VersionedClause<OMPC_IsDevicePtr>,
1927 VersionedClause<OMPC_LastPrivate>,
1928 VersionedClause<OMPC_Linear>,
1929 VersionedClause<OMPC_Map>,
1930 VersionedClause<OMPC_NonTemporal>,
1931 VersionedClause<OMPC_NoWait>,
1932 VersionedClause<OMPC_NumThreads>,
1933 VersionedClause<OMPC_Order, 50>,
1934 VersionedClause<OMPC_Ordered>,
1935 VersionedClause<OMPC_Private>,
1936 VersionedClause<OMPC_ProcBind>,
1937 VersionedClause<OMPC_Reduction>,
1938 VersionedClause<OMPC_SafeLen>,
1939 VersionedClause<OMPC_Schedule>,
1940 VersionedClause<OMPC_Shared>,
1941 VersionedClause<OMPC_SimdLen>,
1942 VersionedClause<OMPC_UsesAllocators>,
1943 ];
1944 let leafConstructs = [OMP_Target, OMP_Parallel, OMP_Do, OMP_Simd];
1945 let category = CA_Executable;
1946 }
1947 def OMP_TargetParallelFor : Directive<"target parallel for"> {
1948 let allowedClauses = [
1949 VersionedClause<OMPC_Allocate>,
1950 VersionedClause<OMPC_Collapse>,
1951 VersionedClause<OMPC_Default>,
1952 VersionedClause<OMPC_DefaultMap>,
1953 VersionedClause<OMPC_Depend>,
1954 VersionedClause<OMPC_Device>,
1955 VersionedClause<OMPC_FirstPrivate>,
1956 VersionedClause<OMPC_HasDeviceAddr, 51>,
1957 VersionedClause<OMPC_If>,
1958 VersionedClause<OMPC_IsDevicePtr>,
1959 VersionedClause<OMPC_LastPrivate>,
1960 VersionedClause<OMPC_Linear>,
1961 VersionedClause<OMPC_Map>,
1962 VersionedClause<OMPC_NoWait>,
1963 VersionedClause<OMPC_NumThreads>,
1964 VersionedClause<OMPC_OMPX_Attribute>,
1965 VersionedClause<OMPC_Order, 50>,
1966 VersionedClause<OMPC_Ordered>,
1967 VersionedClause<OMPC_Private>,
1968 VersionedClause<OMPC_ProcBind>,
1969 VersionedClause<OMPC_Reduction>,
1970 VersionedClause<OMPC_Schedule>,
1971 VersionedClause<OMPC_Shared>,
1972 VersionedClause<OMPC_UsesAllocators, 50>,
1973 ];
1974 let allowedOnceClauses = [
1975 VersionedClause<OMPC_OMPX_DynCGroupMem>,
1976 VersionedClause<OMPC_ThreadLimit, 51>,
1977 ];
1978 let leafConstructs = [OMP_Target, OMP_Parallel, OMP_For];
1979 let category = CA_Executable;
1980 }
1981 def OMP_TargetParallelForSimd : Directive<"target parallel for simd"> {
1982 let allowedClauses = [
1983 VersionedClause<OMPC_Aligned>,
1984 VersionedClause<OMPC_Allocate>,
1985 VersionedClause<OMPC_Collapse>,
1986 VersionedClause<OMPC_Default>,
1987 VersionedClause<OMPC_DefaultMap>,
1988 VersionedClause<OMPC_Depend>,
1989 VersionedClause<OMPC_Device>,
1990 VersionedClause<OMPC_FirstPrivate>,
1991 VersionedClause<OMPC_HasDeviceAddr, 51>,
1992 VersionedClause<OMPC_If>,
1993 VersionedClause<OMPC_IsDevicePtr>,
1994 VersionedClause<OMPC_LastPrivate>,
1995 VersionedClause<OMPC_Linear>,
1996 VersionedClause<OMPC_Map>,
1997 VersionedClause<OMPC_NonTemporal, 50>,
1998 VersionedClause<OMPC_NoWait>,
1999 VersionedClause<OMPC_NumThreads>,
2000 VersionedClause<OMPC_OMPX_Attribute>,
2001 VersionedClause<OMPC_Order, 50>,
2002 VersionedClause<OMPC_Ordered>,
2003 VersionedClause<OMPC_Private>,
2004 VersionedClause<OMPC_ProcBind>,
2005 VersionedClause<OMPC_Reduction>,
2006 VersionedClause<OMPC_SafeLen>,
2007 VersionedClause<OMPC_Schedule>,
2008 VersionedClause<OMPC_Shared>,
2009 VersionedClause<OMPC_SimdLen>,
2010 VersionedClause<OMPC_UsesAllocators, 50>,
2011 ];
2012 let allowedOnceClauses = [
2013 VersionedClause<OMPC_OMPX_DynCGroupMem>,
2014 VersionedClause<OMPC_ThreadLimit, 51>,
2015 ];
2016 let leafConstructs = [OMP_Target, OMP_Parallel, OMP_For, OMP_Simd];
2017 let category = CA_Executable;
2018 }
2019 def OMP_target_parallel_loop : Directive<"target parallel loop"> {
2020 let allowedClauses = [
2021 VersionedClause<OMPC_Allocate>,
2022 VersionedClause<OMPC_Depend>,
2023 VersionedClause<OMPC_Device>,
2024 VersionedClause<OMPC_FirstPrivate>,
2025 VersionedClause<OMPC_HasDeviceAddr, 51>,
2026 VersionedClause<OMPC_If>,
2027 VersionedClause<OMPC_IsDevicePtr>,
2028 VersionedClause<OMPC_LastPrivate>,
2029 VersionedClause<OMPC_Map>,
2030 VersionedClause<OMPC_OMPX_Attribute>,
2031 VersionedClause<OMPC_Private>,
2032 VersionedClause<OMPC_Reduction>,
2033 VersionedClause<OMPC_Shared>,
2034 VersionedClause<OMPC_UsesAllocators, 50>,
2035 ];
2036 let allowedOnceClauses = [
2037 VersionedClause<OMPC_Bind, 50>,
2038 VersionedClause<OMPC_Collapse>,
2039 VersionedClause<OMPC_Default>,
2040 VersionedClause<OMPC_DefaultMap>,
2041 VersionedClause<OMPC_NoWait>,
2042 VersionedClause<OMPC_NumThreads>,
2043 VersionedClause<OMPC_OMPX_DynCGroupMem>,
2044 VersionedClause<OMPC_Order>,
2045 VersionedClause<OMPC_ProcBind>,
2046 VersionedClause<OMPC_ThreadLimit, 51>,
2047 ];
2048 let leafConstructs = [OMP_Target, OMP_Parallel, OMP_loop];
2049 let category = CA_Executable;
2050 }
2051 def OMP_TargetSimd : Directive<"target simd"> {
2052 let allowedClauses = [
2053 VersionedClause<OMPC_Aligned>,
2054 VersionedClause<OMPC_Allocate>,
2055 VersionedClause<OMPC_Depend>,
2056 VersionedClause<OMPC_FirstPrivate>,
2057 VersionedClause<OMPC_HasDeviceAddr, 51>,
2058 VersionedClause<OMPC_If>,
2059 VersionedClause<OMPC_IsDevicePtr>,
2060 VersionedClause<OMPC_LastPrivate>,
2061 VersionedClause<OMPC_Linear>,
2062 VersionedClause<OMPC_Map>,
2063 VersionedClause<OMPC_NonTemporal, 50>,
2064 VersionedClause<OMPC_NoWait>,
2065 VersionedClause<OMPC_OMPX_Attribute>,
2066 VersionedClause<OMPC_Private>,
2067 VersionedClause<OMPC_Reduction>,
2068 VersionedClause<OMPC_Shared>,
2069 VersionedClause<OMPC_UsesAllocators, 50>,
2070 ];
2071 let allowedOnceClauses = [
2072 VersionedClause<OMPC_Collapse>,
2073 VersionedClause<OMPC_DefaultMap>,
2074 VersionedClause<OMPC_Device>,
2075 VersionedClause<OMPC_NumThreads>,
2076 VersionedClause<OMPC_OMPX_DynCGroupMem>,
2077 VersionedClause<OMPC_Order, 50>,
2078 VersionedClause<OMPC_ProcBind>,
2079 VersionedClause<OMPC_SafeLen>,
2080 VersionedClause<OMPC_Schedule>,
2081 VersionedClause<OMPC_SimdLen>,
2082 VersionedClause<OMPC_ThreadLimit, 51>,
2083 ];
2084 let leafConstructs = [OMP_Target, OMP_Simd];
2085 let category = CA_Executable;
2086 }
2087 def OMP_TargetTeams : Directive<"target teams"> {
2088 let allowedClauses = [
2089 VersionedClause<OMPC_Allocate>,
2090 VersionedClause<OMPC_Depend>,
2091 VersionedClause<OMPC_FirstPrivate>,
2092 VersionedClause<OMPC_HasDeviceAddr, 51>,
2093 VersionedClause<OMPC_If>,
2094 VersionedClause<OMPC_IsDevicePtr>,
2095 VersionedClause<OMPC_Map>,
2096 VersionedClause<OMPC_OMPX_Attribute>,
2097 VersionedClause<OMPC_Private>,
2098 VersionedClause<OMPC_Reduction>,
2099 VersionedClause<OMPC_Shared>,
2100 VersionedClause<OMPC_UsesAllocators, 50>,
2101 ];
2102 let allowedOnceClauses = [
2103 VersionedClause<OMPC_Default>,
2104 VersionedClause<OMPC_DefaultMap>,
2105 VersionedClause<OMPC_Device>,
2106 VersionedClause<OMPC_NoWait>,
2107 VersionedClause<OMPC_NumTeams>,
2108 VersionedClause<OMPC_OMPX_DynCGroupMem>,
2109 VersionedClause<OMPC_OMPX_Bare>,
2110 VersionedClause<OMPC_ThreadLimit>,
2111 ];
2112 let leafConstructs = [OMP_Target, OMP_Teams];
2113 let category = CA_Executable;
2114 }
2115 def OMP_TargetTeamsDistribute : Directive<"target teams distribute"> {
2116 let allowedClauses = [
2117 VersionedClause<OMPC_Allocate>,
2118 VersionedClause<OMPC_Depend>,
2119 VersionedClause<OMPC_FirstPrivate>,
2120 VersionedClause<OMPC_HasDeviceAddr, 51>,
2121 VersionedClause<OMPC_If>,
2122 VersionedClause<OMPC_IsDevicePtr>,
2123 VersionedClause<OMPC_LastPrivate>,
2124 VersionedClause<OMPC_Map>,
2125 VersionedClause<OMPC_OMPX_Attribute>,
2126 VersionedClause<OMPC_Private>,
2127 VersionedClause<OMPC_Reduction>,
2128 VersionedClause<OMPC_Shared>,
2129 VersionedClause<OMPC_UsesAllocators, 50>,
2130 ];
2131 let allowedOnceClauses = [
2132 VersionedClause<OMPC_Collapse>,
2133 VersionedClause<OMPC_Default>,
2134 VersionedClause<OMPC_DefaultMap>,
2135 VersionedClause<OMPC_Device>,
2136 VersionedClause<OMPC_DistSchedule>,
2137 VersionedClause<OMPC_NoWait>,
2138 VersionedClause<OMPC_NumTeams>,
2139 VersionedClause<OMPC_OMPX_DynCGroupMem>,
2140 VersionedClause<OMPC_Order, 50>,
2141 VersionedClause<OMPC_ThreadLimit>,
2142 ];
2143 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute];
2144 let category = CA_Executable;
2145 }
2146 def OMP_TargetTeamsDistributeParallelDo :
2147 Directive<"target teams distribute parallel do"> {
2148 let allowedClauses = [
2149 VersionedClause<OMPC_Allocate>,
2150 VersionedClause<OMPC_Depend>,
2151 VersionedClause<OMPC_FirstPrivate>,
2152 VersionedClause<OMPC_HasDeviceAddr, 51>,
2153 VersionedClause<OMPC_If>,
2154 VersionedClause<OMPC_IsDevicePtr>,
2155 VersionedClause<OMPC_LastPrivate>,
2156 VersionedClause<OMPC_Linear>,
2157 VersionedClause<OMPC_Map>,
2158 VersionedClause<OMPC_Private>,
2159 VersionedClause<OMPC_Reduction>,
2160 VersionedClause<OMPC_Shared>,
2161 VersionedClause<OMPC_UsesAllocators>,
2162 ];
2163 let allowedOnceClauses = [
2164 VersionedClause<OMPC_Collapse>,
2165 VersionedClause<OMPC_Default>,
2166 VersionedClause<OMPC_DefaultMap>,
2167 VersionedClause<OMPC_Device>,
2168 VersionedClause<OMPC_DistSchedule>,
2169 VersionedClause<OMPC_NoWait>,
2170 VersionedClause<OMPC_NumTeams>,
2171 VersionedClause<OMPC_NumThreads>,
2172 VersionedClause<OMPC_Order, 50>,
2173 VersionedClause<OMPC_ProcBind>,
2174 VersionedClause<OMPC_Schedule>,
2175 VersionedClause<OMPC_ThreadLimit>,
2176 ];
2177 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do];
2178 let category = CA_Executable;
2179 }
2180 def OMP_TargetTeamsDistributeParallelDoSimd :
2181 Directive<"target teams distribute parallel do simd"> {
2182 let allowedClauses = [
2183 VersionedClause<OMPC_Aligned>,
2184 VersionedClause<OMPC_Allocate>,
2185 VersionedClause<OMPC_Depend>,
2186 VersionedClause<OMPC_FirstPrivate>,
2187 VersionedClause<OMPC_HasDeviceAddr, 51>,
2188 VersionedClause<OMPC_If>,
2189 VersionedClause<OMPC_IsDevicePtr>,
2190 VersionedClause<OMPC_LastPrivate>,
2191 VersionedClause<OMPC_Linear>,
2192 VersionedClause<OMPC_Map>,
2193 VersionedClause<OMPC_NonTemporal>,
2194 VersionedClause<OMPC_Private>,
2195 VersionedClause<OMPC_Reduction>,
2196 VersionedClause<OMPC_Shared>,
2197 VersionedClause<OMPC_UsesAllocators>,
2198 ];
2199 let allowedOnceClauses = [
2200 VersionedClause<OMPC_Collapse>,
2201 VersionedClause<OMPC_Default>,
2202 VersionedClause<OMPC_DefaultMap>,
2203 VersionedClause<OMPC_Device>,
2204 VersionedClause<OMPC_DistSchedule>,
2205 VersionedClause<OMPC_NoWait>,
2206 VersionedClause<OMPC_NumTeams>,
2207 VersionedClause<OMPC_NumThreads>,
2208 VersionedClause<OMPC_Order, 50>,
2209 VersionedClause<OMPC_ProcBind>,
2210 VersionedClause<OMPC_SafeLen>,
2211 VersionedClause<OMPC_Schedule>,
2212 VersionedClause<OMPC_SimdLen>,
2213 VersionedClause<OMPC_ThreadLimit>,
2214 ];
2215 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd];
2216 let category = CA_Executable;
2217 }
2218 def OMP_TargetTeamsDistributeParallelFor :
2219 Directive<"target teams distribute parallel for"> {
2220 let allowedClauses = [
2221 VersionedClause<OMPC_Allocate>,
2222 VersionedClause<OMPC_Collapse>,
2223 VersionedClause<OMPC_Default>,
2224 VersionedClause<OMPC_DefaultMap>,
2225 VersionedClause<OMPC_Depend>,
2226 VersionedClause<OMPC_Device>,
2227 VersionedClause<OMPC_DistSchedule>,
2228 VersionedClause<OMPC_FirstPrivate>,
2229 VersionedClause<OMPC_HasDeviceAddr, 51>,
2230 VersionedClause<OMPC_If>,
2231 VersionedClause<OMPC_IsDevicePtr>,
2232 VersionedClause<OMPC_LastPrivate>,
2233 VersionedClause<OMPC_Map>,
2234 VersionedClause<OMPC_NoWait>,
2235 VersionedClause<OMPC_NumTeams>,
2236 VersionedClause<OMPC_NumThreads>,
2237 VersionedClause<OMPC_OMPX_Attribute>,
2238 VersionedClause<OMPC_Order, 50>,
2239 VersionedClause<OMPC_Private>,
2240 VersionedClause<OMPC_ProcBind>,
2241 VersionedClause<OMPC_Reduction>,
2242 VersionedClause<OMPC_Schedule>,
2243 VersionedClause<OMPC_Shared>,
2244 VersionedClause<OMPC_ThreadLimit>,
2245 VersionedClause<OMPC_UsesAllocators, 50>,
2246 ];
2247 let allowedOnceClauses = [
2248 VersionedClause<OMPC_OMPX_DynCGroupMem>,
2249 ];
2250 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For];
2251 let category = CA_Executable;
2252 }
2253 def OMP_TargetTeamsDistributeParallelForSimd :
2254 Directive<"target teams distribute parallel for simd"> {
2255 let allowedClauses = [
2256 VersionedClause<OMPC_Aligned>,
2257 VersionedClause<OMPC_Allocate>,
2258 VersionedClause<OMPC_Collapse>,
2259 VersionedClause<OMPC_Default>,
2260 VersionedClause<OMPC_DefaultMap>,
2261 VersionedClause<OMPC_Depend>,
2262 VersionedClause<OMPC_Device>,
2263 VersionedClause<OMPC_DistSchedule>,
2264 VersionedClause<OMPC_FirstPrivate>,
2265 VersionedClause<OMPC_HasDeviceAddr, 51>,
2266 VersionedClause<OMPC_If>,
2267 VersionedClause<OMPC_IsDevicePtr>,
2268 VersionedClause<OMPC_LastPrivate>,
2269 VersionedClause<OMPC_Linear>,
2270 VersionedClause<OMPC_Map>,
2271 VersionedClause<OMPC_NonTemporal, 50>,
2272 VersionedClause<OMPC_NoWait>,
2273 VersionedClause<OMPC_NumTeams>,
2274 VersionedClause<OMPC_NumThreads>,
2275 VersionedClause<OMPC_OMPX_Attribute>,
2276 VersionedClause<OMPC_Order, 50>,
2277 VersionedClause<OMPC_Private>,
2278 VersionedClause<OMPC_ProcBind>,
2279 VersionedClause<OMPC_Reduction>,
2280 VersionedClause<OMPC_SafeLen>,
2281 VersionedClause<OMPC_Schedule>,
2282 VersionedClause<OMPC_Shared>,
2283 VersionedClause<OMPC_SimdLen>,
2284 VersionedClause<OMPC_ThreadLimit>,
2285 VersionedClause<OMPC_UsesAllocators, 50>,
2286 ];
2287 let allowedOnceClauses = [
2288 VersionedClause<OMPC_OMPX_DynCGroupMem>,
2289 ];
2290 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd];
2291 let category = CA_Executable;
2292 }
2293 def OMP_TargetTeamsDistributeSimd :
2294 Directive<"target teams distribute simd"> {
2295 let allowedClauses = [
2296 VersionedClause<OMPC_Aligned>,
2297 VersionedClause<OMPC_Allocate>,
2298 VersionedClause<OMPC_Depend>,
2299 VersionedClause<OMPC_FirstPrivate>,
2300 VersionedClause<OMPC_HasDeviceAddr, 51>,
2301 VersionedClause<OMPC_If>,
2302 VersionedClause<OMPC_IsDevicePtr>,
2303 VersionedClause<OMPC_LastPrivate>,
2304 VersionedClause<OMPC_Linear>,
2305 VersionedClause<OMPC_Map>,
2306 VersionedClause<OMPC_NonTemporal, 50>,
2307 VersionedClause<OMPC_OMPX_Attribute>,
2308 VersionedClause<OMPC_Private>,
2309 VersionedClause<OMPC_Reduction>,
2310 VersionedClause<OMPC_Shared>,
2311 VersionedClause<OMPC_UsesAllocators, 50>,
2312 ];
2313 let allowedOnceClauses = [
2314 VersionedClause<OMPC_Collapse>,
2315 VersionedClause<OMPC_DefaultMap>,
2316 VersionedClause<OMPC_Device>,
2317 VersionedClause<OMPC_DistSchedule>,
2318 VersionedClause<OMPC_NoWait>,
2319 VersionedClause<OMPC_NumTeams>,
2320 VersionedClause<OMPC_OMPX_DynCGroupMem>,
2321 VersionedClause<OMPC_Order, 50>,
2322 VersionedClause<OMPC_SafeLen>,
2323 VersionedClause<OMPC_SimdLen>,
2324 VersionedClause<OMPC_ThreadLimit>,
2325 ];
2326 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Simd];
2327 let category = CA_Executable;
2328 }
2329 def OMP_target_teams_loop : Directive<"target teams loop"> {
2330 let allowedClauses = [
2331 VersionedClause<OMPC_Allocate>,
2332 VersionedClause<OMPC_DefaultMap>,
2333 VersionedClause<OMPC_Depend>,
2334 VersionedClause<OMPC_Device>,
2335 VersionedClause<OMPC_FirstPrivate>,
2336 VersionedClause<OMPC_HasDeviceAddr, 51>,
2337 VersionedClause<OMPC_If>,
2338 VersionedClause<OMPC_IsDevicePtr>,
2339 VersionedClause<OMPC_LastPrivate>,
2340 VersionedClause<OMPC_Map>,
2341 VersionedClause<OMPC_OMPX_Attribute>,
2342 VersionedClause<OMPC_Private>,
2343 VersionedClause<OMPC_Reduction>,
2344 VersionedClause<OMPC_Shared>,
2345 VersionedClause<OMPC_UsesAllocators, 50>,
2346 ];
2347 let allowedOnceClauses = [
2348 VersionedClause<OMPC_Bind, 50>,
2349 VersionedClause<OMPC_Collapse>,
2350 VersionedClause<OMPC_Default>,
2351 VersionedClause<OMPC_NoWait>,
2352 VersionedClause<OMPC_NumTeams>,
2353 VersionedClause<OMPC_OMPX_DynCGroupMem>,
2354 VersionedClause<OMPC_Order>,
2355 VersionedClause<OMPC_ThreadLimit>,
2356 ];
2357 let leafConstructs = [OMP_Target, OMP_Teams, OMP_loop];
2358 let category = CA_Executable;
2359 }
2360 def OMP_TaskLoopSimd : Directive<"taskloop simd"> {
2361 let allowedClauses = [
2362 VersionedClause<OMPC_Aligned>,
2363 VersionedClause<OMPC_Allocate>,
2364 VersionedClause<OMPC_Default>,
2365 VersionedClause<OMPC_FirstPrivate>,
2366 VersionedClause<OMPC_If>,
2367 VersionedClause<OMPC_InReduction>,
2368 VersionedClause<OMPC_LastPrivate>,
2369 VersionedClause<OMPC_Linear>,
2370 VersionedClause<OMPC_Mergeable>,
2371 VersionedClause<OMPC_NoGroup>,
2372 VersionedClause<OMPC_NonTemporal, 50>,
2373 VersionedClause<OMPC_Private>,
2374 VersionedClause<OMPC_Reduction>,
2375 VersionedClause<OMPC_Shared>,
2376 VersionedClause<OMPC_Untied>,
2377 ];
2378 let allowedOnceClauses = [
2379 VersionedClause<OMPC_Collapse>,
2380 VersionedClause<OMPC_Final>,
2381 VersionedClause<OMPC_Order, 50>,
2382 VersionedClause<OMPC_Priority>,
2383 VersionedClause<OMPC_SafeLen>,
2384 VersionedClause<OMPC_SimdLen>,
2385 ];
2386 let allowedExclusiveClauses = [
2387 VersionedClause<OMPC_GrainSize>,
2388 VersionedClause<OMPC_NumTasks>,
2389 ];
2390 let leafConstructs = [OMP_TaskLoop, OMP_Simd];
2391 let category = CA_Executable;
2392 }
2393 def OMP_TeamsDistribute : Directive<"teams distribute"> {
2394 let allowedClauses = [
2395 VersionedClause<OMPC_Allocate>,
2396 VersionedClause<OMPC_Collapse>,
2397 VersionedClause<OMPC_Default>,
2398 VersionedClause<OMPC_DistSchedule>,
2399 VersionedClause<OMPC_FirstPrivate>,
2400 VersionedClause<OMPC_LastPrivate>,
2401 VersionedClause<OMPC_NumTeams>,
2402 VersionedClause<OMPC_OMPX_Attribute>,
2403 VersionedClause<OMPC_Private>,
2404 VersionedClause<OMPC_Reduction>,
2405 VersionedClause<OMPC_Shared>,
2406 VersionedClause<OMPC_ThreadLimit>,
2407 ];
2408 let allowedOnceClauses = [
2409 VersionedClause<OMPC_If>,
2410 VersionedClause<OMPC_Order, 50>,
2411 ];
2412 let leafConstructs = [OMP_Teams, OMP_Distribute];
2413 let category = CA_Executable;
2414 }
2415 def OMP_TeamsDistributeParallelDo :
2416 Directive<"teams distribute parallel do"> {
2417 let allowedClauses = [
2418 VersionedClause<OMPC_Allocate>,
2419 VersionedClause<OMPC_Copyin>,
2420 VersionedClause<OMPC_FirstPrivate>,
2421 VersionedClause<OMPC_If>,
2422 VersionedClause<OMPC_LastPrivate>,
2423 VersionedClause<OMPC_Linear>,
2424 VersionedClause<OMPC_Private>,
2425 VersionedClause<OMPC_Reduction>,
2426 VersionedClause<OMPC_Shared>,
2427 ];
2428 let allowedOnceClauses = [
2429 VersionedClause<OMPC_Collapse>,
2430 VersionedClause<OMPC_Default>,
2431 VersionedClause<OMPC_DistSchedule>,
2432 VersionedClause<OMPC_NumTeams>,
2433 VersionedClause<OMPC_NumThreads>,
2434 VersionedClause<OMPC_Order, 50>,
2435 VersionedClause<OMPC_ProcBind>,
2436 VersionedClause<OMPC_Schedule>,
2437 VersionedClause<OMPC_ThreadLimit>,
2438 ];
2439 let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do];
2440 let category = CA_Executable;
2441 }
2442 def OMP_TeamsDistributeParallelDoSimd :
2443 Directive<"teams distribute parallel do simd"> {
2444 let allowedClauses = [
2445 VersionedClause<OMPC_Aligned>,
2446 VersionedClause<OMPC_Allocate>,
2447 VersionedClause<OMPC_FirstPrivate>,
2448 VersionedClause<OMPC_If>,
2449 VersionedClause<OMPC_LastPrivate>,
2450 VersionedClause<OMPC_Linear>,
2451 VersionedClause<OMPC_NonTemporal>,
2452 VersionedClause<OMPC_Private>,
2453 VersionedClause<OMPC_Reduction>,
2454 VersionedClause<OMPC_Shared>,
2455 ];
2456 let allowedOnceClauses = [
2457 VersionedClause<OMPC_Collapse>,
2458 VersionedClause<OMPC_Default>,
2459 VersionedClause<OMPC_DistSchedule>,
2460 VersionedClause<OMPC_NumTeams>,
2461 VersionedClause<OMPC_NumThreads>,
2462 VersionedClause<OMPC_Order, 50>,
2463 VersionedClause<OMPC_ProcBind>,
2464 VersionedClause<OMPC_SafeLen>,
2465 VersionedClause<OMPC_Schedule>,
2466 VersionedClause<OMPC_SimdLen>,
2467 VersionedClause<OMPC_ThreadLimit>,
2468 ];
2469 let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd];
2470 let category = CA_Executable;
2471 }
2472 def OMP_TeamsDistributeParallelFor :
2473 Directive<"teams distribute parallel for"> {
2474 let allowedClauses = [
2475 VersionedClause<OMPC_Allocate>,
2476 VersionedClause<OMPC_Collapse>,
2477 VersionedClause<OMPC_Copyin>,
2478 VersionedClause<OMPC_Default>,
2479 VersionedClause<OMPC_DistSchedule>,
2480 VersionedClause<OMPC_FirstPrivate>,
2481 VersionedClause<OMPC_If>,
2482 VersionedClause<OMPC_LastPrivate>,
2483 VersionedClause<OMPC_NumTeams>,
2484 VersionedClause<OMPC_NumThreads>,
2485 VersionedClause<OMPC_OMPX_Attribute>,
2486 VersionedClause<OMPC_Order, 50>,
2487 VersionedClause<OMPC_Private>,
2488 VersionedClause<OMPC_ProcBind>,
2489 VersionedClause<OMPC_Reduction>,
2490 VersionedClause<OMPC_Schedule>,
2491 VersionedClause<OMPC_Shared>,
2492 VersionedClause<OMPC_ThreadLimit>,
2493 ];
2494 let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For];
2495 let category = CA_Executable;
2496 }
2497 def OMP_TeamsDistributeParallelForSimd :
2498 Directive<"teams distribute parallel for simd"> {
2499 let allowedClauses = [
2500 VersionedClause<OMPC_Aligned>,
2501 VersionedClause<OMPC_Allocate>,
2502 VersionedClause<OMPC_Collapse>,
2503 VersionedClause<OMPC_Default>,
2504 VersionedClause<OMPC_DistSchedule>,
2505 VersionedClause<OMPC_FirstPrivate>,
2506 VersionedClause<OMPC_If>,
2507 VersionedClause<OMPC_LastPrivate>,
2508 VersionedClause<OMPC_Linear>,
2509 VersionedClause<OMPC_NonTemporal, 50>,
2510 VersionedClause<OMPC_NumTeams>,
2511 VersionedClause<OMPC_NumThreads>,
2512 VersionedClause<OMPC_OMPX_Attribute>,
2513 VersionedClause<OMPC_Order, 50>,
2514 VersionedClause<OMPC_Private>,
2515 VersionedClause<OMPC_ProcBind>,
2516 VersionedClause<OMPC_Reduction>,
2517 VersionedClause<OMPC_SafeLen>,
2518 VersionedClause<OMPC_Schedule>,
2519 VersionedClause<OMPC_Shared>,
2520 VersionedClause<OMPC_SimdLen>,
2521 VersionedClause<OMPC_ThreadLimit>,
2522 ];
2523 let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd];
2524 let category = CA_Executable;
2525 }
2526 def OMP_TeamsDistributeSimd : Directive<"teams distribute simd"> {
2527 let allowedClauses = [
2528 VersionedClause<OMPC_Aligned>,
2529 VersionedClause<OMPC_Allocate>,
2530 VersionedClause<OMPC_FirstPrivate>,
2531 VersionedClause<OMPC_If, 50>,
2532 VersionedClause<OMPC_LastPrivate>,
2533 VersionedClause<OMPC_Linear>,
2534 VersionedClause<OMPC_NonTemporal, 50>,
2535 VersionedClause<OMPC_OMPX_Attribute>,
2536 VersionedClause<OMPC_Private>,
2537 VersionedClause<OMPC_Reduction>,
2538 VersionedClause<OMPC_Shared>,
2539 ];
2540 let allowedOnceClauses = [
2541 VersionedClause<OMPC_Collapse>,
2542 VersionedClause<OMPC_Default>,
2543 VersionedClause<OMPC_DistSchedule>,
2544 VersionedClause<OMPC_NumTeams>,
2545 VersionedClause<OMPC_Order, 50>,
2546 VersionedClause<OMPC_SafeLen>,
2547 VersionedClause<OMPC_SimdLen>,
2548 VersionedClause<OMPC_ThreadLimit>,
2549 ];
2550 let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Simd];
2551 let category = CA_Executable;
2552 }
2553 def OMP_teams_loop : Directive<"teams loop"> {
2554 let allowedClauses = [
2555 VersionedClause<OMPC_Allocate>,
2556 VersionedClause<OMPC_FirstPrivate>,
2557 VersionedClause<OMPC_LastPrivate>,
2558 VersionedClause<OMPC_OMPX_Attribute>,
2559 VersionedClause<OMPC_Private>,
2560 VersionedClause<OMPC_Reduction>,
2561 VersionedClause<OMPC_Shared>,
2562 ];
2563 let allowedOnceClauses = [
2564 VersionedClause<OMPC_Bind, 50>,
2565 VersionedClause<OMPC_Collapse>,
2566 VersionedClause<OMPC_Default>,
2567 VersionedClause<OMPC_NumTeams>,
2568 VersionedClause<OMPC_Order>,
2569 VersionedClause<OMPC_ThreadLimit>,
2570 ];
2571 let leafConstructs = [OMP_Teams, OMP_loop];
2572 let category = CA_Executable;
2573 }