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