1//===-- OMP.td - OpenMP directive definition file ----------*- tablegen -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This is the definition file for OpenMP directives and clauses. 10// 11//===----------------------------------------------------------------------===// 12 13include "llvm/Frontend/Directive/DirectiveBase.td" 14 15//===----------------------------------------------------------------------===// 16// Definition of general OpenMP information 17//===----------------------------------------------------------------------===// 18 19def OpenMP : DirectiveLanguage { 20 let name = "OpenMP"; 21 let cppNamespace = "omp"; // final namespace will be llvm::omp 22 let directivePrefix = "OMPD_"; 23 let clausePrefix = "OMPC_"; 24 let makeEnumAvailableInNamespace = true; 25 let enableBitmaskEnumInNamespace = true; 26 let clauseEnumSetClass = "OmpClauseSet"; 27 let flangClauseBaseClass = "OmpClause"; 28} 29 30//===----------------------------------------------------------------------===// 31// Definitions of OpenMP clauses 32// Sorted alphabetically wrt clause spelling. 33//===----------------------------------------------------------------------===// 34 35def OMPC_Absent : Clause<"absent"> { 36 let clangClass = "OMPAbsentClause"; 37} 38def OMPC_Acquire : Clause<"acquire"> { 39 let clangClass = "OMPAcquireClause"; 40} 41def OMPC_AcqRel : Clause<"acq_rel"> { 42 let clangClass = "OMPAcqRelClause"; 43} 44def OMPC_AdjustArgs : Clause<"adjust_args"> { 45} 46def OMPC_Affinity : Clause<"affinity"> { 47 let clangClass = "OMPAffinityClause"; 48} 49def OMPC_Align : Clause<"align"> { 50 let clangClass = "OMPAlignClause"; 51} 52def OMPC_Aligned : Clause<"aligned"> { 53 let clangClass = "OMPAlignedClause"; 54 let flangClass = "OmpAlignedClause"; 55} 56def OMPC_Allocate : Clause<"allocate"> { 57 let clangClass = "OMPAllocateClause"; 58 let flangClass = "OmpAllocateClause"; 59} 60def OMPC_Allocator : Clause<"allocator"> { 61 let clangClass = "OMPAllocatorClause"; 62 let flangClass = "ScalarIntExpr"; 63} 64def OMPC_AppendArgs : Clause<"append_args"> { 65} 66def OMPC_At : Clause<"at"> { 67 let clangClass = "OMPAtClause"; 68} 69def OMPC_AtomicDefaultMemOrder : Clause<"atomic_default_mem_order"> { 70 let clangClass = "OMPAtomicDefaultMemOrderClause"; 71 let flangClass = "OmpAtomicDefaultMemOrderClause"; 72} 73def OMPC_Bind : Clause<"bind"> { 74 let clangClass = "OMPBindClause"; 75} 76def OMP_CANCELLATION_CONSTRUCT_Parallel : ClauseVal<"parallel", 1, 1> {} 77def OMP_CANCELLATION_CONSTRUCT_Loop : ClauseVal<"loop", 2, 1> {} 78def OMP_CANCELLATION_CONSTRUCT_Sections : ClauseVal<"sections", 3, 1> {} 79def OMP_CANCELLATION_CONSTRUCT_Taskgroup : ClauseVal<"taskgroup", 4, 1> {} 80def OMP_CANCELLATION_CONSTRUCT_None : ClauseVal<"none", 5, 0> { 81 let isDefault = 1; 82} 83def OMPC_CancellationConstructType : Clause<"cancellation_construct_type"> { 84 let enumClauseValue = "CancellationConstructType"; 85 let allowedClauseValues = [ 86 OMP_CANCELLATION_CONSTRUCT_Parallel, 87 OMP_CANCELLATION_CONSTRUCT_Loop, 88 OMP_CANCELLATION_CONSTRUCT_Sections, 89 OMP_CANCELLATION_CONSTRUCT_Taskgroup, 90 OMP_CANCELLATION_CONSTRUCT_None 91 ]; 92} 93def OMPC_Contains : Clause<"contains"> { 94 let clangClass = "OMPContainsClause"; 95} 96def OMPC_Capture : Clause<"capture"> { 97 let clangClass = "OMPCaptureClause"; 98} 99def OMPC_Collapse : Clause<"collapse"> { 100 let clangClass = "OMPCollapseClause"; 101 let flangClass = "ScalarIntConstantExpr"; 102} 103def OMPC_Compare : Clause<"compare"> { 104 let clangClass = "OMPCompareClause"; 105} 106def OMPC_Copyin : Clause<"copyin"> { 107 let clangClass = "OMPCopyinClause"; 108 let flangClass = "OmpObjectList"; 109} 110def OMPC_CopyPrivate : Clause<"copyprivate"> { 111 let clangClass = "OMPCopyprivateClause"; 112 let flangClass = "OmpObjectList"; 113} 114def OMPC_Default : Clause<"default"> { 115 let clangClass = "OMPDefaultClause"; 116 let flangClass = "OmpDefaultClause"; 117} 118def OMPC_DefaultMap : Clause<"defaultmap"> { 119 let clangClass = "OMPDefaultmapClause"; 120 let flangClass = "OmpDefaultmapClause"; 121} 122def OMPC_Depend : Clause<"depend"> { 123 let clangClass = "OMPDependClause"; 124 let flangClass = "OmpDependClause"; 125} 126def OMPC_Depobj : Clause<"depobj"> { 127 let clangClass = "OMPDepobjClause"; 128 let isImplicit = true; 129} 130def OMPC_Destroy : Clause<"destroy"> { 131 let clangClass = "OMPDestroyClause"; 132} 133def OMPC_Detach : Clause<"detach"> { 134 let clangClass = "OMPDetachClause"; 135} 136def OMPC_Device : Clause<"device"> { 137 let clangClass = "OMPDeviceClause"; 138 let flangClass = "OmpDeviceClause"; 139} 140def OMPC_DeviceType : Clause<"device_type"> { 141 let flangClass = "OmpDeviceTypeClause"; 142} 143def OMPC_DistSchedule : Clause<"dist_schedule"> { 144 let clangClass = "OMPDistScheduleClause"; 145 let flangClass = "ScalarIntExpr"; 146 let isValueOptional = true; 147} 148def OMPC_Doacross : Clause<"doacross"> { 149 let clangClass = "OMPDoacrossClause"; 150} 151def OMPC_DynamicAllocators : Clause<"dynamic_allocators"> { 152 let clangClass = "OMPDynamicAllocatorsClause"; 153} 154def OMPC_Enter : Clause<"enter"> { 155 let flangClass = "OmpObjectList"; 156} 157def OMPC_Exclusive : Clause<"exclusive"> { 158 let clangClass = "OMPExclusiveClause"; 159} 160def OMPC_Fail : Clause<"fail"> { 161 let clangClass = "OMPFailClause"; 162} 163def OMPC_Filter : Clause<"filter"> { 164 let clangClass = "OMPFilterClause"; 165 let flangClass = "ScalarIntExpr"; 166} 167def OMPC_Final : Clause<"final"> { 168 let clangClass = "OMPFinalClause"; 169 let flangClass = "ScalarLogicalExpr"; 170} 171def OMPC_FirstPrivate : Clause<"firstprivate"> { 172 let clangClass = "OMPFirstprivateClause"; 173 let flangClass = "OmpObjectList"; 174} 175def OMPC_Flush : Clause<"flush"> { 176 let clangClass = "OMPFlushClause"; 177 let isImplicit = true; 178} 179def OMPC_From : Clause<"from"> { 180 let clangClass = "OMPFromClause"; 181 let flangClass = "OmpObjectList"; 182} 183def OMPC_Full: Clause<"full"> { 184 let clangClass = "OMPFullClause"; 185} 186def OMP_GRAINSIZE_Strict : ClauseVal<"strict", 1, 1> {} 187def OMP_GRAINSIZE_Unknown : ClauseVal<"unkonwn", 2, 0> { let isDefault = 1; } 188def OMPC_GrainSize : Clause<"grainsize"> { 189 let clangClass = "OMPGrainsizeClause"; 190 let flangClass = "ScalarIntExpr"; 191 let enumClauseValue = "GrainsizeType"; 192 let allowedClauseValues = [ 193 OMP_GRAINSIZE_Strict, 194 OMP_GRAINSIZE_Unknown 195 ]; 196} 197def OMPC_HasDeviceAddr : Clause<"has_device_addr"> { 198 let clangClass = "OMPHasDeviceAddrClause"; 199 let flangClass = "OmpObjectList"; 200} 201def OMPC_Hint : Clause<"hint"> { 202 let clangClass = "OMPHintClause"; 203 let flangClass = "ConstantExpr"; 204} 205def OMPC_Holds : Clause<"holds"> { 206 let clangClass = "OMPHoldsClause"; 207} 208def OMPC_If : Clause<"if"> { 209 let clangClass = "OMPIfClause"; 210 let flangClass = "OmpIfClause"; 211} 212def OMPC_Inbranch : Clause<"inbranch"> { 213} 214def OMPC_Inclusive : Clause<"inclusive"> { 215 let clangClass = "OMPInclusiveClause"; 216} 217def OMPC_Indirect : Clause<"indirect"> { 218} 219def OMPC_Init : Clause<"init"> { 220 let clangClass = "OMPInitClause"; 221} 222def OMPC_InReduction : Clause<"in_reduction"> { 223 let clangClass = "OMPInReductionClause"; 224 let flangClass = "OmpInReductionClause"; 225} 226def OMPC_IsDevicePtr : Clause<"is_device_ptr"> { 227 let clangClass = "OMPIsDevicePtrClause"; 228 let flangClass = "OmpObjectList"; 229} 230def OMPC_LastPrivate : Clause<"lastprivate"> { 231 let clangClass = "OMPLastprivateClause"; 232 let flangClass = "OmpObjectList"; 233} 234def OMPC_Linear : Clause<"linear"> { 235 let clangClass = "OMPLinearClause"; 236 let flangClass = "OmpLinearClause"; 237} 238def OMPC_Link : Clause<"link"> { 239 let flangClass = "OmpObjectList"; 240} 241def OMPC_Map : Clause<"map"> { 242 let clangClass = "OMPMapClause"; 243 let flangClass = "OmpMapClause"; 244} 245def OMPC_Match : Clause<"match"> { 246} 247def OMP_MEMORY_ORDER_SeqCst : ClauseVal<"seq_cst", 1, 1> {} 248def OMP_MEMORY_ORDER_AcqRel : ClauseVal<"acq_rel", 2, 1> {} 249def OMP_MEMORY_ORDER_Acquire : ClauseVal<"acquire", 3, 1> {} 250def OMP_MEMORY_ORDER_Release : ClauseVal<"release", 4, 1> {} 251def OMP_MEMORY_ORDER_Relaxed : ClauseVal<"relaxed", 5, 1> {} 252def OMP_MEMORY_ORDER_Default : ClauseVal<"default", 6, 0> { 253 let isDefault = 1; 254} 255def OMPC_MemoryOrder : Clause<"memory_order"> { 256 let enumClauseValue = "MemoryOrderKind"; 257 let allowedClauseValues = [ 258 OMP_MEMORY_ORDER_SeqCst, 259 OMP_MEMORY_ORDER_AcqRel, 260 OMP_MEMORY_ORDER_Acquire, 261 OMP_MEMORY_ORDER_Release, 262 OMP_MEMORY_ORDER_Relaxed, 263 OMP_MEMORY_ORDER_Default 264 ]; 265} 266def OMPC_Mergeable : Clause<"mergeable"> { 267 let clangClass = "OMPMergeableClause"; 268} 269def OMPC_Message : Clause<"message"> { 270 let clangClass = "OMPMessageClause"; 271} 272def OMPC_NoOpenMP : Clause<"no_openmp"> { 273 let clangClass = "OMPNoOpenMPClause"; 274} 275def OMPC_NoOpenMPRoutines : Clause<"no_openmp_routines"> { 276 let clangClass = "OMPNoOpenMPRoutinesClause"; 277} 278def OMPC_NoParallelism : Clause<"no_parallelism"> { 279 let clangClass = "OMPNoParallelismClause"; 280} 281def OMPC_Nocontext : Clause<"nocontext"> { 282 let clangClass = "OMPNocontextClause"; 283 let flangClass = "ScalarLogicalExpr"; 284} 285def OMPC_NoGroup : Clause<"nogroup"> { 286 let clangClass = "OMPNogroupClause"; 287} 288def OMPC_NonTemporal : Clause<"nontemporal"> { 289 let clangClass = "OMPNontemporalClause"; 290 let flangClass = "Name"; 291 let isValueList = true; 292} 293def OMPC_Notinbranch : Clause<"notinbranch"> { 294} 295def OMPC_Novariants : Clause<"novariants"> { 296 let clangClass = "OMPNovariantsClause"; 297 let flangClass = "ScalarLogicalExpr"; 298} 299def OMPC_NoWait : Clause<"nowait"> { 300 let clangClass = "OMPNowaitClause"; 301} 302def OMP_NUMTASKS_Strict : ClauseVal<"strict", 1, 1> {} 303def OMP_NUMTASKS_Unknown : ClauseVal<"unkonwn", 2, 0> { let isDefault = 1; } 304def OMPC_NumTasks : Clause<"num_tasks"> { 305 let clangClass = "OMPNumTasksClause"; 306 let flangClass = "ScalarIntExpr"; 307 let enumClauseValue = "NumTasksType"; 308 let allowedClauseValues = [ 309 OMP_NUMTASKS_Strict, 310 OMP_NUMTASKS_Unknown 311 ]; 312} 313def OMPC_NumTeams : Clause<"num_teams"> { 314 let clangClass = "OMPNumTeamsClause"; 315 let flangClass = "ScalarIntExpr"; 316} 317def OMPC_NumThreads : Clause<"num_threads"> { 318 let clangClass = "OMPNumThreadsClause"; 319 let flangClass = "ScalarIntExpr"; 320} 321def OMPC_OMPX_Attribute : Clause<"ompx_attribute"> { 322 let clangClass = "OMPXAttributeClause"; 323} 324def OMPC_OMPX_Bare : Clause<"ompx_bare"> { 325 let clangClass = "OMPXBareClause"; 326} 327def OMPC_OMPX_DynCGroupMem : Clause<"ompx_dyn_cgroup_mem"> { 328 let clangClass = "OMPXDynCGroupMemClause"; 329 let flangClass = "ScalarIntExpr"; 330} 331def OMP_ORDER_concurrent : ClauseVal<"concurrent",1,1> {} 332def OMP_ORDER_unknown : ClauseVal<"unknown",2,0> { let isDefault = 1; } 333def OMPC_Order : Clause<"order"> { 334 let clangClass = "OMPOrderClause"; 335 let flangClass = "OmpOrderClause"; 336 let enumClauseValue = "OrderKind"; 337 let allowedClauseValues = [ 338 OMP_ORDER_unknown, 339 OMP_ORDER_concurrent 340 ]; 341} 342def OMPC_Ordered : Clause<"ordered"> { 343 let clangClass = "OMPOrderedClause"; 344 let flangClass = "ScalarIntConstantExpr"; 345 let isValueOptional = true; 346} 347def OMPC_Partial: Clause<"partial"> { 348 let clangClass = "OMPPartialClause"; 349 let flangClass = "ScalarIntConstantExpr"; 350 let isValueOptional = true; 351} 352def OMPC_Priority : Clause<"priority"> { 353 let clangClass = "OMPPriorityClause"; 354 let flangClass = "ScalarIntExpr"; 355} 356def OMPC_Private : Clause<"private"> { 357 let clangClass = "OMPPrivateClause"; 358 let flangClass = "OmpObjectList"; 359} 360def OMP_PROC_BIND_master : ClauseVal<"master",2,1> {} 361def OMP_PROC_BIND_close : ClauseVal<"close",3,1> {} 362def OMP_PROC_BIND_spread : ClauseVal<"spread",4,1> {} 363def OMP_PROC_BIND_primary : ClauseVal<"primary",5,1> {} 364def OMP_PROC_BIND_default : ClauseVal<"default",6,0> {} 365def OMP_PROC_BIND_unknown : ClauseVal<"unknown",7,0> { let isDefault = true; } 366def OMPC_ProcBind : Clause<"proc_bind"> { 367 let clangClass = "OMPProcBindClause"; 368 let flangClass = "OmpProcBindClause"; 369 let enumClauseValue = "ProcBindKind"; 370 let allowedClauseValues = [ 371 OMP_PROC_BIND_primary, 372 OMP_PROC_BIND_master, 373 OMP_PROC_BIND_close, 374 OMP_PROC_BIND_spread, 375 OMP_PROC_BIND_default, 376 OMP_PROC_BIND_unknown 377 ]; 378} 379def OMPC_Read : Clause<"read"> { 380 let clangClass = "OMPReadClause"; 381} 382def OMPC_Reduction : Clause<"reduction"> { 383 let clangClass = "OMPReductionClause"; 384 let flangClass = "OmpReductionClause"; 385} 386def OMPC_Relaxed : Clause<"relaxed"> { 387 let clangClass = "OMPRelaxedClause"; 388} 389def OMPC_Release : Clause<"release"> { 390 let clangClass = "OMPReleaseClause"; 391} 392def OMPC_ReverseOffload : Clause<"reverse_offload"> { 393 let clangClass = "OMPReverseOffloadClause"; 394} 395def OMPC_SafeLen : Clause<"safelen"> { 396 let clangClass = "OMPSafelenClause"; 397 let flangClass = "ScalarIntConstantExpr"; 398} 399def OMP_SCHEDULE_Static : ClauseVal<"static", 2, 1> {} 400def OMP_SCHEDULE_Dynamic : ClauseVal<"dynamic", 3, 1> {} 401def OMP_SCHEDULE_Guided : ClauseVal<"guided", 4, 1> {} 402def OMP_SCHEDULE_Auto : ClauseVal<"auto", 5, 1> {} 403def OMP_SCHEDULE_Runtime : ClauseVal<"runtime", 6, 1> {} 404def OMP_SCHEDULE_Default : ClauseVal<"default", 7, 0> { let isDefault = 1; } 405def OMPC_Schedule : Clause<"schedule"> { 406 let clangClass = "OMPScheduleClause"; 407 let flangClass = "OmpScheduleClause"; 408 let enumClauseValue = "ScheduleKind"; 409 let allowedClauseValues = [ 410 OMP_SCHEDULE_Static, 411 OMP_SCHEDULE_Dynamic, 412 OMP_SCHEDULE_Guided, 413 OMP_SCHEDULE_Auto, 414 OMP_SCHEDULE_Runtime, 415 OMP_SCHEDULE_Default 416 ]; 417} 418def OMPC_SeqCst : Clause<"seq_cst"> { 419 let clangClass = "OMPSeqCstClause"; 420} 421def OMPC_Severity : Clause<"severity"> { 422 let clangClass = "OMPSeverityClause"; 423} 424def OMPC_Shared : Clause<"shared"> { 425 let clangClass = "OMPSharedClause"; 426 let flangClass = "OmpObjectList"; 427} 428def OMPC_Simd : Clause<"simd"> { 429 let clangClass = "OMPSIMDClause"; 430} 431def OMPC_SimdLen : Clause<"simdlen"> { 432 let clangClass = "OMPSimdlenClause"; 433 let flangClass = "ScalarIntConstantExpr"; 434} 435def OMPC_Sizes: Clause<"sizes"> { 436 let clangClass = "OMPSizesClause"; 437 let flangClass = "ScalarIntExpr"; 438 let isValueList = true; 439} 440def OMPC_TaskReduction : Clause<"task_reduction"> { 441 let clangClass = "OMPTaskReductionClause"; 442 let flangClass = "OmpReductionClause"; 443} 444def OMPC_ThreadLimit : Clause<"thread_limit"> { 445 let clangClass = "OMPThreadLimitClause"; 446 let flangClass = "ScalarIntExpr"; 447} 448def OMPC_ThreadPrivate : Clause<"threadprivate"> { 449 let alternativeName = "threadprivate or thread local"; 450 let isImplicit = true; 451} 452def OMPC_Threads : Clause<"threads"> { 453 let clangClass = "OMPThreadsClause"; 454} 455def OMPC_To : Clause<"to"> { 456 let clangClass = "OMPToClause"; 457 let flangClass = "OmpObjectList"; 458} 459def OMPC_UnifiedAddress : Clause<"unified_address"> { 460 let clangClass = "OMPUnifiedAddressClause"; 461} 462def OMPC_UnifiedSharedMemory : Clause<"unified_shared_memory"> { 463 let clangClass = "OMPUnifiedSharedMemoryClause"; 464} 465def OMPC_Uniform : Clause<"uniform"> { 466 let flangClass = "Name"; 467 let isValueList = true; 468} 469def OMPC_Unknown : Clause<"unknown"> { 470 let isImplicit = true; 471 let isDefault = true; 472} 473def OMPC_Untied : Clause<"untied"> { 474 let clangClass = "OMPUntiedClause"; 475} 476def OMPC_Update : Clause<"update"> { 477 let clangClass = "OMPUpdateClause"; 478} 479def OMPC_Use : Clause<"use"> { 480 let clangClass = "OMPUseClause"; 481} 482def OMPC_UsesAllocators : Clause<"uses_allocators"> { 483 let clangClass = "OMPUsesAllocatorsClause"; 484} 485def OMPC_UseDeviceAddr : Clause<"use_device_addr"> { 486 let clangClass = "OMPUseDeviceAddrClause"; 487 let flangClass = "OmpObjectList"; 488} 489def OMPC_UseDevicePtr : Clause<"use_device_ptr"> { 490 let clangClass = "OMPUseDevicePtrClause"; 491 let flangClass = "OmpObjectList"; 492} 493def OMPC_Weak : Clause<"weak"> { 494 let clangClass = "OMPWeakClause"; 495} 496def OMPC_When: Clause<"when"> { 497} 498def OMPC_Write : Clause<"write"> { 499 let clangClass = "OMPWriteClause"; 500} 501 502//===----------------------------------------------------------------------===// 503// Definitions of OpenMP leaf directives 504// Sorted alphabetically wrt directive spelling, except "end xyz" immediately 505// follows "xyz". 506//===----------------------------------------------------------------------===// 507 508def OMP_Allocate : Directive<"allocate"> { 509 let allowedOnceClauses = [ 510 VersionedClause<OMPC_Align, 51>, 511 VersionedClause<OMPC_Allocator>, 512 ]; 513 let association = AS_None; 514 let category = CA_Declarative; 515} 516def OMP_Allocators : Directive<"allocators"> { 517 let allowedClauses = [ 518 VersionedClause<OMPC_Allocate>, 519 ]; 520 let association = AS_Block; 521 let category = CA_Executable; 522} 523def OMP_Assumes : Directive<"assumes"> { 524 let association = AS_None; 525 let category = CA_Informational; 526} 527def OMP_EndAssumes : Directive<"end assumes"> { 528 let association = AS_Delimited; 529 let category = OMP_Assumes.category; 530} 531def OMP_Assume : Directive<"assume"> { 532 let association = AS_Block; 533 let category = CA_Informational; 534 let allowedOnceClauses = [ 535 VersionedClause<OMPC_Absent, 51>, 536 VersionedClause<OMPC_Contains, 51>, 537 VersionedClause<OMPC_Holds, 51>, 538 VersionedClause<OMPC_NoOpenMP, 51>, 539 VersionedClause<OMPC_NoOpenMPRoutines, 51>, 540 VersionedClause<OMPC_NoParallelism, 51>, 541 ]; 542} 543def OMP_Atomic : Directive<"atomic"> { 544 let allowedClauses = [ 545 VersionedClause<OMPC_Capture>, 546 VersionedClause<OMPC_Compare, 51>, 547 VersionedClause<OMPC_Read>, 548 VersionedClause<OMPC_Update>, 549 VersionedClause<OMPC_Write>, 550 ]; 551 let allowedOnceClauses = [ 552 VersionedClause<OMPC_AcqRel, 50>, 553 VersionedClause<OMPC_Acquire, 50>, 554 VersionedClause<OMPC_Fail, 51>, 555 VersionedClause<OMPC_Hint, 50>, 556 VersionedClause<OMPC_Relaxed, 50>, 557 VersionedClause<OMPC_Release, 50>, 558 VersionedClause<OMPC_SeqCst>, 559 VersionedClause<OMPC_Weak, 51>, 560 ]; 561 let association = AS_Block; 562 let category = CA_Executable; 563} 564def OMP_Barrier : Directive<"barrier"> { 565 let association = AS_None; 566 let category = CA_Executable; 567} 568def OMP_BeginAssumes : Directive<"begin assumes"> { 569 let association = AS_Delimited; 570 let category = CA_Informational; 571} 572def OMP_BeginDeclareTarget : Directive<"begin declare target"> { 573 let allowedClauses = [ 574 VersionedClause<OMPC_DeviceType>, 575 VersionedClause<OMPC_Indirect>, 576 VersionedClause<OMPC_Link>, 577 VersionedClause<OMPC_To>, 578 ]; 579 let association = AS_Delimited; 580 let category = CA_Declarative; 581} 582def OMP_BeginDeclareVariant : Directive<"begin declare variant"> { 583 let association = AS_Delimited; 584 let category = CA_Declarative; 585} 586def OMP_Cancel : Directive<"cancel"> { 587 let allowedOnceClauses = [ 588 VersionedClause<OMPC_If>, 589 ]; 590 let association = AS_None; 591 let category = CA_Executable; 592} 593def OMP_CancellationPoint : Directive<"cancellation point"> { 594 let association = AS_None; 595 let category = CA_Executable; 596} 597def OMP_Critical : Directive<"critical"> { 598 let allowedClauses = [ 599 VersionedClause<OMPC_Hint>, 600 ]; 601 let association = AS_Block; 602 let category = CA_Executable; 603} 604def OMP_DeclareMapper : Directive<"declare mapper"> { 605 let allowedClauses = [ 606 VersionedClause<OMPC_Map>, 607 ]; 608 let association = AS_None; 609 let category = CA_Declarative; 610} 611def OMP_DeclareReduction : Directive<"declare reduction"> { 612 let association = AS_None; 613 let category = CA_Declarative; 614} 615def OMP_DeclareSimd : Directive<"declare simd"> { 616 let allowedClauses = [ 617 VersionedClause<OMPC_Aligned>, 618 VersionedClause<OMPC_Linear>, 619 VersionedClause<OMPC_Uniform>, 620 ]; 621 let allowedOnceClauses = [ 622 VersionedClause<OMPC_SimdLen>, 623 ]; 624 let allowedExclusiveClauses = [ 625 VersionedClause<OMPC_Inbranch>, 626 VersionedClause<OMPC_Notinbranch>, 627 ]; 628 let association = AS_Declaration; 629 let category = CA_Declarative; 630} 631def OMP_DeclareTarget : Directive<"declare target"> { 632 let allowedClauses = [ 633 VersionedClause<OMPC_Enter, 52>, 634 VersionedClause<OMPC_Indirect>, 635 VersionedClause<OMPC_Link>, 636 VersionedClause<OMPC_To>, 637 ]; 638 let allowedOnceClauses = [ 639 VersionedClause<OMPC_DeviceType, 50>, 640 ]; 641 let association = AS_None; 642 let category = CA_Declarative; 643} 644def OMP_EndDeclareTarget : Directive<"end declare target"> { 645 let association = AS_Delimited; 646 let category = OMP_DeclareTarget.category; 647} 648def OMP_DeclareVariant : Directive<"declare variant"> { 649 let allowedClauses = [ 650 VersionedClause<OMPC_Match>, 651 ]; 652 let allowedExclusiveClauses = [ 653 VersionedClause<OMPC_AdjustArgs, 51>, 654 VersionedClause<OMPC_AppendArgs, 51>, 655 ]; 656 let association = AS_Declaration; 657 let category = CA_Declarative; 658} 659def OMP_EndDeclareVariant : Directive<"end declare variant"> { 660 let association = AS_Delimited; 661 let category = OMP_DeclareVariant.category; 662} 663def OMP_Depobj : Directive<"depobj"> { 664 let allowedClauses = [ 665 VersionedClause<OMPC_Depend, 50>, 666 // TODO This should ne `none` instead. Comment carried over from 667 // OMPKinds.def. 668 VersionedClause<OMPC_Depobj, 50>, 669 VersionedClause<OMPC_Destroy, 50>, 670 VersionedClause<OMPC_Update, 50>, 671 ]; 672 let association = AS_None; 673 let category = CA_Executable; 674} 675def OMP_dispatch : Directive<"dispatch"> { 676 let allowedClauses = [ 677 VersionedClause<OMPC_Depend>, 678 VersionedClause<OMPC_Device>, 679 VersionedClause<OMPC_HasDeviceAddr, 51>, 680 VersionedClause<OMPC_IsDevicePtr>, 681 VersionedClause<OMPC_Nocontext>, 682 VersionedClause<OMPC_Novariants>, 683 VersionedClause<OMPC_NoWait>, 684 ]; 685 let association = AS_Block; 686 let category = CA_Executable; 687} 688def OMP_Distribute : Directive<"distribute"> { 689 let allowedClauses = [ 690 VersionedClause<OMPC_Allocate>, 691 VersionedClause<OMPC_FirstPrivate>, 692 VersionedClause<OMPC_LastPrivate>, 693 VersionedClause<OMPC_Private>, 694 ]; 695 let allowedOnceClauses = [ 696 VersionedClause<OMPC_Collapse>, 697 VersionedClause<OMPC_DistSchedule>, 698 VersionedClause<OMPC_Order, 50>, 699 ]; 700 let association = AS_Loop; 701 let category = CA_Executable; 702} 703def OMP_Do : Directive<"do"> { 704 let allowedClauses = [ 705 VersionedClause<OMPC_FirstPrivate>, 706 VersionedClause<OMPC_LastPrivate>, 707 VersionedClause<OMPC_Linear>, 708 VersionedClause<OMPC_Private>, 709 VersionedClause<OMPC_Reduction>, 710 ]; 711 let allowedOnceClauses = [ 712 VersionedClause<OMPC_Collapse>, 713 VersionedClause<OMPC_NoWait>, 714 VersionedClause<OMPC_Order, 50>, 715 VersionedClause<OMPC_Ordered>, 716 VersionedClause<OMPC_Schedule>, 717 ]; 718 let association = AS_Loop; 719 let category = CA_Executable; 720} 721def OMP_EndDo : Directive<"end do"> { 722 let allowedOnceClauses = [ 723 VersionedClause<OMPC_NoWait>, 724 ]; 725 // Needed for association computation, since OMP_Do has it "from leafConstructs". 726 let leafConstructs = OMP_Do.leafConstructs; 727 let association = OMP_Do.association; 728 let category = OMP_Do.category; 729} 730def OMP_Error : Directive<"error"> { 731 let allowedClauses = [ 732 VersionedClause<OMPC_At, 51>, 733 VersionedClause<OMPC_Message, 51>, 734 VersionedClause<OMPC_Severity, 51>, 735 ]; 736 let association = AS_None; 737 let category = CA_Utility; 738} 739def OMP_Flush : Directive<"flush"> { 740 let allowedOnceClauses = [ 741 VersionedClause<OMPC_AcqRel, 50>, 742 VersionedClause<OMPC_Acquire, 50>, 743 // TODO This should ne `none` instead. Comment carried over from 744 // OMPKinds.def. 745 VersionedClause<OMPC_Flush>, 746 VersionedClause<OMPC_Release, 50>, 747 ]; 748 let association = AS_None; 749 let category = CA_Executable; 750} 751def OMP_For : Directive<"for"> { 752 let allowedClauses = [ 753 VersionedClause<OMPC_Allocate>, 754 VersionedClause<OMPC_Collapse>, 755 VersionedClause<OMPC_FirstPrivate>, 756 VersionedClause<OMPC_LastPrivate>, 757 VersionedClause<OMPC_Linear>, 758 VersionedClause<OMPC_NoWait>, 759 VersionedClause<OMPC_Order, 50>, 760 VersionedClause<OMPC_Ordered>, 761 VersionedClause<OMPC_Private>, 762 VersionedClause<OMPC_Reduction>, 763 VersionedClause<OMPC_Schedule>, 764 ]; 765 let association = AS_Loop; 766 let category = CA_Executable; 767} 768def OMP_Interchange : Directive<"interchange"> { 769 let association = AS_Loop; 770 let category = CA_Executable; 771} 772def OMP_interop : Directive<"interop"> { 773 let allowedClauses = [ 774 VersionedClause<OMPC_Depend>, 775 VersionedClause<OMPC_Destroy>, 776 VersionedClause<OMPC_Device>, 777 VersionedClause<OMPC_Init>, 778 VersionedClause<OMPC_NoWait>, 779 VersionedClause<OMPC_Use>, 780 ]; 781 let association = AS_None; 782 let category = CA_Executable; 783} 784def OMP_loop : Directive<"loop"> { 785 let allowedClauses = [ 786 VersionedClause<OMPC_LastPrivate>, 787 VersionedClause<OMPC_Private>, 788 VersionedClause<OMPC_Reduction>, 789 ]; 790 let allowedOnceClauses = [ 791 VersionedClause<OMPC_Bind, 50>, 792 VersionedClause<OMPC_Collapse>, 793 VersionedClause<OMPC_Order, 50>, 794 ]; 795 let association = AS_Loop; 796 let category = CA_Executable; 797} 798def OMP_masked : Directive<"masked"> { 799 let allowedOnceClauses = [ 800 VersionedClause<OMPC_Filter>, 801 ]; 802 let association = AS_Block; 803 let category = CA_Executable; 804} 805def OMP_Master : Directive<"master"> { 806 let association = AS_Block; 807 let category = CA_Executable; 808} 809def OMP_Metadirective : Directive<"metadirective"> { 810 let allowedClauses = [ 811 VersionedClause<OMPC_When>, 812 ]; 813 let allowedOnceClauses = [ 814 VersionedClause<OMPC_Default>, 815 ]; 816 let association = AS_None; 817 let category = CA_Meta; 818} 819def OMP_Nothing : Directive<"nothing"> { 820 let association = AS_None; 821 let category = CA_Utility; 822} 823def OMP_Ordered : Directive<"ordered"> { 824 let allowedClauses = [ 825 VersionedClause<OMPC_Depend>, 826 VersionedClause<OMPC_Doacross, 52>, 827 ]; 828 let allowedOnceClauses = [ 829 VersionedClause<OMPC_Simd>, 830 VersionedClause<OMPC_Threads>, 831 ]; 832 let association = AS_None; 833 // There is also a block-associated "ordered" directive. 834 let category = CA_Executable; 835} 836def OMP_Parallel : Directive<"parallel"> { 837 let allowedClauses = [ 838 VersionedClause<OMPC_Allocate>, 839 VersionedClause<OMPC_Copyin>, 840 VersionedClause<OMPC_FirstPrivate>, 841 VersionedClause<OMPC_OMPX_Attribute>, 842 VersionedClause<OMPC_Private>, 843 VersionedClause<OMPC_Reduction>, 844 VersionedClause<OMPC_Shared>, 845 ]; 846 let allowedOnceClauses = [ 847 VersionedClause<OMPC_Default>, 848 VersionedClause<OMPC_If>, 849 VersionedClause<OMPC_NumThreads>, 850 VersionedClause<OMPC_ProcBind>, 851 ]; 852 let association = AS_Block; 853 let category = CA_Executable; 854} 855def OMP_Requires : Directive<"requires"> { 856 let allowedOnceClauses = [ 857 VersionedClause<OMPC_UnifiedAddress>, 858 VersionedClause<OMPC_UnifiedSharedMemory>, 859 // OpenMP 5.2 Spec: If an implementation is not supporting a requirement 860 // (reverse offload in this case) then it should give compile-time error 861 // termination. 862 // Seeting supported version for reverse_offload to a distant future version 863 // 9.9 so that its partial support can be tested in the meantime. 864 // 865 // TODO: Correct this supprted version number whenever complete 866 // implementation of reverse_offload is available. 867 VersionedClause<OMPC_AtomicDefaultMemOrder>, 868 VersionedClause<OMPC_DynamicAllocators>, 869 VersionedClause<OMPC_ReverseOffload, 99>, 870 ]; 871 let association = AS_None; 872 let category = CA_Informational; 873} 874def OMP_Reverse : Directive<"reverse"> { 875 let association = AS_Loop; 876 let category = CA_Executable; 877} 878def OMP_Scan : Directive<"scan"> { 879 let allowedClauses = [ 880 VersionedClause<OMPC_Exclusive, 50>, 881 VersionedClause<OMPC_Inclusive, 50>, 882 ]; 883 let association = AS_Separating; 884 let category = CA_Subsidiary; 885} 886def OMP_scope : Directive<"scope"> { 887 let allowedClauses = [ 888 VersionedClause<OMPC_Private, 51>, 889 VersionedClause<OMPC_Reduction, 51>, 890 ]; 891 let allowedOnceClauses = [ 892 VersionedClause<OMPC_NoWait, 51>, 893 ]; 894 let association = AS_Block; 895 let category = CA_Executable; 896} 897def OMP_Section : Directive<"section"> { 898 let association = AS_Separating; 899 let category = CA_Subsidiary; 900} 901def OMP_Sections : Directive<"sections"> { 902 let allowedClauses = [ 903 VersionedClause<OMPC_Allocate>, 904 VersionedClause<OMPC_FirstPrivate>, 905 VersionedClause<OMPC_LastPrivate>, 906 VersionedClause<OMPC_NoWait>, 907 VersionedClause<OMPC_Private>, 908 VersionedClause<OMPC_Reduction>, 909 ]; 910 let association = AS_Block; 911 let category = CA_Executable; 912} 913def OMP_EndSections : Directive<"end sections"> { 914 let allowedOnceClauses = [ 915 VersionedClause<OMPC_NoWait>, 916 ]; 917 let leafConstructs = OMP_Sections.leafConstructs; 918 let association = OMP_Sections.association; 919 let category = OMP_Sections.category; 920} 921def OMP_Simd : Directive<"simd"> { 922 let allowedClauses = [ 923 VersionedClause<OMPC_Aligned>, 924 VersionedClause<OMPC_Allocate>, 925 VersionedClause<OMPC_LastPrivate>, 926 VersionedClause<OMPC_Linear>, 927 VersionedClause<OMPC_NonTemporal, 50>, 928 VersionedClause<OMPC_Private>, 929 VersionedClause<OMPC_Reduction>, 930 ]; 931 let allowedOnceClauses = [ 932 VersionedClause<OMPC_Collapse>, 933 VersionedClause<OMPC_If, 50>, 934 VersionedClause<OMPC_Order, 50>, 935 VersionedClause<OMPC_SafeLen>, 936 VersionedClause<OMPC_SimdLen>, 937 ]; 938 let association = AS_Loop; 939 let category = CA_Executable; 940} 941def OMP_Single : Directive<"single"> { 942 let allowedClauses = [ 943 VersionedClause<OMPC_Allocate>, 944 VersionedClause<OMPC_CopyPrivate>, 945 VersionedClause<OMPC_FirstPrivate>, 946 VersionedClause<OMPC_NoWait>, 947 VersionedClause<OMPC_Private>, 948 ]; 949 let association = AS_Block; 950 let category = CA_Executable; 951} 952def OMP_EndSingle : Directive<"end single"> { 953 let allowedClauses = [ 954 VersionedClause<OMPC_CopyPrivate>, 955 ]; 956 let allowedOnceClauses = [ 957 VersionedClause<OMPC_NoWait>, 958 ]; 959 let leafConstructs = OMP_Single.leafConstructs; 960 let association = OMP_Single.association; 961 let category = OMP_Single.category; 962} 963def OMP_Target : Directive<"target"> { 964 let allowedClauses = [ 965 VersionedClause<OMPC_Allocate>, 966 VersionedClause<OMPC_Depend>, 967 VersionedClause<OMPC_FirstPrivate>, 968 VersionedClause<OMPC_HasDeviceAddr, 51>, 969 VersionedClause<OMPC_InReduction, 50>, 970 VersionedClause<OMPC_IsDevicePtr>, 971 VersionedClause<OMPC_Map>, 972 VersionedClause<OMPC_OMPX_Attribute>, 973 VersionedClause<OMPC_Private>, 974 VersionedClause<OMPC_UsesAllocators, 50>, 975 ]; 976 let allowedOnceClauses = [ 977 VersionedClause<OMPC_DefaultMap>, 978 VersionedClause<OMPC_Device>, 979 VersionedClause<OMPC_If>, 980 VersionedClause<OMPC_NoWait>, 981 VersionedClause<OMPC_OMPX_DynCGroupMem>, 982 VersionedClause<OMPC_ThreadLimit, 51>, 983 ]; 984 let association = AS_Block; 985 let category = CA_Executable; 986} 987def OMP_TargetData : Directive<"target data"> { 988 let allowedOnceClauses = [ 989 VersionedClause<OMPC_Device>, 990 VersionedClause<OMPC_If>, 991 ]; 992 let requiredClauses = [ 993 VersionedClause<OMPC_Map>, 994 VersionedClause<OMPC_UseDeviceAddr, 50>, 995 VersionedClause<OMPC_UseDevicePtr>, 996 ]; 997 let association = AS_Block; 998 let category = CA_Executable; 999} 1000def OMP_TargetEnterData : Directive<"target enter data"> { 1001 let allowedClauses = [ 1002 VersionedClause<OMPC_Depend>, 1003 ]; 1004 let allowedOnceClauses = [ 1005 VersionedClause<OMPC_Device>, 1006 VersionedClause<OMPC_If>, 1007 VersionedClause<OMPC_NoWait>, 1008 ]; 1009 let requiredClauses = [ 1010 VersionedClause<OMPC_Map>, 1011 ]; 1012 let association = AS_None; 1013 let category = CA_Executable; 1014} 1015def OMP_TargetExitData : Directive<"target exit data"> { 1016 let allowedClauses = [ 1017 VersionedClause<OMPC_Depend>, 1018 ]; 1019 let allowedOnceClauses = [ 1020 VersionedClause<OMPC_Device>, 1021 VersionedClause<OMPC_If>, 1022 VersionedClause<OMPC_NoWait>, 1023 ]; 1024 let requiredClauses = [ 1025 VersionedClause<OMPC_Map>, 1026 ]; 1027 let association = AS_None; 1028 let category = CA_Executable; 1029} 1030def OMP_TargetUpdate : Directive<"target update"> { 1031 let allowedClauses = [ 1032 VersionedClause<OMPC_Depend>, 1033 VersionedClause<OMPC_From>, 1034 VersionedClause<OMPC_To>, 1035 ]; 1036 let allowedOnceClauses = [ 1037 VersionedClause<OMPC_Device>, 1038 VersionedClause<OMPC_If>, 1039 VersionedClause<OMPC_NoWait>, 1040 ]; 1041 let association = AS_None; 1042 let category = CA_Executable; 1043} 1044def OMP_Task : Directive<"task"> { 1045 let allowedClauses = [ 1046 VersionedClause<OMPC_Affinity, 50>, 1047 VersionedClause<OMPC_Allocate>, 1048 VersionedClause<OMPC_Depend>, 1049 VersionedClause<OMPC_Detach, 50>, 1050 VersionedClause<OMPC_FirstPrivate>, 1051 VersionedClause<OMPC_InReduction>, 1052 VersionedClause<OMPC_Mergeable>, 1053 VersionedClause<OMPC_Private>, 1054 VersionedClause<OMPC_Shared>, 1055 VersionedClause<OMPC_Untied>, 1056 ]; 1057 let allowedOnceClauses = [ 1058 VersionedClause<OMPC_Default>, 1059 VersionedClause<OMPC_Final>, 1060 VersionedClause<OMPC_If>, 1061 VersionedClause<OMPC_Priority>, 1062 ]; 1063 let association = AS_Block; 1064 let category = CA_Executable; 1065} 1066def OMP_TaskGroup : Directive<"taskgroup"> { 1067 let allowedClauses = [ 1068 VersionedClause<OMPC_Allocate, 50>, 1069 VersionedClause<OMPC_TaskReduction, 50>, 1070 ]; 1071 let association = AS_Block; 1072 let category = CA_Executable; 1073} 1074def OMP_TaskLoop : Directive<"taskloop"> { 1075 let allowedClauses = [ 1076 VersionedClause<OMPC_Allocate>, 1077 VersionedClause<OMPC_FirstPrivate>, 1078 VersionedClause<OMPC_InReduction>, 1079 VersionedClause<OMPC_LastPrivate>, 1080 VersionedClause<OMPC_Mergeable>, 1081 VersionedClause<OMPC_NoGroup>, 1082 VersionedClause<OMPC_Private>, 1083 VersionedClause<OMPC_Reduction>, 1084 VersionedClause<OMPC_Shared>, 1085 VersionedClause<OMPC_Untied>, 1086 ]; 1087 let allowedOnceClauses = [ 1088 VersionedClause<OMPC_Collapse>, 1089 VersionedClause<OMPC_Default>, 1090 VersionedClause<OMPC_Final>, 1091 VersionedClause<OMPC_If>, 1092 VersionedClause<OMPC_Priority>, 1093 ]; 1094 let allowedExclusiveClauses = [ 1095 VersionedClause<OMPC_GrainSize>, 1096 VersionedClause<OMPC_NumTasks>, 1097 ]; 1098 let association = AS_Loop; 1099 let category = CA_Executable; 1100} 1101def OMP_TaskWait : Directive<"taskwait"> { 1102 let allowedClauses = [ 1103 VersionedClause<OMPC_Depend, 50>, 1104 VersionedClause<OMPC_NoWait, 51>, 1105 ]; 1106 let association = AS_None; 1107 let category = CA_Executable; 1108} 1109def OMP_TaskYield : Directive<"taskyield"> { 1110 let association = AS_None; 1111 let category = CA_Executable; 1112} 1113def OMP_Teams : Directive<"teams"> { 1114 let allowedClauses = [ 1115 VersionedClause<OMPC_Allocate>, 1116 VersionedClause<OMPC_FirstPrivate>, 1117 VersionedClause<OMPC_OMPX_Attribute>, 1118 VersionedClause<OMPC_Private>, 1119 VersionedClause<OMPC_Reduction>, 1120 VersionedClause<OMPC_Shared>, 1121 ]; 1122 let allowedOnceClauses = [ 1123 VersionedClause<OMPC_Default>, 1124 VersionedClause<OMPC_If, 52>, 1125 VersionedClause<OMPC_NumTeams>, 1126 VersionedClause<OMPC_ThreadLimit>, 1127 ]; 1128 let association = AS_Block; 1129 let category = CA_Executable; 1130} 1131def OMP_ThreadPrivate : Directive<"threadprivate"> { 1132 let association = AS_None; 1133 let category = CA_Declarative; 1134} 1135def OMP_Tile : Directive<"tile"> { 1136 let allowedOnceClauses = [ 1137 VersionedClause<OMPC_Sizes, 51>, 1138 ]; 1139 let association = AS_Loop; 1140 let category = CA_Executable; 1141} 1142def OMP_Unknown : Directive<"unknown"> { 1143 let isDefault = true; 1144 let association = AS_None; 1145 let category = CA_Utility; 1146} 1147def OMP_Unroll : Directive<"unroll"> { 1148 let allowedOnceClauses = [ 1149 VersionedClause<OMPC_Full, 51>, 1150 VersionedClause<OMPC_Partial, 51>, 1151 ]; 1152 let association = AS_Loop; 1153 let category = CA_Executable; 1154} 1155def OMP_Workshare : Directive<"workshare"> { 1156 let allowedOnceClauses = [ 1157 VersionedClause<OMPC_NoWait>, 1158 ]; 1159 let association = AS_Block; 1160 let category = CA_Executable; 1161} 1162def OMP_EndWorkshare : Directive<"end workshare"> { 1163 let allowedClauses = [ 1164 VersionedClause<OMPC_NoWait>, 1165 ]; 1166 let leafConstructs = OMP_Workshare.leafConstructs; 1167 let association = OMP_Workshare.association; 1168 let category = OMP_Workshare.category; 1169} 1170 1171//===----------------------------------------------------------------------===// 1172// Definitions of OpenMP compound directives 1173// Sorted alphabetically wrt directive spelling, except "end xyz" immediately 1174// follows "xyz". 1175//===----------------------------------------------------------------------===// 1176 1177def OMP_DistributeParallelDo : Directive<"distribute parallel do"> { 1178 let allowedClauses = [ 1179 VersionedClause<OMPC_Allocate>, 1180 VersionedClause<OMPC_Copyin>, 1181 VersionedClause<OMPC_Default>, 1182 VersionedClause<OMPC_FirstPrivate>, 1183 VersionedClause<OMPC_LastPrivate>, 1184 VersionedClause<OMPC_Linear>, 1185 VersionedClause<OMPC_Private>, 1186 VersionedClause<OMPC_Reduction>, 1187 VersionedClause<OMPC_Shared>, 1188 ]; 1189 let allowedOnceClauses = [ 1190 VersionedClause<OMPC_Collapse>, 1191 VersionedClause<OMPC_DistSchedule>, 1192 VersionedClause<OMPC_If>, 1193 VersionedClause<OMPC_NumThreads>, 1194 VersionedClause<OMPC_Order, 50>, 1195 VersionedClause<OMPC_Ordered>, 1196 VersionedClause<OMPC_ProcBind>, 1197 VersionedClause<OMPC_Schedule>, 1198 ]; 1199 let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_Do]; 1200 let category = CA_Executable; 1201} 1202def OMP_DistributeParallelDoSimd : Directive<"distribute parallel do simd"> { 1203 let allowedClauses = [ 1204 VersionedClause<OMPC_Aligned>, 1205 VersionedClause<OMPC_Allocate>, 1206 VersionedClause<OMPC_Collapse>, 1207 VersionedClause<OMPC_Copyin>, 1208 VersionedClause<OMPC_Default>, 1209 VersionedClause<OMPC_DistSchedule>, 1210 VersionedClause<OMPC_FirstPrivate>, 1211 VersionedClause<OMPC_If>, 1212 VersionedClause<OMPC_LastPrivate>, 1213 VersionedClause<OMPC_Linear>, 1214 VersionedClause<OMPC_NonTemporal>, 1215 VersionedClause<OMPC_NumThreads>, 1216 VersionedClause<OMPC_Order, 50>, 1217 VersionedClause<OMPC_Private>, 1218 VersionedClause<OMPC_ProcBind>, 1219 VersionedClause<OMPC_Reduction>, 1220 VersionedClause<OMPC_SafeLen>, 1221 VersionedClause<OMPC_Schedule>, 1222 VersionedClause<OMPC_Shared>, 1223 VersionedClause<OMPC_SimdLen>, 1224 ]; 1225 let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd]; 1226 let category = CA_Executable; 1227} 1228def OMP_DistributeParallelFor : Directive<"distribute parallel for"> { 1229 let allowedClauses = [ 1230 VersionedClause<OMPC_Allocate>, 1231 VersionedClause<OMPC_Collapse>, 1232 VersionedClause<OMPC_Copyin>, 1233 VersionedClause<OMPC_Default>, 1234 VersionedClause<OMPC_DistSchedule>, 1235 VersionedClause<OMPC_FirstPrivate>, 1236 VersionedClause<OMPC_If>, 1237 VersionedClause<OMPC_LastPrivate>, 1238 VersionedClause<OMPC_NumThreads>, 1239 VersionedClause<OMPC_OMPX_Attribute>, 1240 VersionedClause<OMPC_Order, 50>, 1241 VersionedClause<OMPC_Private>, 1242 VersionedClause<OMPC_ProcBind>, 1243 VersionedClause<OMPC_Reduction>, 1244 VersionedClause<OMPC_Schedule>, 1245 VersionedClause<OMPC_Shared>, 1246 ]; 1247 let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_For]; 1248 let category = CA_Executable; 1249} 1250def OMP_DistributeParallelForSimd : Directive<"distribute parallel for simd"> { 1251 let allowedClauses = [ 1252 VersionedClause<OMPC_Aligned>, 1253 VersionedClause<OMPC_Allocate>, 1254 VersionedClause<OMPC_Collapse>, 1255 VersionedClause<OMPC_Copyin>, 1256 VersionedClause<OMPC_Default>, 1257 VersionedClause<OMPC_DistSchedule>, 1258 VersionedClause<OMPC_FirstPrivate>, 1259 VersionedClause<OMPC_If>, 1260 VersionedClause<OMPC_LastPrivate>, 1261 VersionedClause<OMPC_Linear>, 1262 VersionedClause<OMPC_NonTemporal, 50>, 1263 VersionedClause<OMPC_NumThreads>, 1264 VersionedClause<OMPC_OMPX_Attribute>, 1265 VersionedClause<OMPC_Order, 50>, 1266 VersionedClause<OMPC_Private>, 1267 VersionedClause<OMPC_ProcBind>, 1268 VersionedClause<OMPC_Reduction>, 1269 VersionedClause<OMPC_SafeLen>, 1270 VersionedClause<OMPC_Schedule>, 1271 VersionedClause<OMPC_Shared>, 1272 VersionedClause<OMPC_SimdLen>, 1273 ]; 1274 let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd]; 1275 let category = CA_Executable; 1276} 1277def OMP_DistributeSimd : Directive<"distribute simd"> { 1278 let allowedClauses = [ 1279 VersionedClause<OMPC_Aligned>, 1280 VersionedClause<OMPC_Allocate>, 1281 VersionedClause<OMPC_Copyin>, 1282 VersionedClause<OMPC_Default>, 1283 VersionedClause<OMPC_FirstPrivate>, 1284 VersionedClause<OMPC_LastPrivate>, 1285 VersionedClause<OMPC_Linear>, 1286 VersionedClause<OMPC_NonTemporal, 50>, 1287 VersionedClause<OMPC_Private>, 1288 VersionedClause<OMPC_Reduction>, 1289 ]; 1290 let allowedOnceClauses = [ 1291 VersionedClause<OMPC_Collapse>, 1292 VersionedClause<OMPC_DistSchedule>, 1293 VersionedClause<OMPC_If, 50>, 1294 VersionedClause<OMPC_NumThreads>, 1295 VersionedClause<OMPC_Order, 50>, 1296 VersionedClause<OMPC_Ordered>, 1297 VersionedClause<OMPC_ProcBind>, 1298 VersionedClause<OMPC_SafeLen>, 1299 VersionedClause<OMPC_Schedule>, 1300 VersionedClause<OMPC_SimdLen>, 1301 ]; 1302 let leafConstructs = [OMP_Distribute, OMP_Simd]; 1303 let category = CA_Executable; 1304} 1305def OMP_DoSimd : Directive<"do simd"> { 1306 let allowedClauses = [ 1307 VersionedClause<OMPC_Aligned>, 1308 VersionedClause<OMPC_FirstPrivate>, 1309 VersionedClause<OMPC_LastPrivate>, 1310 VersionedClause<OMPC_Linear>, 1311 VersionedClause<OMPC_Private>, 1312 VersionedClause<OMPC_Reduction>, 1313 ]; 1314 let allowedOnceClauses = [ 1315 VersionedClause<OMPC_Collapse>, 1316 VersionedClause<OMPC_If>, 1317 VersionedClause<OMPC_NoWait>, 1318 VersionedClause<OMPC_Order, 50>, 1319 VersionedClause<OMPC_Ordered>, 1320 VersionedClause<OMPC_SafeLen>, 1321 VersionedClause<OMPC_Schedule>, 1322 VersionedClause<OMPC_SimdLen>, 1323 ]; 1324 let leafConstructs = [OMP_Do, OMP_Simd]; 1325 let category = CA_Executable; 1326} 1327def OMP_EndDoSimd : Directive<"end do simd"> { 1328 let allowedOnceClauses = [ 1329 VersionedClause<OMPC_NoWait>, 1330 ]; 1331 let leafConstructs = OMP_DoSimd.leafConstructs; 1332 let association = OMP_DoSimd.association; 1333 let category = OMP_DoSimd.category; 1334} 1335def OMP_ForSimd : Directive<"for simd"> { 1336 let allowedClauses = [ 1337 VersionedClause<OMPC_Aligned>, 1338 VersionedClause<OMPC_Allocate>, 1339 VersionedClause<OMPC_Collapse>, 1340 VersionedClause<OMPC_FirstPrivate>, 1341 VersionedClause<OMPC_If, 50>, 1342 VersionedClause<OMPC_LastPrivate>, 1343 VersionedClause<OMPC_Linear>, 1344 VersionedClause<OMPC_NonTemporal, 50>, 1345 VersionedClause<OMPC_NoWait>, 1346 VersionedClause<OMPC_Order, 50>, 1347 VersionedClause<OMPC_Ordered>, 1348 VersionedClause<OMPC_Private>, 1349 VersionedClause<OMPC_Reduction>, 1350 VersionedClause<OMPC_SafeLen>, 1351 VersionedClause<OMPC_Schedule>, 1352 VersionedClause<OMPC_SimdLen>, 1353 ]; 1354 let leafConstructs = [OMP_For, OMP_Simd]; 1355 let category = CA_Executable; 1356} 1357def OMP_target_loop : Directive<"target loop"> { 1358 let allowedClauses = [ 1359 VersionedClause<OMPC_Allocate>, 1360 VersionedClause<OMPC_Depend>, 1361 VersionedClause<OMPC_FirstPrivate>, 1362 VersionedClause<OMPC_IsDevicePtr>, 1363 VersionedClause<OMPC_HasDeviceAddr, 51>, 1364 VersionedClause<OMPC_LastPrivate>, 1365 VersionedClause<OMPC_Map>, 1366 VersionedClause<OMPC_Private>, 1367 VersionedClause<OMPC_Reduction>, 1368 VersionedClause<OMPC_UsesAllocators, 50>, 1369 VersionedClause<OMPC_OMPX_Attribute>, 1370 VersionedClause<OMPC_InReduction, 50>, 1371 1372 ]; 1373 let allowedOnceClauses = [ 1374 VersionedClause<OMPC_Bind, 50>, 1375 VersionedClause<OMPC_Collapse>, 1376 VersionedClause<OMPC_Order>, 1377 VersionedClause<OMPC_ThreadLimit>, 1378 VersionedClause<OMPC_OMPX_DynCGroupMem>, 1379 VersionedClause<OMPC_If>, 1380 VersionedClause<OMPC_Device>, 1381 VersionedClause<OMPC_DefaultMap>, 1382 VersionedClause<OMPC_NoWait>, 1383 ]; 1384 let leafConstructs = [OMP_Target, OMP_loop]; 1385 let category = CA_Executable; 1386} 1387def OMP_MaskedTaskloop : Directive<"masked taskloop"> { 1388 let allowedClauses = [ 1389 VersionedClause<OMPC_Allocate>, 1390 VersionedClause<OMPC_Collapse>, 1391 VersionedClause<OMPC_Default>, 1392 VersionedClause<OMPC_Filter>, 1393 VersionedClause<OMPC_Final>, 1394 VersionedClause<OMPC_FirstPrivate>, 1395 VersionedClause<OMPC_GrainSize>, 1396 VersionedClause<OMPC_If>, 1397 VersionedClause<OMPC_InReduction>, 1398 VersionedClause<OMPC_LastPrivate>, 1399 VersionedClause<OMPC_Mergeable>, 1400 VersionedClause<OMPC_NoGroup>, 1401 VersionedClause<OMPC_NumTasks>, 1402 VersionedClause<OMPC_Priority>, 1403 VersionedClause<OMPC_Private>, 1404 VersionedClause<OMPC_Reduction>, 1405 VersionedClause<OMPC_Shared>, 1406 VersionedClause<OMPC_Untied>, 1407 ]; 1408 let leafConstructs = [OMP_masked, OMP_TaskLoop]; 1409 let category = CA_Executable; 1410} 1411def OMP_MaskedTaskloopSimd : Directive<"masked taskloop simd"> { 1412 let allowedClauses = [ 1413 VersionedClause<OMPC_Aligned>, 1414 VersionedClause<OMPC_Allocate>, 1415 VersionedClause<OMPC_Collapse>, 1416 VersionedClause<OMPC_Default>, 1417 VersionedClause<OMPC_Filter>, 1418 VersionedClause<OMPC_Final>, 1419 VersionedClause<OMPC_FirstPrivate>, 1420 VersionedClause<OMPC_GrainSize>, 1421 VersionedClause<OMPC_If>, 1422 VersionedClause<OMPC_InReduction>, 1423 VersionedClause<OMPC_LastPrivate>, 1424 VersionedClause<OMPC_Linear>, 1425 VersionedClause<OMPC_Mergeable>, 1426 VersionedClause<OMPC_NoGroup>, 1427 VersionedClause<OMPC_NonTemporal, 50>, 1428 VersionedClause<OMPC_NumTasks>, 1429 VersionedClause<OMPC_Order, 50>, 1430 VersionedClause<OMPC_Priority>, 1431 VersionedClause<OMPC_Private>, 1432 VersionedClause<OMPC_Reduction>, 1433 VersionedClause<OMPC_SafeLen>, 1434 VersionedClause<OMPC_Shared>, 1435 VersionedClause<OMPC_SimdLen>, 1436 VersionedClause<OMPC_Untied>, 1437 ]; 1438 let leafConstructs = [OMP_masked, OMP_TaskLoop, OMP_Simd]; 1439 let category = CA_Executable; 1440} 1441def OMP_MasterTaskloop : Directive<"master taskloop"> { 1442 let allowedClauses = [ 1443 VersionedClause<OMPC_Allocate>, 1444 VersionedClause<OMPC_Collapse>, 1445 VersionedClause<OMPC_Default>, 1446 VersionedClause<OMPC_Final>, 1447 VersionedClause<OMPC_FirstPrivate>, 1448 VersionedClause<OMPC_GrainSize>, 1449 VersionedClause<OMPC_If>, 1450 VersionedClause<OMPC_InReduction>, 1451 VersionedClause<OMPC_LastPrivate>, 1452 VersionedClause<OMPC_Mergeable>, 1453 VersionedClause<OMPC_NoGroup>, 1454 VersionedClause<OMPC_NumTasks>, 1455 VersionedClause<OMPC_Priority>, 1456 VersionedClause<OMPC_Private>, 1457 VersionedClause<OMPC_Reduction>, 1458 VersionedClause<OMPC_Shared>, 1459 VersionedClause<OMPC_Untied>, 1460 ]; 1461 let leafConstructs = [OMP_Master, OMP_TaskLoop]; 1462 let category = CA_Executable; 1463} 1464def OMP_MasterTaskloopSimd : Directive<"master taskloop simd"> { 1465 let allowedClauses = [ 1466 VersionedClause<OMPC_Aligned>, 1467 VersionedClause<OMPC_Allocate>, 1468 VersionedClause<OMPC_Collapse>, 1469 VersionedClause<OMPC_Default>, 1470 VersionedClause<OMPC_Final>, 1471 VersionedClause<OMPC_FirstPrivate>, 1472 VersionedClause<OMPC_GrainSize>, 1473 VersionedClause<OMPC_If>, 1474 VersionedClause<OMPC_InReduction>, 1475 VersionedClause<OMPC_LastPrivate>, 1476 VersionedClause<OMPC_Linear>, 1477 VersionedClause<OMPC_Mergeable>, 1478 VersionedClause<OMPC_NoGroup>, 1479 VersionedClause<OMPC_NonTemporal, 50>, 1480 VersionedClause<OMPC_NumTasks>, 1481 VersionedClause<OMPC_Order, 50>, 1482 VersionedClause<OMPC_Priority>, 1483 VersionedClause<OMPC_Private>, 1484 VersionedClause<OMPC_Reduction>, 1485 VersionedClause<OMPC_SafeLen>, 1486 VersionedClause<OMPC_Shared>, 1487 VersionedClause<OMPC_SimdLen>, 1488 VersionedClause<OMPC_Untied>, 1489 ]; 1490 let leafConstructs = [OMP_Master, OMP_TaskLoop, OMP_Simd]; 1491 let category = CA_Executable; 1492} 1493def OMP_ParallelDo : Directive<"parallel do"> { 1494 let allowedClauses = [ 1495 VersionedClause<OMPC_Copyin>, 1496 VersionedClause<OMPC_Default>, 1497 VersionedClause<OMPC_FirstPrivate>, 1498 VersionedClause<OMPC_LastPrivate>, 1499 VersionedClause<OMPC_Linear>, 1500 VersionedClause<OMPC_Private>, 1501 VersionedClause<OMPC_Reduction>, 1502 VersionedClause<OMPC_Shared>, 1503 ]; 1504 let allowedOnceClauses = [ 1505 VersionedClause<OMPC_Collapse>, 1506 VersionedClause<OMPC_If>, 1507 VersionedClause<OMPC_NumThreads>, 1508 VersionedClause<OMPC_Order, 50>, 1509 VersionedClause<OMPC_Ordered>, 1510 VersionedClause<OMPC_ProcBind>, 1511 VersionedClause<OMPC_Schedule>, 1512 ]; 1513 let leafConstructs = [OMP_Parallel, OMP_Do]; 1514 let category = CA_Executable; 1515} 1516def OMP_ParallelDoSimd : Directive<"parallel do simd"> { 1517 let allowedClauses = [ 1518 VersionedClause<OMPC_Aligned>, 1519 VersionedClause<OMPC_Allocate>, 1520 VersionedClause<OMPC_Copyin>, 1521 VersionedClause<OMPC_Default>, 1522 VersionedClause<OMPC_FirstPrivate>, 1523 VersionedClause<OMPC_If>, 1524 VersionedClause<OMPC_LastPrivate>, 1525 VersionedClause<OMPC_Linear>, 1526 VersionedClause<OMPC_NonTemporal>, 1527 VersionedClause<OMPC_Private>, 1528 VersionedClause<OMPC_Reduction>, 1529 VersionedClause<OMPC_Shared>, 1530 ]; 1531 let allowedOnceClauses = [ 1532 VersionedClause<OMPC_Collapse>, 1533 VersionedClause<OMPC_NumThreads>, 1534 VersionedClause<OMPC_Order, 50>, 1535 VersionedClause<OMPC_Ordered>, 1536 VersionedClause<OMPC_ProcBind>, 1537 VersionedClause<OMPC_SafeLen>, 1538 VersionedClause<OMPC_Schedule>, 1539 VersionedClause<OMPC_SimdLen>, 1540 ]; 1541 let leafConstructs = [OMP_Parallel, OMP_Do, OMP_Simd]; 1542 let category = CA_Executable; 1543} 1544def OMP_ParallelFor : Directive<"parallel for"> { 1545 let allowedClauses = [ 1546 VersionedClause<OMPC_Allocate>, 1547 VersionedClause<OMPC_Collapse>, 1548 VersionedClause<OMPC_Copyin>, 1549 VersionedClause<OMPC_Default>, 1550 VersionedClause<OMPC_FirstPrivate>, 1551 VersionedClause<OMPC_If>, 1552 VersionedClause<OMPC_LastPrivate>, 1553 VersionedClause<OMPC_Linear>, 1554 VersionedClause<OMPC_NumThreads>, 1555 VersionedClause<OMPC_OMPX_Attribute>, 1556 VersionedClause<OMPC_Order, 50>, 1557 VersionedClause<OMPC_Ordered>, 1558 VersionedClause<OMPC_Private>, 1559 VersionedClause<OMPC_ProcBind>, 1560 VersionedClause<OMPC_Reduction>, 1561 VersionedClause<OMPC_Schedule>, 1562 VersionedClause<OMPC_Shared>, 1563 ]; 1564 let leafConstructs = [OMP_Parallel, OMP_For]; 1565 let category = CA_Executable; 1566} 1567def OMP_ParallelForSimd : Directive<"parallel for simd"> { 1568 let allowedClauses = [ 1569 VersionedClause<OMPC_Aligned>, 1570 VersionedClause<OMPC_Allocate>, 1571 VersionedClause<OMPC_Collapse>, 1572 VersionedClause<OMPC_Copyin>, 1573 VersionedClause<OMPC_Default>, 1574 VersionedClause<OMPC_FirstPrivate>, 1575 VersionedClause<OMPC_If>, 1576 VersionedClause<OMPC_LastPrivate>, 1577 VersionedClause<OMPC_Linear>, 1578 VersionedClause<OMPC_NonTemporal, 50>, 1579 VersionedClause<OMPC_NumThreads>, 1580 VersionedClause<OMPC_OMPX_Attribute>, 1581 VersionedClause<OMPC_Order, 50>, 1582 VersionedClause<OMPC_Ordered>, 1583 VersionedClause<OMPC_Private>, 1584 VersionedClause<OMPC_ProcBind>, 1585 VersionedClause<OMPC_Reduction>, 1586 VersionedClause<OMPC_SafeLen>, 1587 VersionedClause<OMPC_Schedule>, 1588 VersionedClause<OMPC_Shared>, 1589 VersionedClause<OMPC_SimdLen>, 1590 ]; 1591 let leafConstructs = [OMP_Parallel, OMP_For, OMP_Simd]; 1592 let category = CA_Executable; 1593} 1594def OMP_parallel_loop : Directive<"parallel loop"> { 1595 let allowedClauses = [ 1596 VersionedClause<OMPC_Allocate>, 1597 VersionedClause<OMPC_Copyin>, 1598 VersionedClause<OMPC_FirstPrivate>, 1599 VersionedClause<OMPC_LastPrivate>, 1600 VersionedClause<OMPC_OMPX_Attribute>, 1601 VersionedClause<OMPC_Private>, 1602 VersionedClause<OMPC_Reduction>, 1603 VersionedClause<OMPC_Shared>, 1604 ]; 1605 let allowedOnceClauses = [ 1606 VersionedClause<OMPC_Bind, 50>, 1607 VersionedClause<OMPC_Collapse>, 1608 VersionedClause<OMPC_Default>, 1609 VersionedClause<OMPC_If>, 1610 VersionedClause<OMPC_NumThreads>, 1611 VersionedClause<OMPC_Order>, 1612 VersionedClause<OMPC_ProcBind>, 1613 ]; 1614 let leafConstructs = [OMP_Parallel, OMP_loop]; 1615 let category = CA_Executable; 1616} 1617def OMP_ParallelMasked : Directive<"parallel masked"> { 1618 let allowedClauses = [ 1619 VersionedClause<OMPC_Allocate>, 1620 VersionedClause<OMPC_Copyin>, 1621 VersionedClause<OMPC_Default>, 1622 VersionedClause<OMPC_Filter>, 1623 VersionedClause<OMPC_FirstPrivate>, 1624 VersionedClause<OMPC_If>, 1625 VersionedClause<OMPC_NumThreads>, 1626 VersionedClause<OMPC_OMPX_Attribute>, 1627 VersionedClause<OMPC_Private>, 1628 VersionedClause<OMPC_ProcBind>, 1629 VersionedClause<OMPC_Reduction>, 1630 VersionedClause<OMPC_Shared>, 1631 ]; 1632 let leafConstructs = [OMP_Parallel, OMP_masked]; 1633 let category = CA_Executable; 1634} 1635def OMP_ParallelMaskedTaskloop : 1636 Directive<"parallel masked taskloop"> { 1637 let allowedClauses = [ 1638 VersionedClause<OMPC_Allocate>, 1639 VersionedClause<OMPC_Collapse>, 1640 VersionedClause<OMPC_Copyin>, 1641 VersionedClause<OMPC_Default>, 1642 VersionedClause<OMPC_Filter>, 1643 VersionedClause<OMPC_Final>, 1644 VersionedClause<OMPC_FirstPrivate>, 1645 VersionedClause<OMPC_GrainSize>, 1646 VersionedClause<OMPC_If>, 1647 VersionedClause<OMPC_LastPrivate>, 1648 VersionedClause<OMPC_Mergeable>, 1649 VersionedClause<OMPC_NoGroup>, 1650 VersionedClause<OMPC_NumTasks>, 1651 VersionedClause<OMPC_NumThreads>, 1652 VersionedClause<OMPC_OMPX_Attribute>, 1653 VersionedClause<OMPC_Priority>, 1654 VersionedClause<OMPC_Private>, 1655 VersionedClause<OMPC_ProcBind>, 1656 VersionedClause<OMPC_Reduction>, 1657 VersionedClause<OMPC_Shared>, 1658 VersionedClause<OMPC_Untied>, 1659 ]; 1660 let leafConstructs = [OMP_Parallel, OMP_masked, OMP_TaskLoop]; 1661 let category = CA_Executable; 1662} 1663def OMP_ParallelMaskedTaskloopSimd : 1664 Directive<"parallel masked taskloop simd"> { 1665 let allowedClauses = [ 1666 VersionedClause<OMPC_Aligned>, 1667 VersionedClause<OMPC_Allocate>, 1668 VersionedClause<OMPC_Collapse>, 1669 VersionedClause<OMPC_Copyin>, 1670 VersionedClause<OMPC_Default>, 1671 VersionedClause<OMPC_Filter>, 1672 VersionedClause<OMPC_Final>, 1673 VersionedClause<OMPC_FirstPrivate>, 1674 VersionedClause<OMPC_GrainSize>, 1675 VersionedClause<OMPC_If>, 1676 VersionedClause<OMPC_LastPrivate>, 1677 VersionedClause<OMPC_Linear>, 1678 VersionedClause<OMPC_Mergeable>, 1679 VersionedClause<OMPC_NoGroup>, 1680 VersionedClause<OMPC_NonTemporal, 50>, 1681 VersionedClause<OMPC_NumTasks>, 1682 VersionedClause<OMPC_NumThreads>, 1683 VersionedClause<OMPC_OMPX_Attribute>, 1684 VersionedClause<OMPC_Order, 50>, 1685 VersionedClause<OMPC_Priority>, 1686 VersionedClause<OMPC_Private>, 1687 VersionedClause<OMPC_ProcBind>, 1688 VersionedClause<OMPC_Reduction>, 1689 VersionedClause<OMPC_SafeLen>, 1690 VersionedClause<OMPC_Shared>, 1691 VersionedClause<OMPC_SimdLen>, 1692 VersionedClause<OMPC_Untied>, 1693 ]; 1694 let leafConstructs = [OMP_Parallel, OMP_masked, OMP_TaskLoop, OMP_Simd]; 1695 let category = CA_Executable; 1696} 1697def OMP_ParallelMaster : Directive<"parallel master"> { 1698 let allowedClauses = [ 1699 VersionedClause<OMPC_Allocate>, 1700 VersionedClause<OMPC_Copyin>, 1701 VersionedClause<OMPC_Default>, 1702 VersionedClause<OMPC_FirstPrivate>, 1703 VersionedClause<OMPC_If>, 1704 VersionedClause<OMPC_NumThreads>, 1705 VersionedClause<OMPC_OMPX_Attribute>, 1706 VersionedClause<OMPC_Private>, 1707 VersionedClause<OMPC_ProcBind>, 1708 VersionedClause<OMPC_Reduction>, 1709 VersionedClause<OMPC_Shared>, 1710 ]; 1711 let leafConstructs = [OMP_Parallel, OMP_Master]; 1712 let category = CA_Executable; 1713} 1714def OMP_ParallelMasterTaskloop : 1715 Directive<"parallel master taskloop"> { 1716 let allowedClauses = [ 1717 VersionedClause<OMPC_Allocate>, 1718 VersionedClause<OMPC_Collapse>, 1719 VersionedClause<OMPC_Copyin>, 1720 VersionedClause<OMPC_Default>, 1721 VersionedClause<OMPC_Final>, 1722 VersionedClause<OMPC_FirstPrivate>, 1723 VersionedClause<OMPC_GrainSize>, 1724 VersionedClause<OMPC_If>, 1725 VersionedClause<OMPC_LastPrivate>, 1726 VersionedClause<OMPC_Mergeable>, 1727 VersionedClause<OMPC_NoGroup>, 1728 VersionedClause<OMPC_NumTasks>, 1729 VersionedClause<OMPC_NumThreads>, 1730 VersionedClause<OMPC_OMPX_Attribute>, 1731 VersionedClause<OMPC_Priority>, 1732 VersionedClause<OMPC_Private>, 1733 VersionedClause<OMPC_ProcBind>, 1734 VersionedClause<OMPC_Reduction>, 1735 VersionedClause<OMPC_Shared>, 1736 VersionedClause<OMPC_Untied>, 1737 ]; 1738 let leafConstructs = [OMP_Parallel, OMP_Master, OMP_TaskLoop]; 1739 let category = CA_Executable; 1740} 1741def OMP_ParallelMasterTaskloopSimd : 1742 Directive<"parallel master taskloop simd"> { 1743 let allowedClauses = [ 1744 VersionedClause<OMPC_Aligned>, 1745 VersionedClause<OMPC_Allocate>, 1746 VersionedClause<OMPC_Collapse>, 1747 VersionedClause<OMPC_Copyin>, 1748 VersionedClause<OMPC_Default>, 1749 VersionedClause<OMPC_Final>, 1750 VersionedClause<OMPC_FirstPrivate>, 1751 VersionedClause<OMPC_GrainSize>, 1752 VersionedClause<OMPC_If>, 1753 VersionedClause<OMPC_LastPrivate>, 1754 VersionedClause<OMPC_Linear>, 1755 VersionedClause<OMPC_Mergeable>, 1756 VersionedClause<OMPC_NoGroup>, 1757 VersionedClause<OMPC_NonTemporal, 50>, 1758 VersionedClause<OMPC_NumTasks>, 1759 VersionedClause<OMPC_NumThreads>, 1760 VersionedClause<OMPC_OMPX_Attribute>, 1761 VersionedClause<OMPC_Order, 50>, 1762 VersionedClause<OMPC_Priority>, 1763 VersionedClause<OMPC_Private>, 1764 VersionedClause<OMPC_ProcBind>, 1765 VersionedClause<OMPC_Reduction>, 1766 VersionedClause<OMPC_SafeLen>, 1767 VersionedClause<OMPC_Shared>, 1768 VersionedClause<OMPC_SimdLen>, 1769 VersionedClause<OMPC_Untied>, 1770 ]; 1771 let leafConstructs = [OMP_Parallel, OMP_Master, OMP_TaskLoop, OMP_Simd]; 1772 let category = CA_Executable; 1773} 1774def OMP_ParallelSections : Directive<"parallel sections"> { 1775 let allowedClauses = [ 1776 VersionedClause<OMPC_Allocate>, 1777 VersionedClause<OMPC_Copyin>, 1778 VersionedClause<OMPC_Default>, 1779 VersionedClause<OMPC_FirstPrivate>, 1780 VersionedClause<OMPC_LastPrivate>, 1781 VersionedClause<OMPC_OMPX_Attribute>, 1782 VersionedClause<OMPC_Private>, 1783 VersionedClause<OMPC_ProcBind>, 1784 VersionedClause<OMPC_Reduction>, 1785 VersionedClause<OMPC_Shared>, 1786 ]; 1787 let allowedOnceClauses = [ 1788 VersionedClause<OMPC_If>, 1789 VersionedClause<OMPC_NumThreads>, 1790 ]; 1791 let leafConstructs = [OMP_Parallel, OMP_Sections]; 1792 let category = CA_Executable; 1793} 1794def OMP_ParallelWorkshare : Directive<"parallel workshare"> { 1795 let allowedClauses = [ 1796 VersionedClause<OMPC_Allocate>, 1797 VersionedClause<OMPC_Copyin>, 1798 VersionedClause<OMPC_Default>, 1799 VersionedClause<OMPC_FirstPrivate>, 1800 VersionedClause<OMPC_Private>, 1801 VersionedClause<OMPC_Reduction>, 1802 VersionedClause<OMPC_Shared>, 1803 ]; 1804 let allowedOnceClauses = [ 1805 VersionedClause<OMPC_If>, 1806 VersionedClause<OMPC_NumThreads>, 1807 VersionedClause<OMPC_ProcBind>, 1808 ]; 1809 let leafConstructs = [OMP_Parallel, OMP_Workshare]; 1810 let category = CA_Executable; 1811} 1812def OMP_TargetParallel : Directive<"target parallel"> { 1813 let allowedClauses = [ 1814 VersionedClause<OMPC_Allocate>, 1815 VersionedClause<OMPC_Default>, 1816 VersionedClause<OMPC_Depend>, 1817 VersionedClause<OMPC_FirstPrivate>, 1818 VersionedClause<OMPC_HasDeviceAddr, 51>, 1819 VersionedClause<OMPC_If>, 1820 VersionedClause<OMPC_IsDevicePtr>, 1821 VersionedClause<OMPC_Map>, 1822 VersionedClause<OMPC_NoWait>, 1823 VersionedClause<OMPC_OMPX_Attribute>, 1824 VersionedClause<OMPC_Private>, 1825 VersionedClause<OMPC_Reduction>, 1826 VersionedClause<OMPC_Shared>, 1827 VersionedClause<OMPC_UsesAllocators, 50>, 1828 ]; 1829 let allowedOnceClauses = [ 1830 VersionedClause<OMPC_DefaultMap>, 1831 VersionedClause<OMPC_Device>, 1832 VersionedClause<OMPC_NumThreads>, 1833 VersionedClause<OMPC_OMPX_DynCGroupMem>, 1834 VersionedClause<OMPC_ProcBind>, 1835 VersionedClause<OMPC_ThreadLimit, 51>, 1836 ]; 1837 let leafConstructs = [OMP_Target, OMP_Parallel]; 1838 let category = CA_Executable; 1839} 1840def OMP_TargetParallelDo : Directive<"target parallel do"> { 1841 let allowedClauses = [ 1842 VersionedClause<OMPC_Allocator>, 1843 VersionedClause<OMPC_Copyin>, 1844 VersionedClause<OMPC_Default>, 1845 VersionedClause<OMPC_Depend>, 1846 VersionedClause<OMPC_FirstPrivate>, 1847 VersionedClause<OMPC_HasDeviceAddr, 51>, 1848 VersionedClause<OMPC_If>, 1849 VersionedClause<OMPC_IsDevicePtr>, 1850 VersionedClause<OMPC_LastPrivate>, 1851 VersionedClause<OMPC_Linear>, 1852 VersionedClause<OMPC_Map>, 1853 VersionedClause<OMPC_Private>, 1854 VersionedClause<OMPC_Reduction>, 1855 VersionedClause<OMPC_Shared>, 1856 VersionedClause<OMPC_UsesAllocators>, 1857 ]; 1858 let allowedOnceClauses = [ 1859 VersionedClause<OMPC_Collapse>, 1860 VersionedClause<OMPC_DefaultMap>, 1861 VersionedClause<OMPC_Device>, 1862 VersionedClause<OMPC_NoWait>, 1863 VersionedClause<OMPC_NumThreads>, 1864 VersionedClause<OMPC_Order, 50>, 1865 VersionedClause<OMPC_Ordered>, 1866 VersionedClause<OMPC_ProcBind>, 1867 VersionedClause<OMPC_Schedule>, 1868 ]; 1869 let leafConstructs = [OMP_Target, OMP_Parallel, OMP_Do]; 1870 let category = CA_Executable; 1871} 1872def OMP_TargetParallelDoSimd : Directive<"target parallel do simd"> { 1873 let allowedClauses = [ 1874 VersionedClause<OMPC_Aligned>, 1875 VersionedClause<OMPC_Allocate>, 1876 VersionedClause<OMPC_Collapse>, 1877 VersionedClause<OMPC_Default>, 1878 VersionedClause<OMPC_DefaultMap>, 1879 VersionedClause<OMPC_Depend>, 1880 VersionedClause<OMPC_Device>, 1881 VersionedClause<OMPC_FirstPrivate>, 1882 VersionedClause<OMPC_HasDeviceAddr, 51>, 1883 VersionedClause<OMPC_If>, 1884 VersionedClause<OMPC_IsDevicePtr>, 1885 VersionedClause<OMPC_LastPrivate>, 1886 VersionedClause<OMPC_Linear>, 1887 VersionedClause<OMPC_Map>, 1888 VersionedClause<OMPC_NonTemporal>, 1889 VersionedClause<OMPC_NoWait>, 1890 VersionedClause<OMPC_NumThreads>, 1891 VersionedClause<OMPC_Order, 50>, 1892 VersionedClause<OMPC_Ordered>, 1893 VersionedClause<OMPC_Private>, 1894 VersionedClause<OMPC_ProcBind>, 1895 VersionedClause<OMPC_Reduction>, 1896 VersionedClause<OMPC_SafeLen>, 1897 VersionedClause<OMPC_Schedule>, 1898 VersionedClause<OMPC_Shared>, 1899 VersionedClause<OMPC_SimdLen>, 1900 VersionedClause<OMPC_UsesAllocators>, 1901 ]; 1902 let leafConstructs = [OMP_Target, OMP_Parallel, OMP_Do, OMP_Simd]; 1903 let category = CA_Executable; 1904} 1905def OMP_TargetParallelFor : Directive<"target parallel for"> { 1906 let allowedClauses = [ 1907 VersionedClause<OMPC_Allocate>, 1908 VersionedClause<OMPC_Collapse>, 1909 VersionedClause<OMPC_Default>, 1910 VersionedClause<OMPC_DefaultMap>, 1911 VersionedClause<OMPC_Depend>, 1912 VersionedClause<OMPC_Device>, 1913 VersionedClause<OMPC_FirstPrivate>, 1914 VersionedClause<OMPC_HasDeviceAddr, 51>, 1915 VersionedClause<OMPC_If>, 1916 VersionedClause<OMPC_IsDevicePtr>, 1917 VersionedClause<OMPC_LastPrivate>, 1918 VersionedClause<OMPC_Linear>, 1919 VersionedClause<OMPC_Map>, 1920 VersionedClause<OMPC_NoWait>, 1921 VersionedClause<OMPC_NumThreads>, 1922 VersionedClause<OMPC_OMPX_Attribute>, 1923 VersionedClause<OMPC_Order, 50>, 1924 VersionedClause<OMPC_Ordered>, 1925 VersionedClause<OMPC_Private>, 1926 VersionedClause<OMPC_ProcBind>, 1927 VersionedClause<OMPC_Reduction>, 1928 VersionedClause<OMPC_Schedule>, 1929 VersionedClause<OMPC_Shared>, 1930 VersionedClause<OMPC_UsesAllocators, 50>, 1931 ]; 1932 let allowedOnceClauses = [ 1933 VersionedClause<OMPC_OMPX_DynCGroupMem>, 1934 VersionedClause<OMPC_ThreadLimit, 51>, 1935 ]; 1936 let leafConstructs = [OMP_Target, OMP_Parallel, OMP_For]; 1937 let category = CA_Executable; 1938} 1939def OMP_TargetParallelForSimd : Directive<"target parallel for simd"> { 1940 let allowedClauses = [ 1941 VersionedClause<OMPC_Aligned>, 1942 VersionedClause<OMPC_Allocate>, 1943 VersionedClause<OMPC_Collapse>, 1944 VersionedClause<OMPC_Default>, 1945 VersionedClause<OMPC_DefaultMap>, 1946 VersionedClause<OMPC_Depend>, 1947 VersionedClause<OMPC_Device>, 1948 VersionedClause<OMPC_FirstPrivate>, 1949 VersionedClause<OMPC_HasDeviceAddr, 51>, 1950 VersionedClause<OMPC_If>, 1951 VersionedClause<OMPC_IsDevicePtr>, 1952 VersionedClause<OMPC_LastPrivate>, 1953 VersionedClause<OMPC_Linear>, 1954 VersionedClause<OMPC_Map>, 1955 VersionedClause<OMPC_NonTemporal, 50>, 1956 VersionedClause<OMPC_NoWait>, 1957 VersionedClause<OMPC_NumThreads>, 1958 VersionedClause<OMPC_OMPX_Attribute>, 1959 VersionedClause<OMPC_Order, 50>, 1960 VersionedClause<OMPC_Ordered>, 1961 VersionedClause<OMPC_Private>, 1962 VersionedClause<OMPC_ProcBind>, 1963 VersionedClause<OMPC_Reduction>, 1964 VersionedClause<OMPC_SafeLen>, 1965 VersionedClause<OMPC_Schedule>, 1966 VersionedClause<OMPC_Shared>, 1967 VersionedClause<OMPC_SimdLen>, 1968 VersionedClause<OMPC_UsesAllocators, 50>, 1969 ]; 1970 let allowedOnceClauses = [ 1971 VersionedClause<OMPC_OMPX_DynCGroupMem>, 1972 VersionedClause<OMPC_ThreadLimit, 51>, 1973 ]; 1974 let leafConstructs = [OMP_Target, OMP_Parallel, OMP_For, OMP_Simd]; 1975 let category = CA_Executable; 1976} 1977def OMP_target_parallel_loop : Directive<"target parallel loop"> { 1978 let allowedClauses = [ 1979 VersionedClause<OMPC_Allocate>, 1980 VersionedClause<OMPC_Copyin>, 1981 VersionedClause<OMPC_Depend>, 1982 VersionedClause<OMPC_Device>, 1983 VersionedClause<OMPC_FirstPrivate>, 1984 VersionedClause<OMPC_HasDeviceAddr, 51>, 1985 VersionedClause<OMPC_If>, 1986 VersionedClause<OMPC_IsDevicePtr>, 1987 VersionedClause<OMPC_LastPrivate>, 1988 VersionedClause<OMPC_Map>, 1989 VersionedClause<OMPC_OMPX_Attribute>, 1990 VersionedClause<OMPC_Private>, 1991 VersionedClause<OMPC_Reduction>, 1992 VersionedClause<OMPC_Shared>, 1993 VersionedClause<OMPC_UsesAllocators, 50>, 1994 ]; 1995 let allowedOnceClauses = [ 1996 VersionedClause<OMPC_Bind, 50>, 1997 VersionedClause<OMPC_Collapse>, 1998 VersionedClause<OMPC_Default>, 1999 VersionedClause<OMPC_DefaultMap>, 2000 VersionedClause<OMPC_NoWait>, 2001 VersionedClause<OMPC_NumThreads>, 2002 VersionedClause<OMPC_OMPX_DynCGroupMem>, 2003 VersionedClause<OMPC_Order>, 2004 VersionedClause<OMPC_ProcBind>, 2005 VersionedClause<OMPC_ThreadLimit, 51>, 2006 ]; 2007 let leafConstructs = [OMP_Target, OMP_Parallel, OMP_loop]; 2008 let category = CA_Executable; 2009} 2010def OMP_TargetSimd : Directive<"target simd"> { 2011 let allowedClauses = [ 2012 VersionedClause<OMPC_Aligned>, 2013 VersionedClause<OMPC_Allocate>, 2014 VersionedClause<OMPC_Depend>, 2015 VersionedClause<OMPC_FirstPrivate>, 2016 VersionedClause<OMPC_HasDeviceAddr, 51>, 2017 VersionedClause<OMPC_If>, 2018 VersionedClause<OMPC_IsDevicePtr>, 2019 VersionedClause<OMPC_LastPrivate>, 2020 VersionedClause<OMPC_Linear>, 2021 VersionedClause<OMPC_Map>, 2022 VersionedClause<OMPC_NonTemporal, 50>, 2023 VersionedClause<OMPC_NoWait>, 2024 VersionedClause<OMPC_OMPX_Attribute>, 2025 VersionedClause<OMPC_Private>, 2026 VersionedClause<OMPC_Reduction>, 2027 VersionedClause<OMPC_Shared>, 2028 VersionedClause<OMPC_UsesAllocators, 50>, 2029 ]; 2030 let allowedOnceClauses = [ 2031 VersionedClause<OMPC_Collapse>, 2032 VersionedClause<OMPC_DefaultMap>, 2033 VersionedClause<OMPC_Device>, 2034 VersionedClause<OMPC_NumThreads>, 2035 VersionedClause<OMPC_OMPX_DynCGroupMem>, 2036 VersionedClause<OMPC_Order, 50>, 2037 VersionedClause<OMPC_ProcBind>, 2038 VersionedClause<OMPC_SafeLen>, 2039 VersionedClause<OMPC_Schedule>, 2040 VersionedClause<OMPC_SimdLen>, 2041 VersionedClause<OMPC_ThreadLimit, 51>, 2042 ]; 2043 let leafConstructs = [OMP_Target, OMP_Simd]; 2044 let category = CA_Executable; 2045} 2046def OMP_TargetTeams : Directive<"target teams"> { 2047 let allowedClauses = [ 2048 VersionedClause<OMPC_Allocate>, 2049 VersionedClause<OMPC_Depend>, 2050 VersionedClause<OMPC_FirstPrivate>, 2051 VersionedClause<OMPC_HasDeviceAddr, 51>, 2052 VersionedClause<OMPC_If>, 2053 VersionedClause<OMPC_IsDevicePtr>, 2054 VersionedClause<OMPC_Map>, 2055 VersionedClause<OMPC_OMPX_Attribute>, 2056 VersionedClause<OMPC_Private>, 2057 VersionedClause<OMPC_Reduction>, 2058 VersionedClause<OMPC_Shared>, 2059 VersionedClause<OMPC_UsesAllocators, 50>, 2060 ]; 2061 let allowedOnceClauses = [ 2062 VersionedClause<OMPC_Default>, 2063 VersionedClause<OMPC_DefaultMap>, 2064 VersionedClause<OMPC_Device>, 2065 VersionedClause<OMPC_NoWait>, 2066 VersionedClause<OMPC_NumTeams>, 2067 VersionedClause<OMPC_OMPX_DynCGroupMem>, 2068 VersionedClause<OMPC_OMPX_Bare>, 2069 VersionedClause<OMPC_ThreadLimit>, 2070 ]; 2071 let leafConstructs = [OMP_Target, OMP_Teams]; 2072 let category = CA_Executable; 2073} 2074def OMP_TargetTeamsDistribute : Directive<"target teams distribute"> { 2075 let allowedClauses = [ 2076 VersionedClause<OMPC_Allocate>, 2077 VersionedClause<OMPC_Depend>, 2078 VersionedClause<OMPC_FirstPrivate>, 2079 VersionedClause<OMPC_HasDeviceAddr, 51>, 2080 VersionedClause<OMPC_If>, 2081 VersionedClause<OMPC_IsDevicePtr>, 2082 VersionedClause<OMPC_LastPrivate>, 2083 VersionedClause<OMPC_Map>, 2084 VersionedClause<OMPC_OMPX_Attribute>, 2085 VersionedClause<OMPC_Private>, 2086 VersionedClause<OMPC_Reduction>, 2087 VersionedClause<OMPC_Shared>, 2088 VersionedClause<OMPC_UsesAllocators, 50>, 2089 ]; 2090 let allowedOnceClauses = [ 2091 VersionedClause<OMPC_Collapse>, 2092 VersionedClause<OMPC_Default>, 2093 VersionedClause<OMPC_DefaultMap>, 2094 VersionedClause<OMPC_Device>, 2095 VersionedClause<OMPC_DistSchedule>, 2096 VersionedClause<OMPC_NoWait>, 2097 VersionedClause<OMPC_NumTeams>, 2098 VersionedClause<OMPC_OMPX_DynCGroupMem>, 2099 VersionedClause<OMPC_Order, 50>, 2100 VersionedClause<OMPC_ThreadLimit>, 2101 ]; 2102 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute]; 2103 let category = CA_Executable; 2104} 2105def OMP_TargetTeamsDistributeParallelDo : 2106 Directive<"target teams distribute parallel do"> { 2107 let allowedClauses = [ 2108 VersionedClause<OMPC_Allocate>, 2109 VersionedClause<OMPC_Copyin>, 2110 VersionedClause<OMPC_Depend>, 2111 VersionedClause<OMPC_FirstPrivate>, 2112 VersionedClause<OMPC_HasDeviceAddr, 51>, 2113 VersionedClause<OMPC_If>, 2114 VersionedClause<OMPC_IsDevicePtr>, 2115 VersionedClause<OMPC_LastPrivate>, 2116 VersionedClause<OMPC_Linear>, 2117 VersionedClause<OMPC_Map>, 2118 VersionedClause<OMPC_Ordered>, 2119 VersionedClause<OMPC_Private>, 2120 VersionedClause<OMPC_Reduction>, 2121 VersionedClause<OMPC_Shared>, 2122 VersionedClause<OMPC_UsesAllocators>, 2123 ]; 2124 let allowedOnceClauses = [ 2125 VersionedClause<OMPC_Collapse>, 2126 VersionedClause<OMPC_Default>, 2127 VersionedClause<OMPC_DefaultMap>, 2128 VersionedClause<OMPC_Device>, 2129 VersionedClause<OMPC_DistSchedule>, 2130 VersionedClause<OMPC_NoWait>, 2131 VersionedClause<OMPC_NumTeams>, 2132 VersionedClause<OMPC_NumThreads>, 2133 VersionedClause<OMPC_Order, 50>, 2134 VersionedClause<OMPC_ProcBind>, 2135 VersionedClause<OMPC_Schedule>, 2136 VersionedClause<OMPC_ThreadLimit>, 2137 ]; 2138 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do]; 2139 let category = CA_Executable; 2140} 2141def OMP_TargetTeamsDistributeParallelDoSimd : 2142 Directive<"target teams distribute parallel do simd"> { 2143 let allowedClauses = [ 2144 VersionedClause<OMPC_Aligned>, 2145 VersionedClause<OMPC_Allocate>, 2146 VersionedClause<OMPC_Copyin>, 2147 VersionedClause<OMPC_Depend>, 2148 VersionedClause<OMPC_FirstPrivate>, 2149 VersionedClause<OMPC_HasDeviceAddr, 51>, 2150 VersionedClause<OMPC_If>, 2151 VersionedClause<OMPC_IsDevicePtr>, 2152 VersionedClause<OMPC_LastPrivate>, 2153 VersionedClause<OMPC_Linear>, 2154 VersionedClause<OMPC_Map>, 2155 VersionedClause<OMPC_NonTemporal>, 2156 VersionedClause<OMPC_Ordered>, 2157 VersionedClause<OMPC_Private>, 2158 VersionedClause<OMPC_Reduction>, 2159 VersionedClause<OMPC_Shared>, 2160 VersionedClause<OMPC_UsesAllocators>, 2161 ]; 2162 let allowedOnceClauses = [ 2163 VersionedClause<OMPC_Collapse>, 2164 VersionedClause<OMPC_Default>, 2165 VersionedClause<OMPC_DefaultMap>, 2166 VersionedClause<OMPC_Device>, 2167 VersionedClause<OMPC_DistSchedule>, 2168 VersionedClause<OMPC_NoWait>, 2169 VersionedClause<OMPC_NumTeams>, 2170 VersionedClause<OMPC_NumThreads>, 2171 VersionedClause<OMPC_Order, 50>, 2172 VersionedClause<OMPC_ProcBind>, 2173 VersionedClause<OMPC_SafeLen>, 2174 VersionedClause<OMPC_Schedule>, 2175 VersionedClause<OMPC_SimdLen>, 2176 VersionedClause<OMPC_ThreadLimit>, 2177 ]; 2178 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd]; 2179 let category = CA_Executable; 2180} 2181def OMP_TargetTeamsDistributeParallelFor : 2182 Directive<"target teams distribute parallel for"> { 2183 let allowedClauses = [ 2184 VersionedClause<OMPC_Allocate>, 2185 VersionedClause<OMPC_Collapse>, 2186 VersionedClause<OMPC_Default>, 2187 VersionedClause<OMPC_DefaultMap>, 2188 VersionedClause<OMPC_Depend>, 2189 VersionedClause<OMPC_Device>, 2190 VersionedClause<OMPC_DistSchedule>, 2191 VersionedClause<OMPC_FirstPrivate>, 2192 VersionedClause<OMPC_HasDeviceAddr, 51>, 2193 VersionedClause<OMPC_If>, 2194 VersionedClause<OMPC_IsDevicePtr>, 2195 VersionedClause<OMPC_LastPrivate>, 2196 VersionedClause<OMPC_Map>, 2197 VersionedClause<OMPC_NoWait>, 2198 VersionedClause<OMPC_NumTeams>, 2199 VersionedClause<OMPC_NumThreads>, 2200 VersionedClause<OMPC_OMPX_Attribute>, 2201 VersionedClause<OMPC_Order, 50>, 2202 VersionedClause<OMPC_Private>, 2203 VersionedClause<OMPC_ProcBind>, 2204 VersionedClause<OMPC_Reduction>, 2205 VersionedClause<OMPC_Schedule>, 2206 VersionedClause<OMPC_Shared>, 2207 VersionedClause<OMPC_ThreadLimit>, 2208 VersionedClause<OMPC_UsesAllocators, 50>, 2209 ]; 2210 let allowedOnceClauses = [ 2211 VersionedClause<OMPC_OMPX_DynCGroupMem>, 2212 ]; 2213 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For]; 2214 let category = CA_Executable; 2215} 2216def OMP_TargetTeamsDistributeParallelForSimd : 2217 Directive<"target teams distribute parallel for simd"> { 2218 let allowedClauses = [ 2219 VersionedClause<OMPC_Aligned>, 2220 VersionedClause<OMPC_Allocate>, 2221 VersionedClause<OMPC_Collapse>, 2222 VersionedClause<OMPC_Default>, 2223 VersionedClause<OMPC_DefaultMap>, 2224 VersionedClause<OMPC_Depend>, 2225 VersionedClause<OMPC_Device>, 2226 VersionedClause<OMPC_DistSchedule>, 2227 VersionedClause<OMPC_FirstPrivate>, 2228 VersionedClause<OMPC_HasDeviceAddr, 51>, 2229 VersionedClause<OMPC_If>, 2230 VersionedClause<OMPC_IsDevicePtr>, 2231 VersionedClause<OMPC_LastPrivate>, 2232 VersionedClause<OMPC_Linear>, 2233 VersionedClause<OMPC_Map>, 2234 VersionedClause<OMPC_NonTemporal, 50>, 2235 VersionedClause<OMPC_NoWait>, 2236 VersionedClause<OMPC_NumTeams>, 2237 VersionedClause<OMPC_NumThreads>, 2238 VersionedClause<OMPC_OMPX_Attribute>, 2239 VersionedClause<OMPC_Order, 50>, 2240 VersionedClause<OMPC_Private>, 2241 VersionedClause<OMPC_ProcBind>, 2242 VersionedClause<OMPC_Reduction>, 2243 VersionedClause<OMPC_SafeLen>, 2244 VersionedClause<OMPC_Schedule>, 2245 VersionedClause<OMPC_Shared>, 2246 VersionedClause<OMPC_SimdLen>, 2247 VersionedClause<OMPC_ThreadLimit>, 2248 VersionedClause<OMPC_UsesAllocators, 50>, 2249 ]; 2250 let allowedOnceClauses = [ 2251 VersionedClause<OMPC_OMPX_DynCGroupMem>, 2252 ]; 2253 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd]; 2254 let category = CA_Executable; 2255} 2256def OMP_TargetTeamsDistributeSimd : 2257 Directive<"target teams distribute simd"> { 2258 let allowedClauses = [ 2259 VersionedClause<OMPC_Aligned>, 2260 VersionedClause<OMPC_Allocate>, 2261 VersionedClause<OMPC_Depend>, 2262 VersionedClause<OMPC_FirstPrivate>, 2263 VersionedClause<OMPC_HasDeviceAddr, 51>, 2264 VersionedClause<OMPC_If>, 2265 VersionedClause<OMPC_IsDevicePtr>, 2266 VersionedClause<OMPC_LastPrivate>, 2267 VersionedClause<OMPC_Linear>, 2268 VersionedClause<OMPC_Map>, 2269 VersionedClause<OMPC_NonTemporal, 50>, 2270 VersionedClause<OMPC_OMPX_Attribute>, 2271 VersionedClause<OMPC_Private>, 2272 VersionedClause<OMPC_Reduction>, 2273 VersionedClause<OMPC_Shared>, 2274 VersionedClause<OMPC_UsesAllocators, 50>, 2275 ]; 2276 let allowedOnceClauses = [ 2277 VersionedClause<OMPC_Collapse>, 2278 VersionedClause<OMPC_DefaultMap>, 2279 VersionedClause<OMPC_Device>, 2280 VersionedClause<OMPC_DistSchedule>, 2281 VersionedClause<OMPC_NoWait>, 2282 VersionedClause<OMPC_NumTeams>, 2283 VersionedClause<OMPC_OMPX_DynCGroupMem>, 2284 VersionedClause<OMPC_Order, 50>, 2285 VersionedClause<OMPC_SafeLen>, 2286 VersionedClause<OMPC_SimdLen>, 2287 VersionedClause<OMPC_ThreadLimit>, 2288 ]; 2289 let leafConstructs = [OMP_Target, OMP_Teams, OMP_Distribute, OMP_Simd]; 2290 let category = CA_Executable; 2291} 2292def OMP_target_teams_loop : Directive<"target teams loop"> { 2293 let allowedClauses = [ 2294 VersionedClause<OMPC_Allocate>, 2295 VersionedClause<OMPC_DefaultMap>, 2296 VersionedClause<OMPC_Depend>, 2297 VersionedClause<OMPC_Device>, 2298 VersionedClause<OMPC_FirstPrivate>, 2299 VersionedClause<OMPC_HasDeviceAddr, 51>, 2300 VersionedClause<OMPC_If>, 2301 VersionedClause<OMPC_IsDevicePtr>, 2302 VersionedClause<OMPC_LastPrivate>, 2303 VersionedClause<OMPC_Map>, 2304 VersionedClause<OMPC_OMPX_Attribute>, 2305 VersionedClause<OMPC_Private>, 2306 VersionedClause<OMPC_Reduction>, 2307 VersionedClause<OMPC_Shared>, 2308 VersionedClause<OMPC_UsesAllocators, 50>, 2309 ]; 2310 let allowedOnceClauses = [ 2311 VersionedClause<OMPC_Bind, 50>, 2312 VersionedClause<OMPC_Collapse>, 2313 VersionedClause<OMPC_Default>, 2314 VersionedClause<OMPC_NoWait>, 2315 VersionedClause<OMPC_NumTeams>, 2316 VersionedClause<OMPC_OMPX_DynCGroupMem>, 2317 VersionedClause<OMPC_Order>, 2318 VersionedClause<OMPC_ThreadLimit>, 2319 ]; 2320 let leafConstructs = [OMP_Target, OMP_Teams, OMP_loop]; 2321 let category = CA_Executable; 2322} 2323def OMP_TaskLoopSimd : Directive<"taskloop simd"> { 2324 let allowedClauses = [ 2325 VersionedClause<OMPC_Aligned>, 2326 VersionedClause<OMPC_Allocate>, 2327 VersionedClause<OMPC_Default>, 2328 VersionedClause<OMPC_FirstPrivate>, 2329 VersionedClause<OMPC_If>, 2330 VersionedClause<OMPC_InReduction>, 2331 VersionedClause<OMPC_LastPrivate>, 2332 VersionedClause<OMPC_Linear>, 2333 VersionedClause<OMPC_Mergeable>, 2334 VersionedClause<OMPC_NoGroup>, 2335 VersionedClause<OMPC_NonTemporal, 50>, 2336 VersionedClause<OMPC_Private>, 2337 VersionedClause<OMPC_Reduction>, 2338 VersionedClause<OMPC_Shared>, 2339 VersionedClause<OMPC_Untied>, 2340 ]; 2341 let allowedOnceClauses = [ 2342 VersionedClause<OMPC_Collapse>, 2343 VersionedClause<OMPC_Final>, 2344 VersionedClause<OMPC_Order, 50>, 2345 VersionedClause<OMPC_Priority>, 2346 VersionedClause<OMPC_SafeLen>, 2347 VersionedClause<OMPC_SimdLen>, 2348 ]; 2349 let allowedExclusiveClauses = [ 2350 VersionedClause<OMPC_GrainSize>, 2351 VersionedClause<OMPC_NumTasks>, 2352 ]; 2353 let leafConstructs = [OMP_TaskLoop, OMP_Simd]; 2354 let category = CA_Executable; 2355} 2356def OMP_TeamsDistribute : Directive<"teams distribute"> { 2357 let allowedClauses = [ 2358 VersionedClause<OMPC_Allocate>, 2359 VersionedClause<OMPC_Collapse>, 2360 VersionedClause<OMPC_Default>, 2361 VersionedClause<OMPC_DistSchedule>, 2362 VersionedClause<OMPC_FirstPrivate>, 2363 VersionedClause<OMPC_LastPrivate>, 2364 VersionedClause<OMPC_NumTeams>, 2365 VersionedClause<OMPC_OMPX_Attribute>, 2366 VersionedClause<OMPC_Private>, 2367 VersionedClause<OMPC_Reduction>, 2368 VersionedClause<OMPC_Shared>, 2369 VersionedClause<OMPC_ThreadLimit>, 2370 ]; 2371 let allowedOnceClauses = [ 2372 VersionedClause<OMPC_If>, 2373 VersionedClause<OMPC_Order, 50>, 2374 ]; 2375 let leafConstructs = [OMP_Teams, OMP_Distribute]; 2376 let category = CA_Executable; 2377} 2378def OMP_TeamsDistributeParallelDo : 2379 Directive<"teams distribute parallel do"> { 2380 let allowedClauses = [ 2381 VersionedClause<OMPC_Allocate>, 2382 VersionedClause<OMPC_Copyin>, 2383 VersionedClause<OMPC_FirstPrivate>, 2384 VersionedClause<OMPC_If>, 2385 VersionedClause<OMPC_LastPrivate>, 2386 VersionedClause<OMPC_Linear>, 2387 VersionedClause<OMPC_Private>, 2388 VersionedClause<OMPC_Reduction>, 2389 VersionedClause<OMPC_Shared>, 2390 ]; 2391 let allowedOnceClauses = [ 2392 VersionedClause<OMPC_Collapse>, 2393 VersionedClause<OMPC_Default>, 2394 VersionedClause<OMPC_DistSchedule>, 2395 VersionedClause<OMPC_NumTeams>, 2396 VersionedClause<OMPC_NumThreads>, 2397 VersionedClause<OMPC_Order, 50>, 2398 VersionedClause<OMPC_Ordered>, 2399 VersionedClause<OMPC_ProcBind>, 2400 VersionedClause<OMPC_Schedule>, 2401 VersionedClause<OMPC_ThreadLimit>, 2402 ]; 2403 let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do]; 2404 let category = CA_Executable; 2405} 2406def OMP_TeamsDistributeParallelDoSimd : 2407 Directive<"teams distribute parallel do simd"> { 2408 let allowedClauses = [ 2409 VersionedClause<OMPC_Aligned>, 2410 VersionedClause<OMPC_Allocate>, 2411 VersionedClause<OMPC_FirstPrivate>, 2412 VersionedClause<OMPC_If>, 2413 VersionedClause<OMPC_LastPrivate>, 2414 VersionedClause<OMPC_Linear>, 2415 VersionedClause<OMPC_NonTemporal>, 2416 VersionedClause<OMPC_Private>, 2417 VersionedClause<OMPC_Reduction>, 2418 VersionedClause<OMPC_Shared>, 2419 ]; 2420 let allowedOnceClauses = [ 2421 VersionedClause<OMPC_Collapse>, 2422 VersionedClause<OMPC_Default>, 2423 VersionedClause<OMPC_DistSchedule>, 2424 VersionedClause<OMPC_NumTeams>, 2425 VersionedClause<OMPC_NumThreads>, 2426 VersionedClause<OMPC_Order, 50>, 2427 VersionedClause<OMPC_ProcBind>, 2428 VersionedClause<OMPC_SafeLen>, 2429 VersionedClause<OMPC_Schedule>, 2430 VersionedClause<OMPC_SimdLen>, 2431 VersionedClause<OMPC_ThreadLimit>, 2432 ]; 2433 let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd]; 2434 let category = CA_Executable; 2435} 2436def OMP_TeamsDistributeParallelFor : 2437 Directive<"teams distribute parallel for"> { 2438 let allowedClauses = [ 2439 VersionedClause<OMPC_Allocate>, 2440 VersionedClause<OMPC_Collapse>, 2441 VersionedClause<OMPC_Copyin>, 2442 VersionedClause<OMPC_Default>, 2443 VersionedClause<OMPC_DistSchedule>, 2444 VersionedClause<OMPC_FirstPrivate>, 2445 VersionedClause<OMPC_If>, 2446 VersionedClause<OMPC_LastPrivate>, 2447 VersionedClause<OMPC_NumTeams>, 2448 VersionedClause<OMPC_NumThreads>, 2449 VersionedClause<OMPC_OMPX_Attribute>, 2450 VersionedClause<OMPC_Order, 50>, 2451 VersionedClause<OMPC_Private>, 2452 VersionedClause<OMPC_ProcBind>, 2453 VersionedClause<OMPC_Reduction>, 2454 VersionedClause<OMPC_Schedule>, 2455 VersionedClause<OMPC_Shared>, 2456 VersionedClause<OMPC_ThreadLimit>, 2457 ]; 2458 let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For]; 2459 let category = CA_Executable; 2460} 2461def OMP_TeamsDistributeParallelForSimd : 2462 Directive<"teams distribute parallel for simd"> { 2463 let allowedClauses = [ 2464 VersionedClause<OMPC_Aligned>, 2465 VersionedClause<OMPC_Allocate>, 2466 VersionedClause<OMPC_Collapse>, 2467 VersionedClause<OMPC_Default>, 2468 VersionedClause<OMPC_DistSchedule>, 2469 VersionedClause<OMPC_FirstPrivate>, 2470 VersionedClause<OMPC_If>, 2471 VersionedClause<OMPC_LastPrivate>, 2472 VersionedClause<OMPC_Linear>, 2473 VersionedClause<OMPC_NonTemporal, 50>, 2474 VersionedClause<OMPC_NumTeams>, 2475 VersionedClause<OMPC_NumThreads>, 2476 VersionedClause<OMPC_OMPX_Attribute>, 2477 VersionedClause<OMPC_Order, 50>, 2478 VersionedClause<OMPC_Private>, 2479 VersionedClause<OMPC_ProcBind>, 2480 VersionedClause<OMPC_Reduction>, 2481 VersionedClause<OMPC_SafeLen>, 2482 VersionedClause<OMPC_Schedule>, 2483 VersionedClause<OMPC_Shared>, 2484 VersionedClause<OMPC_SimdLen>, 2485 VersionedClause<OMPC_ThreadLimit>, 2486 ]; 2487 let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd]; 2488 let category = CA_Executable; 2489} 2490def OMP_TeamsDistributeSimd : Directive<"teams distribute simd"> { 2491 let allowedClauses = [ 2492 VersionedClause<OMPC_Aligned>, 2493 VersionedClause<OMPC_Allocate>, 2494 VersionedClause<OMPC_FirstPrivate>, 2495 VersionedClause<OMPC_If, 50>, 2496 VersionedClause<OMPC_LastPrivate>, 2497 VersionedClause<OMPC_Linear>, 2498 VersionedClause<OMPC_NonTemporal, 50>, 2499 VersionedClause<OMPC_OMPX_Attribute>, 2500 VersionedClause<OMPC_Private>, 2501 VersionedClause<OMPC_Reduction>, 2502 VersionedClause<OMPC_Shared>, 2503 ]; 2504 let allowedOnceClauses = [ 2505 VersionedClause<OMPC_Collapse>, 2506 VersionedClause<OMPC_Default>, 2507 VersionedClause<OMPC_DistSchedule>, 2508 VersionedClause<OMPC_NumTeams>, 2509 VersionedClause<OMPC_Order, 50>, 2510 VersionedClause<OMPC_SafeLen>, 2511 VersionedClause<OMPC_SimdLen>, 2512 VersionedClause<OMPC_ThreadLimit>, 2513 ]; 2514 let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Simd]; 2515 let category = CA_Executable; 2516} 2517def OMP_teams_loop : Directive<"teams loop"> { 2518 let allowedClauses = [ 2519 VersionedClause<OMPC_Allocate>, 2520 VersionedClause<OMPC_FirstPrivate>, 2521 VersionedClause<OMPC_LastPrivate>, 2522 VersionedClause<OMPC_OMPX_Attribute>, 2523 VersionedClause<OMPC_Private>, 2524 VersionedClause<OMPC_Reduction>, 2525 VersionedClause<OMPC_Shared>, 2526 ]; 2527 let allowedOnceClauses = [ 2528 VersionedClause<OMPC_Bind, 50>, 2529 VersionedClause<OMPC_Collapse>, 2530 VersionedClause<OMPC_Default>, 2531 VersionedClause<OMPC_NumTeams>, 2532 VersionedClause<OMPC_Order>, 2533 VersionedClause<OMPC_ThreadLimit>, 2534 ]; 2535 let leafConstructs = [OMP_Teams, OMP_loop]; 2536 let category = CA_Executable; 2537} 2538