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