diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td index 609df6a4c54aa..afb8d5f725753 100644 --- a/llvm/include/llvm/Frontend/OpenMP/OMP.td +++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td @@ -28,151 +28,48 @@ def OpenMP : DirectiveLanguage { } //===----------------------------------------------------------------------===// -// Definition of OpenMP clauses +// Definitions of OpenMP clauses +// Sorted alphabetically wrt clause spelling. //===----------------------------------------------------------------------===// -def OMPC_Allocator : Clause<"allocator"> { - let clangClass = "OMPAllocatorClause"; - let flangClass = "ScalarIntExpr"; -} -def OMPC_If : Clause<"if"> { - let clangClass = "OMPIfClause"; - let flangClass = "OmpIfClause"; -} -def OMPC_Final : Clause<"final"> { - let clangClass = "OMPFinalClause"; - let flangClass = "ScalarLogicalExpr"; -} -def OMPC_NumThreads : Clause<"num_threads"> { - let clangClass = "OMPNumThreadsClause"; - let flangClass = "ScalarIntExpr"; -} -def OMPC_SafeLen : Clause<"safelen"> { - let clangClass = "OMPSafelenClause"; - let flangClass = "ScalarIntConstantExpr"; -} -def OMPC_SimdLen : Clause<"simdlen"> { - let clangClass = "OMPSimdlenClause"; - let flangClass = "ScalarIntConstantExpr"; -} -def OMPC_Collapse : Clause<"collapse"> { - let clangClass = "OMPCollapseClause"; - let flangClass = "ScalarIntConstantExpr"; -} -def OMPC_Default : Clause<"default"> { - let clangClass = "OMPDefaultClause"; - let flangClass = "OmpDefaultClause"; -} -def OMPC_Private : Clause<"private"> { - let clangClass = "OMPPrivateClause"; - let flangClass = "OmpObjectList"; -} -def OMPC_Sizes: Clause<"sizes"> { - let clangClass = "OMPSizesClause"; - let flangClass = "ScalarIntExpr"; - let isValueList = true; - } -def OMPC_Full: Clause<"full"> { - let clangClass = "OMPFullClause"; -} -def OMPC_Partial: Clause<"partial"> { - let clangClass = "OMPPartialClause"; - let flangClass = "ScalarIntConstantExpr"; - let isValueOptional = true; - } -def OMPC_FirstPrivate : Clause<"firstprivate"> { - let clangClass = "OMPFirstprivateClause"; - let flangClass = "OmpObjectList"; +def OMPC_Acquire : Clause<"acquire"> { + let clangClass = "OMPAcquireClause"; } -def OMPC_LastPrivate : Clause<"lastprivate"> { - let clangClass = "OMPLastprivateClause"; - let flangClass = "OmpObjectList"; +def OMPC_AcqRel : Clause<"acq_rel"> { + let clangClass = "OMPAcqRelClause"; } -def OMPC_Shared : Clause<"shared"> { - let clangClass = "OMPSharedClause"; - let flangClass = "OmpObjectList"; +def OMPC_AdjustArgs : Clause<"adjust_args"> { } -def OMPC_Reduction : Clause<"reduction"> { - let clangClass = "OMPReductionClause"; - let flangClass = "OmpReductionClause"; +def OMPC_Affinity : Clause<"affinity"> { + let clangClass = "OMPAffinityClause"; } -def OMPC_Linear : Clause<"linear"> { - let clangClass = "OMPLinearClause"; - let flangClass = "OmpLinearClause"; +def OMPC_Align : Clause<"align"> { + let clangClass = "OMPAlignClause"; } def OMPC_Aligned : Clause<"aligned"> { let clangClass = "OMPAlignedClause"; let flangClass = "OmpAlignedClause"; } -def OMPC_Copyin : Clause<"copyin"> { - let clangClass = "OMPCopyinClause"; - let flangClass = "OmpObjectList"; +def OMPC_Allocate : Clause<"allocate"> { + let clangClass = "OMPAllocateClause"; + let flangClass = "OmpAllocateClause"; } -def OMPC_CopyPrivate : Clause<"copyprivate"> { - let clangClass = "OMPCopyprivateClause"; - let flangClass = "OmpObjectList"; +def OMPC_Allocator : Clause<"allocator"> { + let clangClass = "OMPAllocatorClause"; + let flangClass = "ScalarIntExpr"; } -def OMP_PROC_BIND_master : ClauseVal<"master",2,1> {} -def OMP_PROC_BIND_close : ClauseVal<"close",3,1> {} -def OMP_PROC_BIND_spread : ClauseVal<"spread",4,1> {} -def OMP_PROC_BIND_primary : ClauseVal<"primary",5,1> {} -def OMP_PROC_BIND_default : ClauseVal<"default",6,0> {} -def OMP_PROC_BIND_unknown : ClauseVal<"unknown",7,0> { let isDefault = true; } -def OMPC_ProcBind : Clause<"proc_bind"> { - let clangClass = "OMPProcBindClause"; - let flangClass = "OmpProcBindClause"; - let enumClauseValue = "ProcBindKind"; - let allowedClauseValues = [ - OMP_PROC_BIND_primary, - OMP_PROC_BIND_master, - OMP_PROC_BIND_close, - OMP_PROC_BIND_spread, - OMP_PROC_BIND_default, - OMP_PROC_BIND_unknown - ]; +def OMPC_AppendArgs : Clause<"append_args"> { } - -def OMP_SCHEDULE_Static : ClauseVal<"static", 2, 1> {} -def OMP_SCHEDULE_Dynamic : ClauseVal<"dynamic", 3, 1> {} -def OMP_SCHEDULE_Guided : ClauseVal<"guided", 4, 1> {} -def OMP_SCHEDULE_Auto : ClauseVal<"auto", 5, 1> {} -def OMP_SCHEDULE_Runtime : ClauseVal<"runtime", 6, 1> {} -def OMP_SCHEDULE_Default : ClauseVal<"default", 7, 0> { let isDefault = 1; } - -def OMPC_Schedule : Clause<"schedule"> { - let clangClass = "OMPScheduleClause"; - let flangClass = "OmpScheduleClause"; - let enumClauseValue = "ScheduleKind"; - let allowedClauseValues = [ - OMP_SCHEDULE_Static, - OMP_SCHEDULE_Dynamic, - OMP_SCHEDULE_Guided, - OMP_SCHEDULE_Auto, - OMP_SCHEDULE_Runtime, - OMP_SCHEDULE_Default - ]; +def OMPC_At : Clause<"at"> { + let clangClass = "OMPAtClause"; } - -def OMP_MEMORY_ORDER_SeqCst : ClauseVal<"seq_cst", 1, 1> {} -def OMP_MEMORY_ORDER_AcqRel : ClauseVal<"acq_rel", 2, 1> {} -def OMP_MEMORY_ORDER_Acquire : ClauseVal<"acquire", 3, 1> {} -def OMP_MEMORY_ORDER_Release : ClauseVal<"release", 4, 1> {} -def OMP_MEMORY_ORDER_Relaxed : ClauseVal<"relaxed", 5, 1> {} -def OMP_MEMORY_ORDER_Default : ClauseVal<"default", 6, 0> { - let isDefault = 1; +def OMPC_AtomicDefaultMemOrder : Clause<"atomic_default_mem_order"> { + let clangClass = "OMPAtomicDefaultMemOrderClause"; + let flangClass = "OmpAtomicDefaultMemOrderClause"; } -def OMPC_MemoryOrder : Clause<"memory_order"> { - let enumClauseValue = "MemoryOrderKind"; - let allowedClauseValues = [ - OMP_MEMORY_ORDER_SeqCst, - OMP_MEMORY_ORDER_AcqRel, - OMP_MEMORY_ORDER_Acquire, - OMP_MEMORY_ORDER_Release, - OMP_MEMORY_ORDER_Relaxed, - OMP_MEMORY_ORDER_Default - ]; +def OMPC_Bind : Clause<"bind"> { + let clangClass = "OMPBindClause"; } - def OMP_CANCELLATION_CONSTRUCT_Parallel : ClauseVal<"parallel", 1, 1> {} def OMP_CANCELLATION_CONSTRUCT_Loop : ClauseVal<"loop", 2, 1> {} def OMP_CANCELLATION_CONSTRUCT_Sections : ClauseVal<"sections", 3, 1> {} @@ -180,7 +77,6 @@ def OMP_CANCELLATION_CONSTRUCT_Taskgroup : ClauseVal<"taskgroup", 4, 1> {} def OMP_CANCELLATION_CONSTRUCT_None : ClauseVal<"none", 5, 0> { let isDefault = 1; } - def OMPC_CancellationConstructType : Clause<"cancellation_construct_type"> { let enumClauseValue = "CancellationConstructType"; let allowedClauseValues = [ @@ -191,35 +87,46 @@ def OMPC_CancellationConstructType : Clause<"cancellation_construct_type"> { OMP_CANCELLATION_CONSTRUCT_None ]; } - -def OMPC_Ordered : Clause<"ordered"> { - let clangClass = "OMPOrderedClause"; +def OMPC_Capture : Clause<"capture"> { + let clangClass = "OMPCaptureClause"; +} +def OMPC_Collapse : Clause<"collapse"> { + let clangClass = "OMPCollapseClause"; let flangClass = "ScalarIntConstantExpr"; - let isValueOptional = true; } -def OMPC_NoWait : Clause<"nowait"> { - let clangClass = "OMPNowaitClause"; +def OMPC_Compare : Clause<"compare"> { + let clangClass = "OMPCompareClause"; } -def OMPC_Untied : Clause<"untied"> { let clangClass = "OMPUntiedClause"; } -def OMPC_Mergeable : Clause<"mergeable"> { - let clangClass = "OMPMergeableClause"; +def OMPC_Copyin : Clause<"copyin"> { + let clangClass = "OMPCopyinClause"; + let flangClass = "OmpObjectList"; +} +def OMPC_CopyPrivate : Clause<"copyprivate"> { + let clangClass = "OMPCopyprivateClause"; + let flangClass = "OmpObjectList"; +} +def OMPC_Default : Clause<"default"> { + let clangClass = "OMPDefaultClause"; + let flangClass = "OmpDefaultClause"; +} +def OMPC_DefaultMap : Clause<"defaultmap"> { + let clangClass = "OMPDefaultmapClause"; + let flangClass = "OmpDefaultmapClause"; } -def OMPC_Read : Clause<"read"> { let clangClass = "OMPReadClause"; } -def OMPC_Write : Clause<"write"> { let clangClass = "OMPWriteClause"; } -def OMPC_Update : Clause<"update"> { let clangClass = "OMPUpdateClause"; } -def OMPC_Capture : Clause<"capture"> { let clangClass = "OMPCaptureClause"; } -def OMPC_Compare : Clause<"compare"> { let clangClass = "OMPCompareClause"; } -def OMPC_Fail : Clause<"fail"> { let clangClass = "OMPFailClause"; } -def OMPC_SeqCst : Clause<"seq_cst"> { let clangClass = "OMPSeqCstClause"; } -def OMPC_AcqRel : Clause<"acq_rel"> { let clangClass = "OMPAcqRelClause"; } -def OMPC_Acquire : Clause<"acquire"> { let clangClass = "OMPAcquireClause"; } -def OMPC_Release : Clause<"release"> { let clangClass = "OMPReleaseClause"; } -def OMPC_Relaxed : Clause<"relaxed"> { let clangClass = "OMPRelaxedClause"; } -def OMPC_Weak : Clause<"weak"> { let clangClass = "OMPWeakClause"; } def OMPC_Depend : Clause<"depend"> { let clangClass = "OMPDependClause"; let flangClass = "OmpDependClause"; } +def OMPC_Depobj : Clause<"depobj"> { + let clangClass = "OMPDepobjClause"; + let isImplicit = true; +} +def OMPC_Destroy : Clause<"destroy"> { + let clangClass = "OMPDestroyClause"; +} +def OMPC_Detach : Clause<"detach"> { + let clangClass = "OMPDetachClause"; +} def OMPC_Device : Clause<"device"> { let clangClass = "OMPDeviceClause"; let flangClass = "OmpDeviceClause"; @@ -227,28 +134,51 @@ def OMPC_Device : Clause<"device"> { def OMPC_DeviceType : Clause<"device_type"> { let flangClass = "OmpDeviceTypeClause"; } -def OMPC_Threads : Clause<"threads"> { let clangClass = "OMPThreadsClause"; } -def OMPC_Simd : Clause<"simd"> { let clangClass = "OMPSIMDClause"; } -def OMPC_Map : Clause<"map"> { - let clangClass = "OMPMapClause"; - let flangClass = "OmpMapClause"; -} -def OMPC_NumTeams : Clause<"num_teams"> { - let clangClass = "OMPNumTeamsClause"; +def OMPC_DistSchedule : Clause<"dist_schedule"> { + let clangClass = "OMPDistScheduleClause"; let flangClass = "ScalarIntExpr"; + let isValueOptional = true; } -def OMPC_ThreadLimit : Clause<"thread_limit"> { - let clangClass = "OMPThreadLimitClause"; - let flangClass = "ScalarIntExpr"; +def OMPC_Doacross : Clause<"doacross"> { + let clangClass = "OMPDoacrossClause"; } -def OMPC_Priority : Clause<"priority"> { - let clangClass = "OMPPriorityClause"; +def OMPC_DynamicAllocators : Clause<"dynamic_allocators"> { + let clangClass = "OMPDynamicAllocatorsClause"; +} +def OMPC_Enter : Clause<"enter"> { + let flangClass = "OmpObjectList"; +} +def OMPC_Exclusive : Clause<"exclusive"> { + let clangClass = "OMPExclusiveClause"; +} +def OMPC_Fail : Clause<"fail"> { + let clangClass = "OMPFailClause"; +} +def OMPC_Filter : Clause<"filter"> { + let clangClass = "OMPFilterClause"; let flangClass = "ScalarIntExpr"; } - +def OMPC_Final : Clause<"final"> { + let clangClass = "OMPFinalClause"; + let flangClass = "ScalarLogicalExpr"; +} +def OMPC_FirstPrivate : Clause<"firstprivate"> { + let clangClass = "OMPFirstprivateClause"; + let flangClass = "OmpObjectList"; +} +def OMPC_Flush : Clause<"flush"> { + let clangClass = "OMPFlushClause"; + let isImplicit = true; +} +def OMPC_From : Clause<"from"> { + let clangClass = "OMPFromClause"; + let flangClass = "OmpObjectList"; +} +def OMPC_Full: Clause<"full"> { + let clangClass = "OMPFullClause"; +} def OMP_GRAINSIZE_Strict : ClauseVal<"strict", 1, 1> {} def OMP_GRAINSIZE_Unknown : ClauseVal<"unkonwn", 2, 0> { let isDefault = 1; } - def OMPC_GrainSize : Clause<"grainsize"> { let clangClass = "OMPGrainsizeClause"; let flangClass = "ScalarIntExpr"; @@ -258,101 +188,128 @@ def OMPC_GrainSize : Clause<"grainsize"> { OMP_GRAINSIZE_Unknown ]; } -def OMPC_NoGroup : Clause<"nogroup"> { - let clangClass = "OMPNogroupClause"; -} - -def OMP_NUMTASKS_Strict : ClauseVal<"strict", 1, 1> {} -def OMP_NUMTASKS_Unknown : ClauseVal<"unkonwn", 2, 0> { let isDefault = 1; } - -def OMPC_NumTasks : Clause<"num_tasks"> { - let clangClass = "OMPNumTasksClause"; - let flangClass = "ScalarIntExpr"; - let enumClauseValue = "NumTasksType"; - let allowedClauseValues = [ - OMP_NUMTASKS_Strict, - OMP_NUMTASKS_Unknown - ]; +def OMPC_HasDeviceAddr : Clause<"has_device_addr"> { + let clangClass = "OMPHasDeviceAddrClause"; + let flangClass = "OmpObjectList"; } def OMPC_Hint : Clause<"hint"> { let clangClass = "OMPHintClause"; let flangClass = "ConstantExpr"; } -def OMPC_DistSchedule : Clause<"dist_schedule"> { - let clangClass = "OMPDistScheduleClause"; - let flangClass = "ScalarIntExpr"; - let isValueOptional = true; +def OMPC_If : Clause<"if"> { + let clangClass = "OMPIfClause"; + let flangClass = "OmpIfClause"; } -def OMPC_DefaultMap : Clause<"defaultmap"> { - let clangClass = "OMPDefaultmapClause"; - let flangClass = "OmpDefaultmapClause"; +def OMPC_Inbranch : Clause<"inbranch"> { } -def OMPC_To : Clause<"to"> { - let clangClass = "OMPToClause"; - let flangClass = "OmpObjectList"; +def OMPC_Inclusive : Clause<"inclusive"> { + let clangClass = "OMPInclusiveClause"; } -def OMPC_Enter : Clause<"enter"> { - let flangClass = "OmpObjectList"; +def OMPC_Indirect : Clause<"indirect"> { } -def OMPC_From : Clause<"from"> { - let clangClass = "OMPFromClause"; - let flangClass = "OmpObjectList"; +def OMPC_Init : Clause<"init"> { + let clangClass = "OMPInitClause"; } -def OMPC_UseDevicePtr : Clause<"use_device_ptr"> { - let clangClass = "OMPUseDevicePtrClause"; - let flangClass = "OmpObjectList"; +def OMPC_InReduction : Clause<"in_reduction"> { + let clangClass = "OMPInReductionClause"; + let flangClass = "OmpInReductionClause"; } def OMPC_IsDevicePtr : Clause<"is_device_ptr"> { let clangClass = "OMPIsDevicePtrClause"; let flangClass = "OmpObjectList"; } -def OMPC_HasDeviceAddr : Clause<"has_device_addr"> { - let clangClass = "OMPHasDeviceAddrClause"; +def OMPC_LastPrivate : Clause<"lastprivate"> { + let clangClass = "OMPLastprivateClause"; let flangClass = "OmpObjectList"; } -def OMPC_TaskReduction : Clause<"task_reduction"> { - let clangClass = "OMPTaskReductionClause"; - let flangClass = "OmpReductionClause"; -} -def OMPC_InReduction : Clause<"in_reduction"> { - let clangClass = "OMPInReductionClause"; - let flangClass = "OmpInReductionClause"; -} -def OMPC_UnifiedAddress : Clause<"unified_address"> { - let clangClass = "OMPUnifiedAddressClause"; +def OMPC_Linear : Clause<"linear"> { + let clangClass = "OMPLinearClause"; + let flangClass = "OmpLinearClause"; } -def OMPC_UnifiedSharedMemory : Clause<"unified_shared_memory"> { - let clangClass = "OMPUnifiedSharedMemoryClause"; +def OMPC_Link : Clause<"link"> { + let flangClass = "OmpObjectList"; } -def OMPC_ReverseOffload : Clause<"reverse_offload"> { - let clangClass = "OMPReverseOffloadClause"; +def OMPC_Map : Clause<"map"> { + let clangClass = "OMPMapClause"; + let flangClass = "OmpMapClause"; } -def OMPC_DynamicAllocators : Clause<"dynamic_allocators"> { - let clangClass = "OMPDynamicAllocatorsClause"; +def OMPC_Match : Clause<"match"> { } -def OMPC_AtomicDefaultMemOrder : Clause<"atomic_default_mem_order"> { - let clangClass = "OMPAtomicDefaultMemOrderClause"; - let flangClass = "OmpAtomicDefaultMemOrderClause"; +def OMP_MEMORY_ORDER_SeqCst : ClauseVal<"seq_cst", 1, 1> {} +def OMP_MEMORY_ORDER_AcqRel : ClauseVal<"acq_rel", 2, 1> {} +def OMP_MEMORY_ORDER_Acquire : ClauseVal<"acquire", 3, 1> {} +def OMP_MEMORY_ORDER_Release : ClauseVal<"release", 4, 1> {} +def OMP_MEMORY_ORDER_Relaxed : ClauseVal<"relaxed", 5, 1> {} +def OMP_MEMORY_ORDER_Default : ClauseVal<"default", 6, 0> { + let isDefault = 1; } -def OMPC_At : Clause<"at"> { - let clangClass = "OMPAtClause"; +def OMPC_MemoryOrder : Clause<"memory_order"> { + let enumClauseValue = "MemoryOrderKind"; + let allowedClauseValues = [ + OMP_MEMORY_ORDER_SeqCst, + OMP_MEMORY_ORDER_AcqRel, + OMP_MEMORY_ORDER_Acquire, + OMP_MEMORY_ORDER_Release, + OMP_MEMORY_ORDER_Relaxed, + OMP_MEMORY_ORDER_Default + ]; } -def OMPC_Severity : Clause<"severity"> { - let clangClass = "OMPSeverityClause"; +def OMPC_Mergeable : Clause<"mergeable"> { + let clangClass = "OMPMergeableClause"; } def OMPC_Message : Clause<"message"> { let clangClass = "OMPMessageClause"; } -def OMPC_Allocate : Clause<"allocate"> { - let clangClass = "OMPAllocateClause"; - let flangClass = "OmpAllocateClause"; +def OMPC_Nocontext : Clause<"nocontext"> { + let clangClass = "OMPNocontextClause"; + let flangClass = "ScalarLogicalExpr"; +} +def OMPC_NoGroup : Clause<"nogroup"> { + let clangClass = "OMPNogroupClause"; } def OMPC_NonTemporal : Clause<"nontemporal"> { let clangClass = "OMPNontemporalClause"; let flangClass = "Name"; let isValueList = true; } - +def OMPC_Notinbranch : Clause<"notinbranch"> { +} +def OMPC_Novariants : Clause<"novariants"> { + let clangClass = "OMPNovariantsClause"; + let flangClass = "ScalarLogicalExpr"; +} +def OMPC_NoWait : Clause<"nowait"> { + let clangClass = "OMPNowaitClause"; +} +def OMP_NUMTASKS_Strict : ClauseVal<"strict", 1, 1> {} +def OMP_NUMTASKS_Unknown : ClauseVal<"unkonwn", 2, 0> { let isDefault = 1; } +def OMPC_NumTasks : Clause<"num_tasks"> { + let clangClass = "OMPNumTasksClause"; + let flangClass = "ScalarIntExpr"; + let enumClauseValue = "NumTasksType"; + let allowedClauseValues = [ + OMP_NUMTASKS_Strict, + OMP_NUMTASKS_Unknown + ]; +} +def OMPC_NumTeams : Clause<"num_teams"> { + let clangClass = "OMPNumTeamsClause"; + let flangClass = "ScalarIntExpr"; +} +def OMPC_NumThreads : Clause<"num_threads"> { + let clangClass = "OMPNumThreadsClause"; + let flangClass = "ScalarIntExpr"; +} +def OMPC_OMPX_Attribute : Clause<"ompx_attribute"> { + let clangClass = "OMPXAttributeClause"; +} +def OMPC_OMX_Bare : Clause<"ompx_bare"> { + let clangClass = "OMPXBareClause"; +} +def OMPC_OMPX_DynCGroupMem : Clause<"ompx_dyn_cgroup_mem"> { + let clangClass = "OMPXDynCGroupMemClause"; + let flangClass = "ScalarIntExpr"; +} def OMP_ORDER_concurrent : ClauseVal<"concurrent",1,1> {} def OMP_ORDER_unknown : ClauseVal<"unknown",2,0> { let isDefault = 1; } def OMPC_Order : Clause<"order"> { @@ -364,362 +321,467 @@ def OMPC_Order : Clause<"order"> { OMP_ORDER_concurrent ]; } -def OMPC_Init : Clause<"init"> { - let clangClass = "OMPInitClause"; +def OMPC_Ordered : Clause<"ordered"> { + let clangClass = "OMPOrderedClause"; + let flangClass = "ScalarIntConstantExpr"; + let isValueOptional = true; } -def OMPC_Use : Clause<"use"> { - let clangClass = "OMPUseClause"; +def OMPC_Partial: Clause<"partial"> { + let clangClass = "OMPPartialClause"; + let flangClass = "ScalarIntConstantExpr"; + let isValueOptional = true; } -def OMPC_Destroy : Clause<"destroy"> { - let clangClass = "OMPDestroyClause"; +def OMPC_Priority : Clause<"priority"> { + let clangClass = "OMPPriorityClause"; + let flangClass = "ScalarIntExpr"; } -def OMPC_Novariants : Clause<"novariants"> { - let clangClass = "OMPNovariantsClause"; - let flangClass = "ScalarLogicalExpr"; +def OMPC_Private : Clause<"private"> { + let clangClass = "OMPPrivateClause"; + let flangClass = "OmpObjectList"; } -def OMPC_Nocontext : Clause<"nocontext"> { - let clangClass = "OMPNocontextClause"; - let flangClass = "ScalarLogicalExpr"; +def OMP_PROC_BIND_master : ClauseVal<"master",2,1> {} +def OMP_PROC_BIND_close : ClauseVal<"close",3,1> {} +def OMP_PROC_BIND_spread : ClauseVal<"spread",4,1> {} +def OMP_PROC_BIND_primary : ClauseVal<"primary",5,1> {} +def OMP_PROC_BIND_default : ClauseVal<"default",6,0> {} +def OMP_PROC_BIND_unknown : ClauseVal<"unknown",7,0> { let isDefault = true; } +def OMPC_ProcBind : Clause<"proc_bind"> { + let clangClass = "OMPProcBindClause"; + let flangClass = "OmpProcBindClause"; + let enumClauseValue = "ProcBindKind"; + let allowedClauseValues = [ + OMP_PROC_BIND_primary, + OMP_PROC_BIND_master, + OMP_PROC_BIND_close, + OMP_PROC_BIND_spread, + OMP_PROC_BIND_default, + OMP_PROC_BIND_unknown + ]; } -def OMPC_Detach : Clause<"detach"> { - let clangClass = "OMPDetachClause"; +def OMPC_Read : Clause<"read"> { + let clangClass = "OMPReadClause"; } -def OMPC_Inclusive : Clause<"inclusive"> { - let clangClass = "OMPInclusiveClause"; +def OMPC_Reduction : Clause<"reduction"> { + let clangClass = "OMPReductionClause"; + let flangClass = "OmpReductionClause"; } -def OMPC_Exclusive : Clause<"exclusive"> { - let clangClass = "OMPExclusiveClause"; +def OMPC_Relaxed : Clause<"relaxed"> { + let clangClass = "OMPRelaxedClause"; } -def OMPC_UsesAllocators : Clause<"uses_allocators"> { - let clangClass = "OMPUsesAllocatorsClause"; +def OMPC_Release : Clause<"release"> { + let clangClass = "OMPReleaseClause"; } -def OMPC_Affinity : Clause<"affinity"> { - let clangClass = "OMPAffinityClause"; +def OMPC_ReverseOffload : Clause<"reverse_offload"> { + let clangClass = "OMPReverseOffloadClause"; } -def OMPC_UseDeviceAddr : Clause<"use_device_addr"> { - let clangClass = "OMPUseDeviceAddrClause"; +def OMPC_SafeLen : Clause<"safelen"> { + let clangClass = "OMPSafelenClause"; + let flangClass = "ScalarIntConstantExpr"; +} +def OMP_SCHEDULE_Static : ClauseVal<"static", 2, 1> {} +def OMP_SCHEDULE_Dynamic : ClauseVal<"dynamic", 3, 1> {} +def OMP_SCHEDULE_Guided : ClauseVal<"guided", 4, 1> {} +def OMP_SCHEDULE_Auto : ClauseVal<"auto", 5, 1> {} +def OMP_SCHEDULE_Runtime : ClauseVal<"runtime", 6, 1> {} +def OMP_SCHEDULE_Default : ClauseVal<"default", 7, 0> { let isDefault = 1; } +def OMPC_Schedule : Clause<"schedule"> { + let clangClass = "OMPScheduleClause"; + let flangClass = "OmpScheduleClause"; + let enumClauseValue = "ScheduleKind"; + let allowedClauseValues = [ + OMP_SCHEDULE_Static, + OMP_SCHEDULE_Dynamic, + OMP_SCHEDULE_Guided, + OMP_SCHEDULE_Auto, + OMP_SCHEDULE_Runtime, + OMP_SCHEDULE_Default + ]; +} +def OMPC_SeqCst : Clause<"seq_cst"> { + let clangClass = "OMPSeqCstClause"; +} +def OMPC_Severity : Clause<"severity"> { + let clangClass = "OMPSeverityClause"; +} +def OMPC_Shared : Clause<"shared"> { + let clangClass = "OMPSharedClause"; let flangClass = "OmpObjectList"; } -def OMPC_Uniform : Clause<"uniform"> { - let flangClass = "Name"; +def OMPC_Simd : Clause<"simd"> { + let clangClass = "OMPSIMDClause"; +} +def OMPC_SimdLen : Clause<"simdlen"> { + let clangClass = "OMPSimdlenClause"; + let flangClass = "ScalarIntConstantExpr"; +} +def OMPC_Sizes: Clause<"sizes"> { + let clangClass = "OMPSizesClause"; + let flangClass = "ScalarIntExpr"; let isValueList = true; } -def OMPC_Match : Clause<"match"> {} -def OMPC_AdjustArgs : Clause<"adjust_args"> { } -def OMPC_AppendArgs : Clause<"append_args"> { } -def OMPC_Depobj : Clause<"depobj"> { - let clangClass = "OMPDepobjClause"; - let isImplicit = true; +def OMPC_TaskReduction : Clause<"task_reduction"> { + let clangClass = "OMPTaskReductionClause"; + let flangClass = "OmpReductionClause"; } -def OMPC_Flush : Clause<"flush"> { - let clangClass = "OMPFlushClause"; - let isImplicit = true; +def OMPC_ThreadLimit : Clause<"thread_limit"> { + let clangClass = "OMPThreadLimitClause"; + let flangClass = "ScalarIntExpr"; } def OMPC_ThreadPrivate : Clause<"threadprivate"> { let alternativeName = "threadprivate or thread local"; let isImplicit = true; } +def OMPC_Threads : Clause<"threads"> { + let clangClass = "OMPThreadsClause"; +} +def OMPC_To : Clause<"to"> { + let clangClass = "OMPToClause"; + let flangClass = "OmpObjectList"; +} +def OMPC_UnifiedAddress : Clause<"unified_address"> { + let clangClass = "OMPUnifiedAddressClause"; +} +def OMPC_UnifiedSharedMemory : Clause<"unified_shared_memory"> { + let clangClass = "OMPUnifiedSharedMemoryClause"; +} +def OMPC_Uniform : Clause<"uniform"> { + let flangClass = "Name"; + let isValueList = true; +} def OMPC_Unknown : Clause<"unknown"> { let isImplicit = true; let isDefault = true; } -def OMPC_Link : Clause<"link"> { - let flangClass = "OmpObjectList"; +def OMPC_Untied : Clause<"untied"> { + let clangClass = "OMPUntiedClause"; } -def OMPC_Indirect : Clause<"indirect"> {} -def OMPC_Inbranch : Clause<"inbranch"> {} -def OMPC_Notinbranch : Clause<"notinbranch"> {} -def OMPC_Filter : Clause<"filter"> { - let clangClass = "OMPFilterClause"; - let flangClass = "ScalarIntExpr"; +def OMPC_Update : Clause<"update"> { + let clangClass = "OMPUpdateClause"; } -def OMPC_Align : Clause<"align"> { - let clangClass = "OMPAlignClause"; +def OMPC_Use : Clause<"use"> { + let clangClass = "OMPUseClause"; } -def OMPC_When: Clause<"when"> {} - -def OMPC_Bind : Clause<"bind"> { - let clangClass = "OMPBindClause"; +def OMPC_UsesAllocators : Clause<"uses_allocators"> { + let clangClass = "OMPUsesAllocatorsClause"; } - -def OMPC_OMPX_DynCGroupMem : Clause<"ompx_dyn_cgroup_mem"> { - let clangClass = "OMPXDynCGroupMemClause"; - let flangClass = "ScalarIntExpr"; +def OMPC_UseDeviceAddr : Clause<"use_device_addr"> { + let clangClass = "OMPUseDeviceAddrClause"; + let flangClass = "OmpObjectList"; } - -def OMPC_Doacross : Clause<"doacross"> { - let clangClass = "OMPDoacrossClause"; +def OMPC_UseDevicePtr : Clause<"use_device_ptr"> { + let clangClass = "OMPUseDevicePtrClause"; + let flangClass = "OmpObjectList"; } - -def OMPC_OMPX_Attribute : Clause<"ompx_attribute"> { - let clangClass = "OMPXAttributeClause"; +def OMPC_Weak : Clause<"weak"> { + let clangClass = "OMPWeakClause"; } - -def OMPC_OMX_Bare : Clause<"ompx_bare"> { - let clangClass = "OMPXBareClause"; +def OMPC_When: Clause<"when"> { +} +def OMPC_Write : Clause<"write"> { + let clangClass = "OMPWriteClause"; } //===----------------------------------------------------------------------===// -// Definition of OpenMP directives +// Definitions of OpenMP leaf directives +// Sorted alphabetically wrt directive spelling, except "end xyz" immediately +// follows "xyz". //===----------------------------------------------------------------------===// -def OMP_ThreadPrivate : Directive<"threadprivate"> { +def OMP_Allocate : Directive<"allocate"> { + let allowedOnceClauses = [ + VersionedClause, + VersionedClause, + ]; let association = AS_None; } -def OMP_Parallel : Directive<"parallel"> { +def OMP_Allocators : Directive<"allocators"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, + ]; + let association = AS_Block; +} +def OMP_Assumes : Directive<"assumes"> { + let association = AS_None; +} +def OMP_EndAssumes : Directive<"end assumes"> { + let association = AS_Delimited; +} +def OMP_Atomic : Directive<"atomic"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; let association = AS_Block; } -def OMP_Task : Directive<"task"> { +def OMP_Barrier : Directive<"barrier"> { + let association = AS_None; +} +def OMP_BeginAssumes : Directive<"begin assumes"> { + let association = AS_Delimited; +} +def OMP_BeginDeclareTarget : Directive<"begin declare target"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; + let association = AS_Delimited; +} +def OMP_BeginDeclareVariant : Directive<"begin declare variant"> { + let association = AS_Delimited; +} +def OMP_Cancel : Directive<"cancel"> { let allowedOnceClauses = [ - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause + ]; + let association = AS_None; +} +def OMP_CancellationPoint : Directive<"cancellation point"> { + let association = AS_None; +} +def OMP_Critical : Directive<"critical"> { + let allowedClauses = [ + VersionedClause, ]; let association = AS_Block; } -def OMP_Simd : Directive<"simd"> { +def OMP_DeclareMapper : Directive<"declare mapper"> { + let allowedClauses = [ + VersionedClause, + ]; + let association = AS_None; +} +def OMP_DeclareReduction : Directive<"declare reduction"> { + let association = AS_None; +} +def OMP_DeclareSimd : Directive<"declare simd"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause ]; - let association = AS_Loop; + let allowedExclusiveClauses = [ + VersionedClause, + VersionedClause, + ]; + let association = AS_Declaration; } -def OMP_Tile : Directive<"tile"> { +def OMP_DeclareTarget : Directive<"declare target"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + ]; let allowedOnceClauses = [ - VersionedClause, + VersionedClause, ]; - let association = AS_Loop; + let association = AS_None; } -def OMP_Unroll : Directive<"unroll"> { - let allowedOnceClauses = [ - VersionedClause, - VersionedClause, +def OMP_EndDeclareTarget : Directive<"end declare target"> { + let association = AS_Delimited; +} +def OMP_DeclareVariant : Directive<"declare variant"> { + let allowedClauses = [ + VersionedClause, ]; - let association = AS_Loop; + let allowedExclusiveClauses = [ + VersionedClause, + VersionedClause, + ]; + let association = AS_Declaration; } -def OMP_For : Directive<"for"> { +def OMP_EndDeclareVariant : Directive<"end declare variant"> { + let association = AS_Delimited; +} +def OMP_Depobj : Directive<"depobj"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + // TODO This should ne `none` instead. Comment carried over from + // OMPKinds.def. + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let association = AS_None; +} +def OMP_dispatch : Directive<"dispatch"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause ]; - let association = AS_Loop; + let association = AS_Block; } -def OMP_Do : Directive<"do"> { +def OMP_Distribute : Directive<"distribute"> { let allowedClauses = [ - VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, ]; let association = AS_Loop; } -def OMP_Sections : Directive<"sections"> { +def OMP_Do : Directive<"do"> { let allowedClauses = [ - VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause ]; - let association = AS_Block; -} -def OMP_Section : Directive<"section"> { - let association = AS_Separating; -} -def OMP_Single : Directive<"single"> { - let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, + let allowedOnceClauses = [ + VersionedClause, VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, ]; - let association = AS_Block; -} -def OMP_Master : Directive<"master"> { - let association = AS_Block; + let association = AS_Loop; } -def OMP_Critical : Directive<"critical"> { - let allowedClauses = [ - VersionedClause +def OMP_EndDo : Directive<"end do"> { + let allowedOnceClauses = [ + VersionedClause, ]; - let association = AS_Block; -} -def OMP_TaskYield : Directive<"taskyield"> { - let association = AS_None; -} -def OMP_Barrier : Directive<"barrier"> { - let association = AS_None; + // Needed for association computation, since OMP_Do has it "from leafConstructs". + let leafConstructs = OMP_Do.leafConstructs; + let association = OMP_Do.association; } def OMP_Error : Directive<"error"> { let allowedClauses = [ VersionedClause, + VersionedClause, VersionedClause, - VersionedClause - ]; - let association = AS_None; -} -def OMP_TaskWait : Directive<"taskwait"> { - let allowedClauses = [ - VersionedClause, - VersionedClause ]; let association = AS_None; } -def OMP_TaskGroup : Directive<"taskgroup"> { - let allowedClauses = [ - VersionedClause, - VersionedClause - ]; - let association = AS_Block; -} def OMP_Flush : Directive<"flush"> { let allowedOnceClauses = [ VersionedClause, VersionedClause, - VersionedClause, // TODO This should ne `none` instead. Comment carried over from // OMPKinds.def. - VersionedClause + VersionedClause, + VersionedClause, ]; let association = AS_None; } -def OMP_Ordered : Directive<"ordered"> { +def OMP_For : Directive<"for"> { let allowedClauses = [ - VersionedClause, - VersionedClause - ]; - let allowedOnceClauses = [ - VersionedClause, - VersionedClause - ]; - let association = AS_None; - // There is also a block-associated "ordered" directive. + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let association = AS_Loop; } -def OMP_Atomic : Directive<"atomic"> { +def OMP_interop : Directive<"interop"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let association = AS_None; +} +def OMP_loop : Directive<"loop"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let association = AS_Loop; +} +def OMP_masked : Directive<"masked"> { + let allowedOnceClauses = [ + VersionedClause, ]; let association = AS_Block; } -def OMP_Target : Directive<"target"> { +def OMP_Master : Directive<"master"> { + let association = AS_Block; +} +def OMP_Metadirective : Directive<"metadirective"> { + let allowedClauses = [ + VersionedClause, + ]; + let allowedOnceClauses = [ + VersionedClause, + ]; + let association = AS_None; +} +def OMP_Nothing : Directive<"nothing"> { + let association = AS_None; +} +def OMP_Ordered : Directive<"ordered"> { let allowedClauses = [ - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, ]; - let association = AS_Block; + let association = AS_None; + // There is also a block-associated "ordered" directive. } -def OMP_Teams : Directive<"teams"> { +def OMP_Parallel : Directive<"parallel"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, ]; let association = AS_Block; } -def OMP_Cancel : Directive<"cancel"> { - let allowedOnceClauses = [ - VersionedClause - ]; - let association = AS_None; -} def OMP_Requires : Directive<"requires"> { let allowedOnceClauses = [ VersionedClause, @@ -732,1596 +794,1564 @@ def OMP_Requires : Directive<"requires"> { // // TODO: Correct this supprted version number whenever complete // implementation of reverse_offload is available. - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause + VersionedClause, ]; let association = AS_None; } -def OMP_Nothing : Directive<"nothing"> { - let association = AS_None; +def OMP_Scan : Directive<"scan"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, + ]; + let association = AS_Separating; +} +def OMP_scope : Directive<"scope"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, + ]; + let allowedOnceClauses = [ + VersionedClause, + ]; + let association = AS_Block; +} +def OMP_Section : Directive<"section"> { + let association = AS_Separating; +} +def OMP_Sections : Directive<"sections"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let association = AS_Block; +} +def OMP_EndSections : Directive<"end sections"> { + let allowedOnceClauses = [ + VersionedClause, + ]; + let leafConstructs = OMP_Sections.leafConstructs; + let association = OMP_Sections.association; +} +def OMP_Simd : Directive<"simd"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let allowedOnceClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let association = AS_Loop; +} +def OMP_Single : Directive<"single"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let association = AS_Block; +} +def OMP_EndSingle : Directive<"end single"> { + let allowedClauses = [ + VersionedClause, + ]; + let allowedOnceClauses = [ + VersionedClause, + ]; + let leafConstructs = OMP_Single.leafConstructs; + let association = OMP_Single.association; +} +def OMP_Target : Directive<"target"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let allowedOnceClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let association = AS_Block; } def OMP_TargetData : Directive<"target data"> { let allowedOnceClauses = [ VersionedClause, - VersionedClause + VersionedClause, ]; let requiredClauses = [ VersionedClause, + VersionedClause, VersionedClause, - VersionedClause ]; let association = AS_Block; } def OMP_TargetEnterData : Directive<"target enter data"> { let allowedClauses = [ - VersionedClause + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, ]; let requiredClauses = [ - VersionedClause + VersionedClause, ]; let association = AS_None; } def OMP_TargetExitData : Directive<"target exit data"> { let allowedClauses = [ - VersionedClause + VersionedClause, ]; let allowedOnceClauses = [ VersionedClause, VersionedClause, - VersionedClause + VersionedClause, ]; let requiredClauses = [ - VersionedClause + VersionedClause, ]; let association = AS_None; } -def OMP_TargetParallel : Directive<"target parallel"> { +def OMP_TargetUpdate : Directive<"target update"> { let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let allowedOnceClauses = [ + VersionedClause, VersionedClause, - VersionedClause, VersionedClause, + ]; + let association = AS_None; +} +def OMP_Task : Directive<"task"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Target, OMP_Parallel]; + let association = AS_Block; } -def OMP_TargetParallelFor : Directive<"target parallel for"> { +def OMP_TaskGroup : Directive<"taskgroup"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + ]; + let association = AS_Block; +} +def OMP_TaskLoop : Directive<"taskloop"> { + let allowedClauses = [ + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Target, OMP_Parallel, OMP_For]; + let allowedExclusiveClauses = [ + VersionedClause, + VersionedClause, + ]; + let association = AS_Loop; } -def OMP_TargetParallelDo : Directive<"target parallel do"> { +def OMP_TaskWait : Directive<"taskwait"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + ]; + let association = AS_None; +} +def OMP_TaskYield : Directive<"taskyield"> { + let association = AS_None; +} +def OMP_Teams : Directive<"teams"> { + let allowedClauses = [ + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Target, OMP_Parallel, OMP_Do]; + let association = AS_Block; } -def OMP_TargetUpdate : Directive<"target update"> { - let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause - ]; +def OMP_ThreadPrivate : Directive<"threadprivate"> { + let association = AS_None; +} +def OMP_Tile : Directive<"tile"> { let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, ]; + let association = AS_Loop; +} +def OMP_Unknown : Directive<"unknown"> { + let isDefault = true; let association = AS_None; } -def OMP_masked : Directive<"masked"> { +def OMP_Unroll : Directive<"unroll"> { + let allowedOnceClauses = [ + VersionedClause, + VersionedClause, + ]; + let association = AS_Loop; +} +def OMP_Workshare : Directive<"workshare"> { let allowedOnceClauses = [ - VersionedClause + VersionedClause, ]; let association = AS_Block; } -def OMP_ParallelFor : Directive<"parallel for"> { +def OMP_EndWorkshare : Directive<"end workshare"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Parallel, OMP_For]; + let leafConstructs = OMP_Workshare.leafConstructs; + let association = OMP_Workshare.association; } -def OMP_ParallelDo : Directive<"parallel do"> { + +//===----------------------------------------------------------------------===// +// Definitions of OpenMP compound directives +// Sorted alphabetically wrt directive spelling, except "end xyz" immediately +// follows "xyz". +//===----------------------------------------------------------------------===// + +def OMP_DistributeParallelDo : Directive<"distribute parallel do"> { let allowedClauses = [ + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause ]; - let leafConstructs = [OMP_Parallel, OMP_Do]; + let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_Do]; } -def OMP_ParallelForSimd : Directive<"parallel for simd"> { +def OMP_DistributeParallelDoSimd : Directive<"distribute parallel do simd"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - ]; - let leafConstructs = [OMP_Parallel, OMP_For, OMP_Simd]; -} -def OMP_ParallelDoSimd : Directive<"parallel do simd"> { - let allowedClauses = [ - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - ]; - let allowedOnceClauses = [ VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause ]; - let leafConstructs = [OMP_Parallel, OMP_Do, OMP_Simd]; + let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd]; } -def OMP_ParallelMaster : Directive<"parallel master"> { +def OMP_DistributeParallelFor : Directive<"distribute parallel for"> { let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Parallel, OMP_Master]; + let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_For]; } -def OMP_ParallelMasked : Directive<"parallel masked"> { +def OMP_DistributeParallelForSimd : Directive<"distribute parallel for simd"> { let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Parallel, OMP_masked]; + let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd]; } -def OMP_ParallelSections : Directive<"parallel sections"> { +def OMP_DistributeSimd : Directive<"distribute simd"> { let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - ]; - let allowedOnceClauses = [ - VersionedClause, - VersionedClause - ]; - let leafConstructs = [OMP_Parallel, OMP_Sections]; -} -def OMP_ForSimd : Directive<"for simd"> { - let allowedClauses = [ + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, + ]; + let allowedOnceClauses = [ VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause ]; - let leafConstructs = [OMP_For, OMP_Simd]; + let leafConstructs = [OMP_Distribute, OMP_Simd]; } def OMP_DoSimd : Directive<"do simd"> { let allowedClauses = [ VersionedClause, - VersionedClause, VersionedClause, VersionedClause, VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause ]; let leafConstructs = [OMP_Do, OMP_Simd]; } -def OMP_CancellationPoint : Directive<"cancellation point"> { - let association = AS_None; -} -def OMP_DeclareReduction : Directive<"declare reduction"> { - let association = AS_None; -} -def OMP_DeclareMapper : Directive<"declare mapper"> { - let allowedClauses = [ - VersionedClause +def OMP_EndDoSimd : Directive<"end do simd"> { + let allowedOnceClauses = [ + VersionedClause, ]; - let association = AS_None; + let leafConstructs = OMP_DoSimd.leafConstructs; + let association = OMP_DoSimd.association; } -def OMP_DeclareSimd : Directive<"declare simd"> { +def OMP_ForSimd : Directive<"for simd"> { let allowedClauses = [ - VersionedClause, VersionedClause, - VersionedClause - ]; - let allowedOnceClauses = [ - VersionedClause - ]; - let allowedExclusiveClauses = [ - VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let association = AS_Declaration; + let leafConstructs = [OMP_For, OMP_Simd]; } -def OMP_TaskLoop : Directive<"taskloop"> { +def OMP_MaskedTaskloop : Directive<"masked taskloop"> { let allowedClauses = [ - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause - ]; - let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let allowedExclusiveClauses = [ - VersionedClause, - VersionedClause - ]; - let association = AS_Loop; + let leafConstructs = [OMP_masked, OMP_TaskLoop]; } -def OMP_TaskLoopSimd : Directive<"taskloop simd"> { +def OMP_MaskedTaskloopSimd : Directive<"masked taskloop simd"> { let allowedClauses = [ - VersionedClause, VersionedClause, VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, VersionedClause, VersionedClause, VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause - ]; - let allowedOnceClauses = [ - VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause - ]; - let allowedExclusiveClauses = [ - VersionedClause, - VersionedClause + VersionedClause, ]; - let leafConstructs = [OMP_TaskLoop, OMP_Simd]; + let leafConstructs = [OMP_masked, OMP_TaskLoop, OMP_Simd]; } -def OMP_Distribute : Directive<"distribute"> { +def OMP_MasterTaskloop : Directive<"master taskloop"> { let allowedClauses = [ - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause - ]; - let allowedOnceClauses = [ - VersionedClause, - VersionedClause - ]; - let association = AS_Loop; -} -def OMP_BeginDeclareTarget : Directive<"begin declare target"> { - let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause - ]; - let association = AS_Delimited; -} -def OMP_DeclareTarget : Directive<"declare target"> { - let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause - ]; - let allowedOnceClauses = [ - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let association = AS_None; -} -def OMP_EndDeclareTarget : Directive<"end declare target"> { - let association = AS_Delimited; + let leafConstructs = [OMP_Master, OMP_TaskLoop]; } -def OMP_DistributeParallelFor : Directive<"distribute parallel for"> { +def OMP_MasterTaskloopSimd : Directive<"master taskloop simd"> { let allowedClauses = [ - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_For]; + let leafConstructs = [OMP_Master, OMP_TaskLoop, OMP_Simd]; } -def OMP_DistributeParallelDo : Directive<"distribute parallel do"> { +def OMP_ParallelDo : Directive<"parallel do"> { let allowedClauses = [ - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, ]; let allowedOnceClauses = [ VersionedClause, - VersionedClause, VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause ]; - let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_Do]; + let leafConstructs = [OMP_Parallel, OMP_Do]; } -def OMP_DistributeParallelForSimd : Directive<"distribute parallel for simd"> { - let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - ]; - let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd]; -} -def OMP_DistributeParallelDoSimd : Directive<"distribute parallel do simd"> { - let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause - ]; - let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd]; -} -def OMP_DistributeSimd : Directive<"distribute simd"> { +def OMP_ParallelDoSimd : Directive<"parallel do simd"> { let allowedClauses = [ VersionedClause, VersionedClause, VersionedClause, VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause ]; - let leafConstructs = [OMP_Distribute, OMP_Simd]; + let leafConstructs = [OMP_Parallel, OMP_Do, OMP_Simd]; } - -def OMP_TargetParallelForSimd : Directive<"target parallel for simd"> { +def OMP_ParallelFor : Directive<"parallel for"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - ]; - let allowedOnceClauses = [ - VersionedClause, - VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Target, OMP_Parallel, OMP_For, OMP_Simd]; + let leafConstructs = [OMP_Parallel, OMP_For]; } -def OMP_TargetParallelDoSimd : Directive<"target parallel do simd"> { +def OMP_ParallelForSimd : Directive<"parallel for simd"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause ]; - let leafConstructs = [OMP_Target, OMP_Parallel, OMP_Do, OMP_Simd]; + let leafConstructs = [OMP_Parallel, OMP_For, OMP_Simd]; } -def OMP_TargetSimd : Directive<"target simd"> { +def OMP_parallel_loop : Directive<"parallel loop"> { let allowedClauses = [ - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, ]; let allowedOnceClauses = [ + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, ]; - let leafConstructs = [OMP_Target, OMP_Simd]; + let leafConstructs = [OMP_Parallel, OMP_loop]; } -def OMP_TeamsDistribute : Directive<"teams distribute"> { +def OMP_ParallelMasked : Directive<"parallel masked"> { let allowedClauses = [ + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + ]; + let leafConstructs = [OMP_Parallel, OMP_masked]; +} +def OMP_ParallelMaskedTaskloop : + Directive<"parallel masked taskloop"> { + let allowedClauses = [ VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let allowedOnceClauses = [ - VersionedClause - ]; - let leafConstructs = [OMP_Teams, OMP_Distribute]; + let leafConstructs = [OMP_Parallel, OMP_masked, OMP_TaskLoop]; } -def OMP_TeamsDistributeSimd : Directive<"teams distribute simd"> { +def OMP_ParallelMaskedTaskloopSimd : + Directive<"parallel masked taskloop simd"> { let allowedClauses = [ - VersionedClause, VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - ]; - let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, ]; - let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Simd]; + let leafConstructs = [OMP_Parallel, OMP_masked, OMP_TaskLoop, OMP_Simd]; } - -def OMP_TeamsDistributeParallelForSimd : - Directive<"teams distribute parallel for simd"> { +def OMP_ParallelMaster : Directive<"parallel master"> { let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd]; + let leafConstructs = [OMP_Parallel, OMP_Master]; } -def OMP_TeamsDistributeParallelDoSimd : - Directive<"teams distribute parallel do simd"> { +def OMP_ParallelMasterTaskloop : + Directive<"parallel master taskloop"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause - ]; - let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd]; + let leafConstructs = [OMP_Parallel, OMP_Master, OMP_TaskLoop]; } -def OMP_TeamsDistributeParallelFor : - Directive<"teams distribute parallel for"> { +def OMP_ParallelMasterTaskloopSimd : + Directive<"parallel master taskloop simd"> { let allowedClauses = [ - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For]; + let leafConstructs = [OMP_Parallel, OMP_Master, OMP_TaskLoop, OMP_Simd]; } -def OMP_TeamsDistributeParallelDo : - Directive<"teams distribute parallel do"> { +def OMP_ParallelSections : Directive<"parallel sections"> { let allowedClauses = [ - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, ]; -let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + let allowedOnceClauses = [ + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause ]; - let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do]; + let leafConstructs = [OMP_Parallel, OMP_Sections]; } -def OMP_TargetTeams : Directive<"target teams"> { +def OMP_ParallelWorkshare : Directive<"parallel workshare"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, ]; - let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Target, OMP_Teams]; + let leafConstructs = [OMP_Parallel, OMP_Workshare]; } -def OMP_TargetTeamsDistribute : Directive<"target teams distribute"> { +def OMP_TargetParallel : Directive<"target parallel"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute]; + let leafConstructs = [OMP_Target, OMP_Parallel]; } - -def OMP_TargetTeamsDistributeParallelFor : - Directive<"target teams distribute parallel for"> { +def OMP_TargetParallelDo : Directive<"target parallel do"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - ]; - let allowedOnceClauses = [ - VersionedClause, - ]; - let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For]; -} -def OMP_TargetTeamsDistributeParallelDo : - Directive<"target teams distribute parallel do"> { - let allowedClauses = [ VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause ]; - let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do]; + let leafConstructs = [OMP_Target, OMP_Parallel, OMP_Do]; } -def OMP_TargetTeamsDistributeParallelForSimd : - Directive<"target teams distribute parallel for simd"> { +def OMP_TargetParallelDoSimd : Directive<"target parallel do simd"> { let allowedClauses = [ - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let leafConstructs = [OMP_Target, OMP_Parallel, OMP_Do, OMP_Simd]; +} +def OMP_TargetParallelFor : Directive<"target parallel for"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + ]; + let allowedOnceClauses = [ + VersionedClause, + VersionedClause, + ]; + let leafConstructs = [OMP_Target, OMP_Parallel, OMP_For]; +} +def OMP_TargetParallelForSimd : Directive<"target parallel for simd"> { + let allowedClauses = [ VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, ]; let allowedOnceClauses = [ VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd]; + let leafConstructs = [OMP_Target, OMP_Parallel, OMP_For, OMP_Simd]; } -def OMP_TargetTeamsDistributeParallelDoSimd : - Directive<"target teams distribute parallel do simd"> { +def OMP_target_parallel_loop : Directive<"target parallel loop"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, ]; - let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd]; + let leafConstructs = [OMP_Target, OMP_Parallel, OMP_loop]; } -def OMP_TargetTeamsDistributeSimd : - Directive<"target teams distribute simd"> { +def OMP_TargetSimd : Directive<"target simd"> { let allowedClauses = [ VersionedClause, VersionedClause, VersionedClause, VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, VersionedClause, VersionedClause, VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, VersionedClause, VersionedClause, - VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause - ]; - let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Simd]; -} -def OMP_Allocate : Directive<"allocate"> { - let allowedOnceClauses = [ - VersionedClause, - VersionedClause - ]; - let association = AS_None; -} -def OMP_Allocators : Directive<"allocators"> { - let allowedClauses = [ - VersionedClause + VersionedClause, ]; - let association = AS_Block; + let leafConstructs = [OMP_Target, OMP_Simd]; } -def OMP_DeclareVariant : Directive<"declare variant"> { +def OMP_TargetTeams : Directive<"target teams"> { let allowedClauses = [ - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let allowedExclusiveClauses = [ - VersionedClause, - VersionedClause + let allowedOnceClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let association = AS_Declaration; + let leafConstructs = [OMP_Target, OMP_Teams]; } -def OMP_MasterTaskloop : Directive<"master taskloop"> { +def OMP_TargetTeamsDistribute : Directive<"target teams distribute"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Master, OMP_TaskLoop]; + let allowedOnceClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + ]; + let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute]; } -def OMP_MaskedTaskloop : Directive<"masked taskloop"> { +def OMP_TargetTeamsDistributeParallelDo : + Directive<"target teams distribute parallel do"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause - ]; - let leafConstructs = [OMP_masked, OMP_TaskLoop]; -} -def OMP_ParallelMasterTaskloop : - Directive<"parallel master taskloop"> { - let allowedClauses = [ - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + ]; + let allowedOnceClauses = [ VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Parallel, OMP_Master, OMP_TaskLoop]; + let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do]; } -def OMP_ParallelMaskedTaskloop : - Directive<"parallel masked taskloop"> { +def OMP_TargetTeamsDistributeParallelDoSimd : + Directive<"target teams distribute parallel do simd"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + ]; + let allowedOnceClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Parallel, OMP_masked, OMP_TaskLoop]; + let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd]; } -def OMP_MasterTaskloopSimd : Directive<"master taskloop simd"> { +def OMP_TargetTeamsDistributeParallelFor : + Directive<"target teams distribute parallel for"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Master, OMP_TaskLoop, OMP_Simd]; + let allowedOnceClauses = [ + VersionedClause, + ]; + let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For]; } -def OMP_MaskedTaskloopSimd : Directive<"masked taskloop simd"> { +def OMP_TargetTeamsDistributeParallelForSimd : + Directive<"target teams distribute parallel for simd"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause - ]; - let leafConstructs = [OMP_masked, OMP_TaskLoop, OMP_Simd]; -} -def OMP_ParallelMasterTaskloopSimd : - Directive<"parallel master taskloop simd"> { - let allowedClauses = [ - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Parallel, OMP_Master, OMP_TaskLoop, OMP_Simd]; + let allowedOnceClauses = [ + VersionedClause, + ]; + let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd]; } -def OMP_ParallelMaskedTaskloopSimd : - Directive<"parallel masked taskloop simd"> { +def OMP_TargetTeamsDistributeSimd : + Directive<"target teams distribute simd"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Parallel, OMP_masked, OMP_TaskLoop, OMP_Simd]; -} -def OMP_Depobj : Directive<"depobj"> { - let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - // TODO This should ne `none` instead. Comment carried over from - // OMPKinds.def. - VersionedClause - ]; - let association = AS_None; -} -def OMP_Scan : Directive<"scan"> { - let allowedClauses = [ - VersionedClause, - VersionedClause + let allowedOnceClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let association = AS_Separating; -} -def OMP_Assumes : Directive<"assumes"> { - let association = AS_None; -} -def OMP_BeginAssumes : Directive<"begin assumes"> { - let association = AS_Delimited; -} -def OMP_EndAssumes : Directive<"end assumes"> { - let association = AS_Delimited; -} -def OMP_BeginDeclareVariant : Directive<"begin declare variant"> { - let association = AS_Delimited; -} -def OMP_EndDeclareVariant : Directive<"end declare variant"> { - let association = AS_Delimited; + let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Simd]; } -def OMP_scope : Directive<"scope"> { +def OMP_target_teams_loop : Directive<"target teams loop"> { let allowedClauses = [ - VersionedClause, - VersionedClause, - ]; - let allowedOnceClauses = [ - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let association = AS_Block; -} -def OMP_Workshare : Directive<"workshare"> { let allowedOnceClauses = [ - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let association = AS_Block; + let leafConstructs = [OMP_Target, OMP_Teams, OMP_loop]; } -def OMP_ParallelWorkshare : Directive<"parallel workshare"> { +def OMP_TaskLoopSimd : Directive<"taskloop simd"> { let allowedClauses = [ + VersionedClause, VersionedClause, - VersionedClause, VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause - ]; - let allowedOnceClauses = [ - VersionedClause, - VersionedClause, - VersionedClause - ]; - let leafConstructs = [OMP_Parallel, OMP_Workshare]; -} -def OMP_EndDo : Directive<"end do"> { - let allowedOnceClauses = [ - VersionedClause + VersionedClause, + VersionedClause, ]; - // Needed for association computation, since OMP_Do has it "from leafConstructs". - let leafConstructs = OMP_Do.leafConstructs; - let association = OMP_Do.association; -} -def OMP_EndDoSimd : Directive<"end do simd"> { let allowedOnceClauses = [ - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = OMP_DoSimd.leafConstructs; - let association = OMP_DoSimd.association; -} -def OMP_EndSections : Directive<"end sections"> { - let allowedOnceClauses = [ - VersionedClause + let allowedExclusiveClauses = [ + VersionedClause, + VersionedClause, ]; - let leafConstructs = OMP_Sections.leafConstructs; - let association = OMP_Sections.association; + let leafConstructs = [OMP_TaskLoop, OMP_Simd]; } -def OMP_EndSingle : Directive<"end single"> { +def OMP_TeamsDistribute : Directive<"teams distribute"> { let allowedClauses = [ - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause - ]; - let leafConstructs = OMP_Single.leafConstructs; - let association = OMP_Single.association; -} -def OMP_EndWorkshare : Directive<"end workshare"> { - let allowedClauses = [ - VersionedClause - ]; - let leafConstructs = OMP_Workshare.leafConstructs; - let association = OMP_Workshare.association; -} -def OMP_interop : Directive<"interop"> { - let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - ]; - let association = AS_None; -} -def OMP_dispatch : Directive<"dispatch"> { - let allowedClauses = [ - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause + VersionedClause, ]; - let association = AS_Block; + let leafConstructs = [OMP_Teams, OMP_Distribute]; } -def OMP_loop : Directive<"loop"> { +def OMP_TeamsDistributeParallelDo : + Directive<"teams distribute parallel do"> { let allowedClauses = [ + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, VersionedClause, + VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, VersionedClause, - VersionedClause + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let association = AS_Loop; + let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do]; } -def OMP_teams_loop : Directive<"teams loop"> { +def OMP_TeamsDistributeParallelDoSimd : + Directive<"teams distribute parallel do simd"> { let allowedClauses = [ + VersionedClause, VersionedClause, VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, VersionedClause, - VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, ]; - let leafConstructs = [OMP_Teams, OMP_loop]; + let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd]; } -def OMP_target_teams_loop : Directive<"target teams loop"> { +def OMP_TeamsDistributeParallelFor : + Directive<"teams distribute parallel for"> { let allowedClauses = [ - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, ]; - let allowedOnceClauses = [ - VersionedClause, + let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For]; +} +def OMP_TeamsDistributeParallelForSimd : + Directive<"teams distribute parallel for simd"> { + let allowedClauses = [ + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, ]; - let leafConstructs = [OMP_Target, OMP_Teams, OMP_loop]; + let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd]; } -def OMP_parallel_loop : Directive<"parallel loop"> { +def OMP_TeamsDistributeSimd : Directive<"teams distribute simd"> { let allowedClauses = [ + VersionedClause, VersionedClause, - VersionedClause, VersionedClause, + VersionedClause, VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, VersionedClause, VersionedClause, VersionedClause, - VersionedClause, ]; let allowedOnceClauses = [ - VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Parallel, OMP_loop]; + let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Simd]; } -def OMP_target_parallel_loop : Directive<"target parallel loop"> { +def OMP_teams_loop : Directive<"teams loop"> { let allowedClauses = [ - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, ]; let allowedOnceClauses = [ VersionedClause, VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, VersionedClause, - VersionedClause, - VersionedClause, - VersionedClause, + VersionedClause, ]; - let leafConstructs = [OMP_Target, OMP_Parallel, OMP_loop]; -} -def OMP_Metadirective : Directive<"metadirective"> { - let allowedClauses = [VersionedClause]; - let allowedOnceClauses = [VersionedClause]; - let association = AS_None; -} - -def OMP_Unknown : Directive<"unknown"> { - let isDefault = true; - let association = AS_None; + let leafConstructs = [OMP_Teams, OMP_loop]; }