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