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"> { let clangClass = "OMPSizesClause"; } 71def OMPC_FirstPrivate : Clause<"firstprivate"> { 72 let clangClass = "OMPFirstprivateClause"; 73 let flangClass = "OmpObjectList"; 74} 75def OMPC_LastPrivate : Clause<"lastprivate"> { 76 let clangClass = "OMPLastprivateClause"; 77 let flangClass = "OmpObjectList"; 78} 79def OMPC_Shared : Clause<"shared"> { 80 let clangClass = "OMPSharedClause"; 81 let flangClass = "OmpObjectList"; 82} 83def OMPC_Reduction : Clause<"reduction"> { 84 let clangClass = "OMPReductionClause"; 85 let flangClass = "OmpReductionClause"; 86} 87def OMPC_Linear : Clause<"linear"> { 88 let clangClass = "OMPLinearClause"; 89 let flangClass = "OmpLinearClause"; 90} 91def OMPC_Aligned : Clause<"aligned"> { 92 let clangClass = "OMPAlignedClause"; 93 let flangClass = "OmpAlignedClause"; 94} 95def OMPC_Copyin : Clause<"copyin"> { 96 let clangClass = "OMPCopyinClause"; 97 let flangClass = "OmpObjectList"; 98} 99def OMPC_CopyPrivate : Clause<"copyprivate"> { 100 let clangClass = "OMPCopyprivateClause"; 101 let flangClass = "OmpObjectList"; 102} 103def OMP_PROC_BIND_master : ClauseVal<"master",2,1> {} 104def OMP_PROC_BIND_close : ClauseVal<"close",3,1> {} 105def OMP_PROC_BIND_spread : ClauseVal<"spread",4,1> {} 106def OMP_PROC_BIND_primary : ClauseVal<"primary",5,1> {} 107def OMP_PROC_BIND_default : ClauseVal<"default",6,0> {} 108def OMP_PROC_BIND_unknown : ClauseVal<"unknown",7,0> { let isDefault = true; } 109def OMPC_ProcBind : Clause<"proc_bind"> { 110 let clangClass = "OMPProcBindClause"; 111 let flangClass = "OmpProcBindClause"; 112 let enumClauseValue = "ProcBindKind"; 113 let allowedClauseValues = [ 114 OMP_PROC_BIND_primary, 115 OMP_PROC_BIND_master, 116 OMP_PROC_BIND_close, 117 OMP_PROC_BIND_spread, 118 OMP_PROC_BIND_default, 119 OMP_PROC_BIND_unknown 120 ]; 121} 122 123// static and auto are C++ keywords so need a capital to disambiguate. 124def OMP_SCHEDULE_Static : ClauseVal<"Static", 2, 1> {} 125def OMP_SCHEDULE_Dynamic : ClauseVal<"Dynamic", 3, 1> {} 126def OMP_SCHEDULE_Guided : ClauseVal<"Guided", 4, 1> {} 127def OMP_SCHEDULE_Auto : ClauseVal<"Auto", 5, 1> {} 128def OMP_SCHEDULE_Runtime : ClauseVal<"Runtime", 6, 1> {} 129def OMP_SCHEDULE_Default : ClauseVal<"Default", 7, 0> { let isDefault = 1; } 130 131def OMPC_Schedule : Clause<"schedule"> { 132 let clangClass = "OMPScheduleClause"; 133 let flangClass = "OmpScheduleClause"; 134 let enumClauseValue = "ScheduleKind"; 135 let allowedClauseValues = [ 136 OMP_SCHEDULE_Static, 137 OMP_SCHEDULE_Dynamic, 138 OMP_SCHEDULE_Guided, 139 OMP_SCHEDULE_Auto, 140 OMP_SCHEDULE_Runtime, 141 OMP_SCHEDULE_Default 142 ]; 143} 144 145def OMPC_Ordered : Clause<"ordered"> { 146 let clangClass = "OMPOrderedClause"; 147 let flangClass = "ScalarIntConstantExpr"; 148 let isValueOptional = true; 149} 150def OMPC_NoWait : Clause<"nowait"> { 151 let clangClass = "OMPNowaitClause"; 152} 153def OMPC_Untied : Clause<"untied"> { let clangClass = "OMPUntiedClause"; } 154def OMPC_Mergeable : Clause<"mergeable"> { 155 let clangClass = "OMPMergeableClause"; 156} 157def OMPC_Read : Clause<"read"> { let clangClass = "OMPReadClause"; } 158def OMPC_Write : Clause<"write"> { let clangClass = "OMPWriteClause"; } 159def OMPC_Update : Clause<"update"> { let clangClass = "OMPUpdateClause"; } 160def OMPC_Capture : Clause<"capture"> { let clangClass = "OMPCaptureClause"; } 161def OMPC_SeqCst : Clause<"seq_cst"> { let clangClass = "OMPSeqCstClause"; } 162def OMPC_AcqRel : Clause<"acq_rel"> { let clangClass = "OMPAcqRelClause"; } 163def OMPC_Acquire : Clause<"acquire"> { let clangClass = "OMPAcquireClause"; } 164def OMPC_Release : Clause<"release"> { let clangClass = "OMPReleaseClause"; } 165def OMPC_Relaxed : Clause<"relaxed"> { let clangClass = "OMPRelaxedClause"; } 166def OMPC_Depend : Clause<"depend"> { 167 let clangClass = "OMPDependClause"; 168 let flangClass = "OmpDependClause"; 169} 170def OMPC_Device : Clause<"device"> { 171 let clangClass = "OMPDeviceClause"; 172 let flangClass = "ScalarIntExpr"; 173} 174def OMPC_Threads : Clause<"threads"> { let clangClass = "OMPThreadsClause"; } 175def OMPC_Simd : Clause<"simd"> { let clangClass = "OMPSIMDClause"; } 176def OMPC_Map : Clause<"map"> { 177 let clangClass = "OMPMapClause"; 178 let flangClass = "OmpMapClause"; 179} 180def OMPC_NumTeams : Clause<"num_teams"> { 181 let clangClass = "OMPNumTeamsClause"; 182 let flangClass = "ScalarIntExpr"; 183} 184def OMPC_ThreadLimit : Clause<"thread_limit"> { 185 let clangClass = "OMPThreadLimitClause"; 186 let flangClass = "ScalarIntExpr"; 187} 188def OMPC_Priority : Clause<"priority"> { 189 let clangClass = "OMPPriorityClause"; 190 let flangClass = "ScalarIntExpr"; 191} 192def OMPC_GrainSize : Clause<"grainsize"> { 193 let clangClass = "OMPGrainsizeClause"; 194 let flangClass = "ScalarIntExpr"; 195} 196def OMPC_NoGroup : Clause<"nogroup"> { 197 let clangClass = "OMPNogroupClause"; 198} 199def OMPC_NumTasks : Clause<"num_tasks"> { 200 let clangClass = "OMPNumTasksClause"; 201 let flangClass = "ScalarIntExpr"; 202} 203def OMPC_Hint : Clause<"hint"> { 204 let clangClass = "OMPHintClause"; 205 let flangClass = "ConstantExpr"; 206} 207def OMPC_DistSchedule : Clause<"dist_schedule"> { 208 let clangClass = "OMPDistScheduleClause"; 209 let flangClass = "ScalarIntExpr"; 210 let isValueOptional = true; 211} 212def OMPC_DefaultMap : Clause<"defaultmap"> { 213 let clangClass = "OMPDefaultmapClause"; 214 let flangClass = "OmpDefaultmapClause"; 215} 216def OMPC_To : Clause<"to"> { 217 let clangClass = "OMPToClause"; 218 let flangClass = "OmpObjectList"; 219} 220def OMPC_From : Clause<"from"> { 221 let clangClass = "OMPFromClause"; 222 let flangClass = "OmpObjectList"; 223} 224def OMPC_UseDevicePtr : Clause<"use_device_ptr"> { 225 let clangClass = "OMPUseDevicePtrClause"; 226 let flangClass = "Name"; 227 let isValueList = true; 228} 229def OMPC_IsDevicePtr : Clause<"is_device_ptr"> { 230 let clangClass = "OMPIsDevicePtrClause"; 231 let flangClass = "Name"; 232 let isValueList = true; 233} 234def OMPC_TaskReduction : Clause<"task_reduction"> { 235 let clangClass = "OMPTaskReductionClause"; 236 let flangClass = "OmpReductionClause"; 237} 238def OMPC_InReduction : Clause<"in_reduction"> { 239 let clangClass = "OMPInReductionClause"; 240} 241def OMPC_UnifiedAddress : Clause<"unified_address"> { 242 let clangClass = "OMPUnifiedAddressClause"; 243} 244def OMPC_UnifiedSharedMemory : Clause<"unified_shared_memory"> { 245 let clangClass = "OMPUnifiedSharedMemoryClause"; 246} 247def OMPC_ReverseOffload : Clause<"reverse_offload"> { 248 let clangClass = "OMPReverseOffloadClause"; 249} 250def OMPC_DynamicAllocators : Clause<"dynamic_allocators"> { 251 let clangClass = "OMPDynamicAllocatorsClause"; 252} 253def OMPC_AtomicDefaultMemOrder : Clause<"atomic_default_mem_order"> { 254 let clangClass = "OMPAtomicDefaultMemOrderClause"; 255} 256def OMPC_Allocate : Clause<"allocate"> { 257 let clangClass = "OMPAllocateClause"; 258 let flangClass = "OmpAllocateClause"; 259} 260def OMPC_NonTemporal : Clause<"nontemporal"> { 261 let clangClass = "OMPNontemporalClause"; 262} 263 264def OMP_ORDER_concurrent : ClauseVal<"default",2,0> { let isDefault = 1; } 265def OMPC_Order : Clause<"order"> { 266 let clangClass = "OMPOrderClause"; 267 let enumClauseValue = "OrderKind"; 268 let allowedClauseValues = [ 269 OMP_ORDER_concurrent 270 ]; 271} 272def OMPC_Init : Clause<"init"> { 273 let clangClass = "OMPInitClause"; 274} 275def OMPC_Use : Clause<"use"> { 276 let clangClass = "OMPUseClause"; 277} 278def OMPC_Destroy : Clause<"destroy"> { 279 let clangClass = "OMPDestroyClause"; 280} 281def OMPC_Novariants : Clause<"novariants"> { 282 let clangClass = "OMPNovariantsClause"; 283 let flangClass = "ScalarLogicalExpr"; 284} 285def OMPC_Nocontext : Clause<"nocontext"> { 286 let clangClass = "OMPNocontextClause"; 287 let flangClass = "ScalarLogicalExpr"; 288} 289def OMPC_Detach : Clause<"detach"> { 290 let clangClass = "OMPDetachClause"; 291} 292def OMPC_Inclusive : Clause<"inclusive"> { 293 let clangClass = "OMPInclusiveClause"; 294} 295def OMPC_Exclusive : Clause<"exclusive"> { 296 let clangClass = "OMPExclusiveClause"; 297} 298def OMPC_UsesAllocators : Clause<"uses_allocators"> { 299 let clangClass = "OMPUsesAllocatorsClause"; 300} 301def OMPC_Affinity : Clause<"affinity"> { 302 let clangClass = "OMPAffinityClause"; 303} 304def OMPC_UseDeviceAddr : Clause<"use_device_addr"> { 305 let clangClass = "OMPUseDeviceAddrClause"; 306} 307def OMPC_Uniform : Clause<"uniform"> { 308 let flangClass = "Name"; 309 let isValueList = true; 310} 311def OMPC_DeviceType : Clause<"device_type"> {} 312def OMPC_Match : Clause<"match"> {} 313def OMPC_Depobj : Clause<"depobj"> { 314 let clangClass = "OMPDepobjClause"; 315 let isImplicit = true; 316} 317def OMPC_Flush : Clause<"flush"> { 318 let clangClass = "OMPFlushClause"; 319 let isImplicit = true; 320} 321def OMPC_ThreadPrivate : Clause<"threadprivate"> { 322 let alternativeName = "threadprivate or thread local"; 323 let isImplicit = true; 324} 325def OMPC_Unknown : Clause<"unknown"> { 326 let isImplicit = true; 327 let isDefault = true; 328} 329def OMPC_Link : Clause<"link"> { 330 let flangClass = "OmpObjectList"; 331} 332def OMPC_Inbranch : Clause<"inbranch"> {} 333def OMPC_Notinbranch : Clause<"notinbranch"> {} 334def OMPC_Filter : Clause<"filter"> { 335 let clangClass = "OMPFilterClause"; 336 let flangClass = "ScalarIntExpr"; 337} 338 339//===----------------------------------------------------------------------===// 340// Definition of OpenMP directives 341//===----------------------------------------------------------------------===// 342 343def OMP_ThreadPrivate : Directive<"threadprivate"> {} 344def OMP_Parallel : Directive<"parallel"> { 345 let allowedClauses = [ 346 VersionedClause<OMPC_Private>, 347 VersionedClause<OMPC_FirstPrivate>, 348 VersionedClause<OMPC_Shared>, 349 VersionedClause<OMPC_Reduction>, 350 VersionedClause<OMPC_Copyin>, 351 VersionedClause<OMPC_Allocate> 352 ]; 353 let allowedOnceClauses = [ 354 VersionedClause<OMPC_Default>, 355 VersionedClause<OMPC_If>, 356 VersionedClause<OMPC_NumThreads>, 357 VersionedClause<OMPC_ProcBind>, 358 ]; 359} 360def OMP_Task : Directive<"task"> { 361 let allowedClauses = [ 362 VersionedClause<OMPC_Private>, 363 VersionedClause<OMPC_FirstPrivate>, 364 VersionedClause<OMPC_Shared>, 365 VersionedClause<OMPC_Untied>, 366 VersionedClause<OMPC_Mergeable>, 367 VersionedClause<OMPC_Depend>, 368 VersionedClause<OMPC_InReduction>, 369 VersionedClause<OMPC_Allocate>, 370 VersionedClause<OMPC_Detach, 50>, 371 VersionedClause<OMPC_Affinity, 50> 372 ]; 373 let allowedOnceClauses = [ 374 VersionedClause<OMPC_Default>, 375 VersionedClause<OMPC_If>, 376 VersionedClause<OMPC_Final>, 377 VersionedClause<OMPC_Priority> 378 ]; 379} 380def OMP_Simd : Directive<"simd"> { 381 let allowedClauses = [ 382 VersionedClause<OMPC_Private>, 383 VersionedClause<OMPC_LastPrivate>, 384 VersionedClause<OMPC_Linear>, 385 VersionedClause<OMPC_Aligned>, 386 VersionedClause<OMPC_Reduction>, 387 VersionedClause<OMPC_Allocate>, 388 VersionedClause<OMPC_NonTemporal, 50>, 389 VersionedClause<OMPC_Order, 50> 390 ]; 391 let allowedOnceClauses = [ 392 VersionedClause<OMPC_Collapse>, 393 VersionedClause<OMPC_SafeLen>, 394 VersionedClause<OMPC_SimdLen>, 395 VersionedClause<OMPC_If, 50>, 396 ]; 397} 398def OMP_Tile : Directive<"tile"> { 399 let allowedOnceClauses = [ 400 VersionedClause<OMPC_Sizes, 51>, 401 ]; 402} 403def OMP_For : Directive<"for"> { 404 let allowedClauses = [ 405 VersionedClause<OMPC_Private>, 406 VersionedClause<OMPC_LastPrivate>, 407 VersionedClause<OMPC_FirstPrivate>, 408 VersionedClause<OMPC_Reduction>, 409 VersionedClause<OMPC_Collapse>, 410 VersionedClause<OMPC_Schedule>, 411 VersionedClause<OMPC_Ordered>, 412 VersionedClause<OMPC_NoWait>, 413 VersionedClause<OMPC_Linear>, 414 VersionedClause<OMPC_Allocate>, 415 VersionedClause<OMPC_Order, 50> 416 ]; 417} 418def OMP_Do : Directive<"do"> { 419 let allowedClauses = [ 420 VersionedClause<OMPC_Private>, 421 VersionedClause<OMPC_FirstPrivate>, 422 VersionedClause<OMPC_LastPrivate>, 423 VersionedClause<OMPC_Linear>, 424 VersionedClause<OMPC_Reduction> 425 ]; 426 let allowedOnceClauses = [ 427 VersionedClause<OMPC_Schedule>, 428 VersionedClause<OMPC_Collapse>, 429 VersionedClause<OMPC_Ordered>, 430 VersionedClause<OMPC_NoWait> 431 ]; 432} 433def OMP_Sections : Directive<"sections"> { 434 let allowedClauses = [ 435 VersionedClause<OMPC_Private>, 436 VersionedClause<OMPC_LastPrivate>, 437 VersionedClause<OMPC_FirstPrivate>, 438 VersionedClause<OMPC_Reduction>, 439 VersionedClause<OMPC_NoWait>, 440 VersionedClause<OMPC_Allocate> 441 ]; 442} 443def OMP_Section : Directive<"section"> {} 444def OMP_Single : Directive<"single"> { 445 let allowedClauses = [ 446 VersionedClause<OMPC_Private>, 447 VersionedClause<OMPC_FirstPrivate>, 448 VersionedClause<OMPC_CopyPrivate>, 449 VersionedClause<OMPC_NoWait>, 450 VersionedClause<OMPC_Allocate> 451 ]; 452} 453def OMP_Master : Directive<"master"> {} 454def OMP_Critical : Directive<"critical"> { 455 let allowedClauses = [ 456 VersionedClause<OMPC_Hint> 457 ]; 458} 459def OMP_TaskYield : Directive<"taskyield"> {} 460def OMP_Barrier : Directive<"barrier"> {} 461def OMP_TaskWait : Directive<"taskwait"> { 462 let allowedClauses = [ 463 VersionedClause<OMPC_Depend, 50> 464 ]; 465} 466def OMP_TaskGroup : Directive<"taskgroup"> { 467 let allowedClauses = [ 468 VersionedClause<OMPC_TaskReduction>, 469 VersionedClause<OMPC_Allocate> 470 ]; 471} 472def OMP_Flush : Directive<"flush"> { 473 let allowedOnceClauses = [ 474 VersionedClause<OMPC_AcqRel, 50>, 475 VersionedClause<OMPC_Acquire, 50>, 476 VersionedClause<OMPC_Release, 50>, 477 // TODO This should ne `none` instead. Comment carried over from 478 // OMPKinds.def. 479 VersionedClause<OMPC_Flush> 480 ]; 481} 482def OMP_Ordered : Directive<"ordered"> { 483 let allowedClauses = [ 484 VersionedClause<OMPC_Threads>, 485 VersionedClause<OMPC_Simd>, 486 VersionedClause<OMPC_Depend> 487 ]; 488} 489def OMP_Atomic : Directive<"atomic"> { 490 let allowedClauses = [ 491 VersionedClause<OMPC_Read>, 492 VersionedClause<OMPC_Write>, 493 VersionedClause<OMPC_Update>, 494 VersionedClause<OMPC_Capture>, 495 ]; 496 let allowedOnceClauses = [ 497 VersionedClause<OMPC_SeqCst>, 498 VersionedClause<OMPC_AcqRel, 50>, 499 VersionedClause<OMPC_Acquire, 50>, 500 VersionedClause<OMPC_Release, 50>, 501 VersionedClause<OMPC_Relaxed, 50>, 502 VersionedClause<OMPC_Hint, 50> 503 ]; 504} 505def OMP_Target : Directive<"target"> { 506 let allowedClauses = [ 507 VersionedClause<OMPC_If>, 508 VersionedClause<OMPC_Map>, 509 VersionedClause<OMPC_Private>, 510 VersionedClause<OMPC_Depend>, 511 VersionedClause<OMPC_FirstPrivate>, 512 VersionedClause<OMPC_IsDevicePtr>, 513 VersionedClause<OMPC_Reduction>, 514 VersionedClause<OMPC_Allocate>, 515 VersionedClause<OMPC_UsesAllocators, 50> 516 ]; 517 let allowedOnceClauses = [ 518 VersionedClause<OMPC_Device>, 519 VersionedClause<OMPC_DefaultMap>, 520 VersionedClause<OMPC_NoWait> 521 ]; 522} 523def OMP_Teams : Directive<"teams"> { 524 let allowedClauses = [ 525 VersionedClause<OMPC_Private>, 526 VersionedClause<OMPC_FirstPrivate>, 527 VersionedClause<OMPC_Shared>, 528 VersionedClause<OMPC_Reduction>, 529 VersionedClause<OMPC_Allocate> 530 ]; 531 let allowedOnceClauses = [ 532 VersionedClause<OMPC_Default>, 533 VersionedClause<OMPC_NumTeams>, 534 VersionedClause<OMPC_ThreadLimit> 535 ]; 536} 537def OMP_Cancel : Directive<"cancel"> { 538 let allowedClauses = [ 539 VersionedClause<OMPC_If> 540 ]; 541} 542def OMP_Requires : Directive<"requires"> { 543 let allowedClauses = [ 544 VersionedClause<OMPC_UnifiedAddress>, 545 VersionedClause<OMPC_UnifiedSharedMemory>, 546 VersionedClause<OMPC_ReverseOffload>, 547 VersionedClause<OMPC_DynamicAllocators>, 548 VersionedClause<OMPC_AtomicDefaultMemOrder> 549 ]; 550} 551def OMP_TargetData : Directive<"target data"> { 552 let allowedClauses = [ 553 VersionedClause<OMPC_UseDevicePtr>, 554 VersionedClause<OMPC_UseDeviceAddr, 50> 555 ]; 556 let allowedOnceClauses = [ 557 VersionedClause<OMPC_Device>, 558 VersionedClause<OMPC_If> 559 ]; 560 let requiredClauses = [ 561 VersionedClause<OMPC_Map> 562 ]; 563} 564def OMP_TargetEnterData : Directive<"target enter data"> { 565 let allowedClauses = [ 566 VersionedClause<OMPC_Depend> 567 ]; 568 let allowedOnceClauses = [ 569 VersionedClause<OMPC_If>, 570 VersionedClause<OMPC_Device>, 571 VersionedClause<OMPC_NoWait> 572 ]; 573 let requiredClauses = [ 574 VersionedClause<OMPC_Map> 575 ]; 576} 577def OMP_TargetExitData : Directive<"target exit data"> { 578 let allowedClauses = [ 579 VersionedClause<OMPC_Depend> 580 ]; 581 let allowedOnceClauses = [ 582 VersionedClause<OMPC_Device>, 583 VersionedClause<OMPC_If>, 584 VersionedClause<OMPC_NoWait> 585 ]; 586 let requiredClauses = [ 587 VersionedClause<OMPC_Map> 588 ]; 589} 590def OMP_TargetParallel : Directive<"target parallel"> { 591 let allowedClauses = [ 592 VersionedClause<OMPC_Map>, 593 VersionedClause<OMPC_NoWait>, 594 VersionedClause<OMPC_Depend>, 595 VersionedClause<OMPC_Private>, 596 VersionedClause<OMPC_FirstPrivate>, 597 VersionedClause<OMPC_Default>, 598 VersionedClause<OMPC_Shared>, 599 VersionedClause<OMPC_Reduction>, 600 VersionedClause<OMPC_IsDevicePtr>, 601 VersionedClause<OMPC_Allocate>, 602 VersionedClause<OMPC_UsesAllocators, 50> 603 ]; 604 let allowedOnceClauses = [ 605 VersionedClause<OMPC_DefaultMap>, 606 VersionedClause<OMPC_Device>, 607 VersionedClause<OMPC_If>, 608 VersionedClause<OMPC_NumThreads>, 609 VersionedClause<OMPC_ProcBind> 610 ]; 611} 612def OMP_TargetParallelFor : Directive<"target parallel for"> { 613 let allowedClauses = [ 614 VersionedClause<OMPC_If>, 615 VersionedClause<OMPC_Device>, 616 VersionedClause<OMPC_Map>, 617 VersionedClause<OMPC_Private>, 618 VersionedClause<OMPC_FirstPrivate>, 619 VersionedClause<OMPC_LastPrivate>, 620 VersionedClause<OMPC_NoWait>, 621 VersionedClause<OMPC_Depend>, 622 VersionedClause<OMPC_DefaultMap>, 623 VersionedClause<OMPC_NumThreads>, 624 VersionedClause<OMPC_Default>, 625 VersionedClause<OMPC_ProcBind>, 626 VersionedClause<OMPC_Shared>, 627 VersionedClause<OMPC_Reduction>, 628 VersionedClause<OMPC_Collapse>, 629 VersionedClause<OMPC_Schedule>, 630 VersionedClause<OMPC_Ordered>, 631 VersionedClause<OMPC_Linear>, 632 VersionedClause<OMPC_IsDevicePtr>, 633 VersionedClause<OMPC_Allocate>, 634 VersionedClause<OMPC_Order, 50>, 635 VersionedClause<OMPC_UsesAllocators, 50> 636 ]; 637} 638def OMP_TargetParallelDo : Directive<"target parallel do"> { 639 let allowedClauses = [ 640 VersionedClause<OMPC_Map>, 641 VersionedClause<OMPC_Private>, 642 VersionedClause<OMPC_FirstPrivate>, 643 VersionedClause<OMPC_LastPrivate>, 644 VersionedClause<OMPC_Depend>, 645 VersionedClause<OMPC_Shared>, 646 VersionedClause<OMPC_Reduction>, 647 VersionedClause<OMPC_Linear>, 648 VersionedClause<OMPC_IsDevicePtr>, 649 VersionedClause<OMPC_Allocator>, 650 VersionedClause<OMPC_Order>, 651 VersionedClause<OMPC_UsesAllocators>, 652 VersionedClause<OMPC_Default>, 653 VersionedClause<OMPC_Copyin> 654 ]; 655 let allowedOnceClauses = [ 656 VersionedClause<OMPC_If>, 657 VersionedClause<OMPC_NumThreads>, 658 VersionedClause<OMPC_ProcBind>, 659 VersionedClause<OMPC_Device>, 660 VersionedClause<OMPC_DefaultMap>, 661 VersionedClause<OMPC_Schedule>, 662 VersionedClause<OMPC_Collapse>, 663 VersionedClause<OMPC_Ordered>, 664 VersionedClause<OMPC_NoWait> 665 ]; 666} 667def OMP_TargetUpdate : Directive<"target update"> { 668 let allowedClauses = [ 669 VersionedClause<OMPC_If>, 670 VersionedClause<OMPC_Device>, 671 VersionedClause<OMPC_To>, 672 VersionedClause<OMPC_From>, 673 VersionedClause<OMPC_NoWait>, 674 VersionedClause<OMPC_Depend> 675 ]; 676} 677def OMP_ParallelFor : Directive<"parallel for"> { 678 let allowedClauses = [ 679 VersionedClause<OMPC_If>, 680 VersionedClause<OMPC_NumThreads>, 681 VersionedClause<OMPC_Default>, 682 VersionedClause<OMPC_ProcBind>, 683 VersionedClause<OMPC_Private>, 684 VersionedClause<OMPC_FirstPrivate>, 685 VersionedClause<OMPC_Shared>, 686 VersionedClause<OMPC_Reduction>, 687 VersionedClause<OMPC_Copyin>, 688 VersionedClause<OMPC_LastPrivate>, 689 VersionedClause<OMPC_Collapse>, 690 VersionedClause<OMPC_Schedule>, 691 VersionedClause<OMPC_Ordered>, 692 VersionedClause<OMPC_Linear>, 693 VersionedClause<OMPC_Allocate>, 694 VersionedClause<OMPC_Order, 50> 695 ]; 696} 697def OMP_ParallelDo : Directive<"parallel do"> { 698 let allowedClauses = [ 699 VersionedClause<OMPC_Default>, 700 VersionedClause<OMPC_Private>, 701 VersionedClause<OMPC_FirstPrivate>, 702 VersionedClause<OMPC_Shared>, 703 VersionedClause<OMPC_Reduction>, 704 VersionedClause<OMPC_Copyin>, 705 VersionedClause<OMPC_LastPrivate>, 706 VersionedClause<OMPC_Linear> 707 ]; 708 let allowedOnceClauses = [ 709 VersionedClause<OMPC_If>, 710 VersionedClause<OMPC_NumThreads>, 711 VersionedClause<OMPC_ProcBind>, 712 VersionedClause<OMPC_Schedule>, 713 VersionedClause<OMPC_Ordered>, 714 VersionedClause<OMPC_Collapse> 715 ]; 716} 717def OMP_ParallelForSimd : Directive<"parallel for simd"> { 718 let allowedClauses = [ 719 VersionedClause<OMPC_If>, 720 VersionedClause<OMPC_NumThreads>, 721 VersionedClause<OMPC_Default>, 722 VersionedClause<OMPC_ProcBind>, 723 VersionedClause<OMPC_Private>, 724 VersionedClause<OMPC_FirstPrivate>, 725 VersionedClause<OMPC_Shared>, 726 VersionedClause<OMPC_Reduction>, 727 VersionedClause<OMPC_Copyin>, 728 VersionedClause<OMPC_LastPrivate>, 729 VersionedClause<OMPC_Collapse>, 730 VersionedClause<OMPC_Schedule>, 731 VersionedClause<OMPC_SafeLen>, 732 VersionedClause<OMPC_SimdLen>, 733 VersionedClause<OMPC_Linear>, 734 VersionedClause<OMPC_Aligned>, 735 VersionedClause<OMPC_Ordered>, 736 VersionedClause<OMPC_Allocate>, 737 VersionedClause<OMPC_NonTemporal, 50>, 738 VersionedClause<OMPC_Order, 50> 739 ]; 740} 741def OMP_ParallelDoSimd : Directive<"parallel do simd"> { 742 let allowedClauses = [ 743 VersionedClause<OMPC_Default>, 744 VersionedClause<OMPC_Private>, 745 VersionedClause<OMPC_FirstPrivate>, 746 VersionedClause<OMPC_Shared>, 747 VersionedClause<OMPC_Reduction>, 748 VersionedClause<OMPC_Copyin>, 749 VersionedClause<OMPC_LastPrivate>, 750 VersionedClause<OMPC_Linear>, 751 VersionedClause<OMPC_Aligned>, 752 VersionedClause<OMPC_Allocate>, 753 VersionedClause<OMPC_NonTemporal>, 754 VersionedClause<OMPC_Order> 755 ]; 756 let allowedOnceClauses = [ 757 VersionedClause<OMPC_If>, 758 VersionedClause<OMPC_NumThreads>, 759 VersionedClause<OMPC_ProcBind>, 760 VersionedClause<OMPC_Schedule>, 761 VersionedClause<OMPC_Ordered>, 762 VersionedClause<OMPC_Collapse>, 763 VersionedClause<OMPC_SafeLen>, 764 VersionedClause<OMPC_SimdLen> 765 ]; 766} 767def OMP_ParallelMaster : Directive<"parallel master"> { 768 let allowedClauses = [ 769 VersionedClause<OMPC_If>, 770 VersionedClause<OMPC_NumThreads>, 771 VersionedClause<OMPC_Default>, 772 VersionedClause<OMPC_Private>, 773 VersionedClause<OMPC_FirstPrivate>, 774 VersionedClause<OMPC_Shared>, 775 VersionedClause<OMPC_Copyin>, 776 VersionedClause<OMPC_Reduction>, 777 VersionedClause<OMPC_ProcBind>, 778 VersionedClause<OMPC_Allocate> 779 ]; 780} 781def OMP_ParallelSections : Directive<"parallel sections"> { 782 let allowedClauses = [ 783 VersionedClause<OMPC_If>, 784 VersionedClause<OMPC_Default>, 785 VersionedClause<OMPC_ProcBind>, 786 VersionedClause<OMPC_Private>, 787 VersionedClause<OMPC_FirstPrivate>, 788 VersionedClause<OMPC_Shared>, 789 VersionedClause<OMPC_Reduction>, 790 VersionedClause<OMPC_Copyin>, 791 VersionedClause<OMPC_LastPrivate>, 792 VersionedClause<OMPC_Allocate> 793 ]; 794 let allowedOnceClauses = [ 795 VersionedClause<OMPC_NumThreads> 796 ]; 797} 798def OMP_ForSimd : Directive<"for simd"> { 799 let allowedClauses = [ 800 VersionedClause<OMPC_Private>, 801 VersionedClause<OMPC_FirstPrivate>, 802 VersionedClause<OMPC_LastPrivate>, 803 VersionedClause<OMPC_Reduction>, 804 VersionedClause<OMPC_Schedule>, 805 VersionedClause<OMPC_Collapse>, 806 VersionedClause<OMPC_NoWait>, 807 VersionedClause<OMPC_SafeLen>, 808 VersionedClause<OMPC_SimdLen>, 809 VersionedClause<OMPC_Linear>, 810 VersionedClause<OMPC_Aligned>, 811 VersionedClause<OMPC_Ordered>, 812 VersionedClause<OMPC_Allocate>, 813 VersionedClause<OMPC_If, 50>, 814 VersionedClause<OMPC_NonTemporal, 50>, 815 VersionedClause<OMPC_Order, 50>, 816 ]; 817} 818def OMP_DoSimd : Directive<"do simd"> { 819 let allowedClauses = [ 820 VersionedClause<OMPC_Aligned>, 821 VersionedClause<OMPC_Private>, 822 VersionedClause<OMPC_FirstPrivate>, 823 VersionedClause<OMPC_LastPrivate>, 824 VersionedClause<OMPC_Linear>, 825 VersionedClause<OMPC_Reduction> 826 ]; 827 let allowedOnceClauses = [ 828 VersionedClause<OMPC_Schedule>, 829 VersionedClause<OMPC_Collapse>, 830 VersionedClause<OMPC_Ordered>, 831 VersionedClause<OMPC_SafeLen>, 832 VersionedClause<OMPC_SimdLen>, 833 VersionedClause<OMPC_NoWait> 834 ]; 835} 836def OMP_CancellationPoint : Directive<"cancellation point"> {} 837def OMP_DeclareReduction : Directive<"declare reduction"> {} 838def OMP_DeclareMapper : Directive<"declare mapper"> { 839 let allowedClauses = [ 840 VersionedClause<OMPC_Map> 841 ]; 842} 843def OMP_DeclareSimd : Directive<"declare simd"> { 844 let allowedClauses = [ 845 VersionedClause<OMPC_Linear>, 846 VersionedClause<OMPC_Aligned>, 847 VersionedClause<OMPC_Uniform> 848 ]; 849 let allowedOnceClauses = [ 850 VersionedClause<OMPC_SimdLen> 851 ]; 852 let allowedExclusiveClauses = [ 853 VersionedClause<OMPC_Inbranch>, 854 VersionedClause<OMPC_Notinbranch> 855 ]; 856} 857def OMP_TaskLoop : Directive<"taskloop"> { 858 let allowedClauses = [ 859 VersionedClause<OMPC_Shared>, 860 VersionedClause<OMPC_Private>, 861 VersionedClause<OMPC_FirstPrivate>, 862 VersionedClause<OMPC_LastPrivate>, 863 VersionedClause<OMPC_Untied>, 864 VersionedClause<OMPC_Mergeable>, 865 VersionedClause<OMPC_NoGroup>, 866 VersionedClause<OMPC_Reduction>, 867 VersionedClause<OMPC_InReduction>, 868 VersionedClause<OMPC_Allocate> 869 ]; 870 let allowedOnceClauses = [ 871 VersionedClause<OMPC_Default>, 872 VersionedClause<OMPC_If>, 873 VersionedClause<OMPC_Collapse>, 874 VersionedClause<OMPC_Final>, 875 VersionedClause<OMPC_Priority>, 876 ]; 877 let allowedExclusiveClauses = [ 878 VersionedClause<OMPC_GrainSize>, 879 VersionedClause<OMPC_NumTasks> 880 ]; 881} 882def OMP_TaskLoopSimd : Directive<"taskloop simd"> { 883 let allowedClauses = [ 884 VersionedClause<OMPC_Aligned>, 885 VersionedClause<OMPC_Allocate>, 886 VersionedClause<OMPC_Default>, 887 VersionedClause<OMPC_FirstPrivate>, 888 VersionedClause<OMPC_InReduction>, 889 VersionedClause<OMPC_LastPrivate>, 890 VersionedClause<OMPC_Linear>, 891 VersionedClause<OMPC_Mergeable>, 892 VersionedClause<OMPC_NoGroup>, 893 VersionedClause<OMPC_NonTemporal, 50>, 894 VersionedClause<OMPC_Order, 50>, 895 VersionedClause<OMPC_Private>, 896 VersionedClause<OMPC_Reduction>, 897 VersionedClause<OMPC_Shared>, 898 VersionedClause<OMPC_Untied> 899 ]; 900 let allowedOnceClauses = [ 901 VersionedClause<OMPC_If>, 902 VersionedClause<OMPC_Collapse>, 903 VersionedClause<OMPC_SafeLen>, 904 VersionedClause<OMPC_SimdLen>, 905 VersionedClause<OMPC_Final>, 906 VersionedClause<OMPC_Priority> 907 ]; 908 let allowedExclusiveClauses = [ 909 VersionedClause<OMPC_GrainSize>, 910 VersionedClause<OMPC_NumTasks> 911 ]; 912} 913def OMP_Distribute : Directive<"distribute"> { 914 let allowedClauses = [ 915 VersionedClause<OMPC_Private>, 916 VersionedClause<OMPC_FirstPrivate>, 917 VersionedClause<OMPC_LastPrivate>, 918 VersionedClause<OMPC_Allocate> 919 ]; 920 let allowedOnceClauses = [ 921 VersionedClause<OMPC_Collapse>, 922 VersionedClause<OMPC_DistSchedule> 923 ]; 924} 925def OMP_BeginDeclareTarget : Directive<"begin declare target"> { 926 let allowedClauses = [ 927 VersionedClause<OMPC_To>, 928 VersionedClause<OMPC_Link>, 929 VersionedClause<OMPC_DeviceType>, 930 ]; 931} 932def OMP_DeclareTarget : Directive<"declare target"> { 933 let allowedClauses = [ 934 VersionedClause<OMPC_To>, 935 VersionedClause<OMPC_Link> 936 ]; 937} 938def OMP_EndDeclareTarget : Directive<"end declare target"> {} 939def OMP_DistributeParallelFor : Directive<"distribute parallel for"> { 940 let allowedClauses = [ 941 VersionedClause<OMPC_FirstPrivate>, 942 VersionedClause<OMPC_LastPrivate>, 943 VersionedClause<OMPC_Collapse>, 944 VersionedClause<OMPC_DistSchedule>, 945 VersionedClause<OMPC_If>, 946 VersionedClause<OMPC_NumThreads>, 947 VersionedClause<OMPC_Default>, 948 VersionedClause<OMPC_ProcBind>, 949 VersionedClause<OMPC_Private>, 950 VersionedClause<OMPC_Shared>, 951 VersionedClause<OMPC_Reduction>, 952 VersionedClause<OMPC_Copyin>, 953 VersionedClause<OMPC_Schedule>, 954 VersionedClause<OMPC_Allocate>, 955 VersionedClause<OMPC_Order, 50> 956 ]; 957} 958def OMP_DistributeParallelDo : Directive<"distribute parallel do"> { 959 let allowedClauses = [ 960 VersionedClause<OMPC_Private>, 961 VersionedClause<OMPC_FirstPrivate>, 962 VersionedClause<OMPC_LastPrivate>, 963 VersionedClause<OMPC_Allocate>, 964 VersionedClause<OMPC_Order>, 965 VersionedClause<OMPC_Default>, 966 VersionedClause<OMPC_Shared>, 967 VersionedClause<OMPC_Reduction>, 968 VersionedClause<OMPC_Copyin>, 969 VersionedClause<OMPC_Linear> 970 ]; 971 let allowedOnceClauses = [ 972 VersionedClause<OMPC_Collapse>, 973 VersionedClause<OMPC_DistSchedule>, 974 VersionedClause<OMPC_If>, 975 VersionedClause<OMPC_NumThreads>, 976 VersionedClause<OMPC_ProcBind>, 977 VersionedClause<OMPC_Schedule>, 978 VersionedClause<OMPC_Ordered> 979 ]; 980} 981def OMP_DistributeParallelForSimd : Directive<"distribute parallel for simd"> { 982 let allowedClauses = [ 983 VersionedClause<OMPC_FirstPrivate>, 984 VersionedClause<OMPC_LastPrivate>, 985 VersionedClause<OMPC_Collapse>, 986 VersionedClause<OMPC_DistSchedule>, 987 VersionedClause<OMPC_If>, 988 VersionedClause<OMPC_NumThreads>, 989 VersionedClause<OMPC_Default>, 990 VersionedClause<OMPC_ProcBind>, 991 VersionedClause<OMPC_Private>, 992 VersionedClause<OMPC_Shared>, 993 VersionedClause<OMPC_Reduction>, 994 VersionedClause<OMPC_Copyin>, 995 VersionedClause<OMPC_Schedule>, 996 VersionedClause<OMPC_Linear>, 997 VersionedClause<OMPC_Aligned>, 998 VersionedClause<OMPC_SafeLen>, 999 VersionedClause<OMPC_SimdLen>, 1000 VersionedClause<OMPC_Allocate>, 1001 VersionedClause<OMPC_NonTemporal, 50>, 1002 VersionedClause<OMPC_Order, 50> 1003 ]; 1004} 1005def OMP_DistributeParallelDoSimd : Directive<"distribute parallel do simd"> { 1006 let allowedClauses = [ 1007 VersionedClause<OMPC_FirstPrivate>, 1008 VersionedClause<OMPC_LastPrivate>, 1009 VersionedClause<OMPC_Collapse>, 1010 VersionedClause<OMPC_DistSchedule>, 1011 VersionedClause<OMPC_If>, 1012 VersionedClause<OMPC_NumThreads>, 1013 VersionedClause<OMPC_Default>, 1014 VersionedClause<OMPC_ProcBind>, 1015 VersionedClause<OMPC_Private>, 1016 VersionedClause<OMPC_Shared>, 1017 VersionedClause<OMPC_Reduction>, 1018 VersionedClause<OMPC_Copyin>, 1019 VersionedClause<OMPC_Schedule>, 1020 VersionedClause<OMPC_Linear>, 1021 VersionedClause<OMPC_Aligned>, 1022 VersionedClause<OMPC_SafeLen>, 1023 VersionedClause<OMPC_SimdLen>, 1024 VersionedClause<OMPC_Allocate>, 1025 VersionedClause<OMPC_NonTemporal>, 1026 VersionedClause<OMPC_Order> 1027 ]; 1028} 1029def OMP_DistributeSimd : Directive<"distribute simd"> { 1030 let allowedClauses = [ 1031 VersionedClause<OMPC_Aligned>, 1032 VersionedClause<OMPC_Allocate>, 1033 VersionedClause<OMPC_Copyin>, 1034 VersionedClause<OMPC_Default>, 1035 VersionedClause<OMPC_Linear>, 1036 VersionedClause<OMPC_FirstPrivate>, 1037 VersionedClause<OMPC_LastPrivate>, 1038 VersionedClause<OMPC_NonTemporal, 50>, 1039 VersionedClause<OMPC_Order, 50>, 1040 VersionedClause<OMPC_Private>, 1041 VersionedClause<OMPC_Reduction> 1042 ]; 1043 let allowedOnceClauses = [ 1044 VersionedClause<OMPC_Collapse>, 1045 VersionedClause<OMPC_DistSchedule>, 1046 VersionedClause<OMPC_If, 50>, 1047 VersionedClause<OMPC_NumThreads>, 1048 VersionedClause<OMPC_Ordered>, 1049 VersionedClause<OMPC_ProcBind>, 1050 VersionedClause<OMPC_Schedule>, 1051 VersionedClause<OMPC_SafeLen>, 1052 VersionedClause<OMPC_SimdLen> 1053 ]; 1054} 1055 1056def OMP_TargetParallelForSimd : Directive<"target parallel for simd"> { 1057 let allowedClauses = [ 1058 VersionedClause<OMPC_If>, 1059 VersionedClause<OMPC_Device>, 1060 VersionedClause<OMPC_Map>, 1061 VersionedClause<OMPC_Private>, 1062 VersionedClause<OMPC_FirstPrivate>, 1063 VersionedClause<OMPC_LastPrivate>, 1064 VersionedClause<OMPC_NoWait>, 1065 VersionedClause<OMPC_Depend>, 1066 VersionedClause<OMPC_DefaultMap>, 1067 VersionedClause<OMPC_NumThreads>, 1068 VersionedClause<OMPC_Default>, 1069 VersionedClause<OMPC_ProcBind>, 1070 VersionedClause<OMPC_Shared>, 1071 VersionedClause<OMPC_Reduction>, 1072 VersionedClause<OMPC_Collapse>, 1073 VersionedClause<OMPC_Schedule>, 1074 VersionedClause<OMPC_Ordered>, 1075 VersionedClause<OMPC_Linear>, 1076 VersionedClause<OMPC_SafeLen>, 1077 VersionedClause<OMPC_SimdLen>, 1078 VersionedClause<OMPC_Aligned>, 1079 VersionedClause<OMPC_IsDevicePtr>, 1080 VersionedClause<OMPC_Allocate>, 1081 VersionedClause<OMPC_NonTemporal, 50>, 1082 VersionedClause<OMPC_Order, 50>, 1083 VersionedClause<OMPC_UsesAllocators, 50> 1084 ]; 1085} 1086def OMP_TargetParallelDoSimd : Directive<"target parallel do simd"> { 1087 let allowedClauses = [ 1088 VersionedClause<OMPC_If>, 1089 VersionedClause<OMPC_Device>, 1090 VersionedClause<OMPC_Map>, 1091 VersionedClause<OMPC_Private>, 1092 VersionedClause<OMPC_FirstPrivate>, 1093 VersionedClause<OMPC_LastPrivate>, 1094 VersionedClause<OMPC_NoWait>, 1095 VersionedClause<OMPC_Depend>, 1096 VersionedClause<OMPC_DefaultMap>, 1097 VersionedClause<OMPC_NumThreads>, 1098 VersionedClause<OMPC_Default>, 1099 VersionedClause<OMPC_ProcBind>, 1100 VersionedClause<OMPC_Shared>, 1101 VersionedClause<OMPC_Reduction>, 1102 VersionedClause<OMPC_Collapse>, 1103 VersionedClause<OMPC_Schedule>, 1104 VersionedClause<OMPC_Ordered>, 1105 VersionedClause<OMPC_Linear>, 1106 VersionedClause<OMPC_SafeLen>, 1107 VersionedClause<OMPC_SimdLen>, 1108 VersionedClause<OMPC_Aligned>, 1109 VersionedClause<OMPC_IsDevicePtr>, 1110 VersionedClause<OMPC_Allocate>, 1111 VersionedClause<OMPC_NonTemporal>, 1112 VersionedClause<OMPC_Order>, 1113 VersionedClause<OMPC_UsesAllocators> 1114 ]; 1115} 1116def OMP_TargetSimd : Directive<"target simd"> { 1117 let allowedClauses = [ 1118 VersionedClause<OMPC_Aligned>, 1119 VersionedClause<OMPC_Allocate>, 1120 VersionedClause<OMPC_Depend>, 1121 VersionedClause<OMPC_FirstPrivate>, 1122 VersionedClause<OMPC_IsDevicePtr>, 1123 VersionedClause<OMPC_LastPrivate>, 1124 VersionedClause<OMPC_Linear>, 1125 VersionedClause<OMPC_Map>, 1126 VersionedClause<OMPC_NonTemporal, 50>, 1127 VersionedClause<OMPC_NoWait>, 1128 VersionedClause<OMPC_Order, 50>, 1129 VersionedClause<OMPC_Private>, 1130 VersionedClause<OMPC_Reduction>, 1131 VersionedClause<OMPC_Shared>, 1132 VersionedClause<OMPC_UsesAllocators, 50> 1133 ]; 1134 let allowedOnceClauses = [ 1135 VersionedClause<OMPC_Collapse>, 1136 VersionedClause<OMPC_SafeLen>, 1137 VersionedClause<OMPC_SimdLen>, 1138 VersionedClause<OMPC_If>, 1139 VersionedClause<OMPC_NumThreads>, 1140 VersionedClause<OMPC_ProcBind>, 1141 VersionedClause<OMPC_Device>, 1142 VersionedClause<OMPC_DefaultMap>, 1143 VersionedClause<OMPC_Schedule> 1144 ]; 1145} 1146def OMP_TeamsDistribute : Directive<"teams distribute"> { 1147 let allowedClauses = [ 1148 VersionedClause<OMPC_Default>, 1149 VersionedClause<OMPC_Private>, 1150 VersionedClause<OMPC_FirstPrivate>, 1151 VersionedClause<OMPC_Shared>, 1152 VersionedClause<OMPC_Reduction>, 1153 VersionedClause<OMPC_NumTeams>, 1154 VersionedClause<OMPC_ThreadLimit>, 1155 VersionedClause<OMPC_LastPrivate>, 1156 VersionedClause<OMPC_Collapse>, 1157 VersionedClause<OMPC_DistSchedule>, 1158 VersionedClause<OMPC_Allocate> 1159 ]; 1160} 1161def OMP_TeamsDistributeSimd : Directive<"teams distribute simd"> { 1162 let allowedClauses = [ 1163 VersionedClause<OMPC_Aligned>, 1164 VersionedClause<OMPC_Allocate>, 1165 VersionedClause<OMPC_FirstPrivate>, 1166 VersionedClause<OMPC_LastPrivate>, 1167 VersionedClause<OMPC_Linear>, 1168 VersionedClause<OMPC_NonTemporal, 50>, 1169 VersionedClause<OMPC_Order, 50>, 1170 VersionedClause<OMPC_Private>, 1171 VersionedClause<OMPC_Reduction>, 1172 VersionedClause<OMPC_Shared> 1173 ]; 1174 let allowedOnceClauses = [ 1175 VersionedClause<OMPC_Collapse>, 1176 VersionedClause<OMPC_Default>, 1177 VersionedClause<OMPC_DistSchedule>, 1178 VersionedClause<OMPC_If, 50>, 1179 VersionedClause<OMPC_NumTeams>, 1180 VersionedClause<OMPC_SafeLen>, 1181 VersionedClause<OMPC_SimdLen>, 1182 VersionedClause<OMPC_ThreadLimit> 1183 ]; 1184} 1185 1186def OMP_TeamsDistributeParallelForSimd : 1187 Directive<"teams distribute parallel for simd"> { 1188 let allowedClauses = [ 1189 VersionedClause<OMPC_FirstPrivate>, 1190 VersionedClause<OMPC_LastPrivate>, 1191 VersionedClause<OMPC_Collapse>, 1192 VersionedClause<OMPC_DistSchedule>, 1193 VersionedClause<OMPC_If>, 1194 VersionedClause<OMPC_NumThreads>, 1195 VersionedClause<OMPC_Default>, 1196 VersionedClause<OMPC_ProcBind>, 1197 VersionedClause<OMPC_Private>, 1198 VersionedClause<OMPC_Shared>, 1199 VersionedClause<OMPC_Reduction>, 1200 VersionedClause<OMPC_Schedule>, 1201 VersionedClause<OMPC_Linear>, 1202 VersionedClause<OMPC_Aligned>, 1203 VersionedClause<OMPC_SafeLen>, 1204 VersionedClause<OMPC_SimdLen>, 1205 VersionedClause<OMPC_NumTeams>, 1206 VersionedClause<OMPC_ThreadLimit>, 1207 VersionedClause<OMPC_Allocate>, 1208 VersionedClause<OMPC_NonTemporal, 50>, 1209 VersionedClause<OMPC_Order, 50> 1210 ]; 1211} 1212def OMP_TeamsDistributeParallelDoSimd : 1213 Directive<"teams distribute parallel do simd"> { 1214 let allowedClauses = [ 1215 VersionedClause<OMPC_Private>, 1216 VersionedClause<OMPC_FirstPrivate>, 1217 VersionedClause<OMPC_LastPrivate>, 1218 VersionedClause<OMPC_Allocate>, 1219 VersionedClause<OMPC_Shared>, 1220 VersionedClause<OMPC_Reduction>, 1221 VersionedClause<OMPC_Linear>, 1222 VersionedClause<OMPC_Order>, 1223 VersionedClause<OMPC_Aligned>, 1224 VersionedClause<OMPC_NonTemporal> 1225 ]; 1226 let allowedOnceClauses = [ 1227 VersionedClause<OMPC_Default>, 1228 VersionedClause<OMPC_NumTeams>, 1229 VersionedClause<OMPC_ThreadLimit>, 1230 VersionedClause<OMPC_Collapse>, 1231 VersionedClause<OMPC_DistSchedule>, 1232 VersionedClause<OMPC_NumThreads>, 1233 VersionedClause<OMPC_ProcBind>, 1234 VersionedClause<OMPC_Schedule>, 1235 VersionedClause<OMPC_SafeLen>, 1236 VersionedClause<OMPC_SimdLen>, 1237 VersionedClause<OMPC_If>, 1238 ]; 1239} 1240def OMP_TeamsDistributeParallelFor : 1241 Directive<"teams distribute parallel for"> { 1242 let allowedClauses = [ 1243 VersionedClause<OMPC_FirstPrivate>, 1244 VersionedClause<OMPC_LastPrivate>, 1245 VersionedClause<OMPC_Collapse>, 1246 VersionedClause<OMPC_DistSchedule>, 1247 VersionedClause<OMPC_If>, 1248 VersionedClause<OMPC_NumThreads>, 1249 VersionedClause<OMPC_Default>, 1250 VersionedClause<OMPC_ProcBind>, 1251 VersionedClause<OMPC_Private>, 1252 VersionedClause<OMPC_Shared>, 1253 VersionedClause<OMPC_Reduction>, 1254 VersionedClause<OMPC_Schedule>, 1255 VersionedClause<OMPC_NumTeams>, 1256 VersionedClause<OMPC_ThreadLimit>, 1257 VersionedClause<OMPC_Copyin>, 1258 VersionedClause<OMPC_Allocate>, 1259 VersionedClause<OMPC_Order, 50> 1260 ]; 1261} 1262def OMP_TeamsDistributeParallelDo : 1263 Directive<"teams distribute parallel do"> { 1264 let allowedClauses = [ 1265 VersionedClause<OMPC_Private>, 1266 VersionedClause<OMPC_FirstPrivate>, 1267 VersionedClause<OMPC_LastPrivate>, 1268 VersionedClause<OMPC_Shared>, 1269 VersionedClause<OMPC_Reduction>, 1270 VersionedClause<OMPC_Allocate>, 1271 VersionedClause<OMPC_Copyin>, 1272 VersionedClause<OMPC_Linear> 1273 ]; 1274let allowedOnceClauses = [ 1275 VersionedClause<OMPC_NumTeams>, 1276 VersionedClause<OMPC_ThreadLimit>, 1277 VersionedClause<OMPC_Default>, 1278 VersionedClause<OMPC_Collapse>, 1279 VersionedClause<OMPC_DistSchedule>, 1280 VersionedClause<OMPC_Ordered>, 1281 VersionedClause<OMPC_Order>, 1282 VersionedClause<OMPC_If>, 1283 VersionedClause<OMPC_NumThreads>, 1284 VersionedClause<OMPC_ProcBind>, 1285 VersionedClause<OMPC_Schedule> 1286 ]; 1287} 1288def OMP_TargetTeams : Directive<"target teams"> { 1289 let allowedClauses = [ 1290 VersionedClause<OMPC_If>, 1291 VersionedClause<OMPC_Map>, 1292 VersionedClause<OMPC_Private>, 1293 VersionedClause<OMPC_Depend>, 1294 VersionedClause<OMPC_FirstPrivate>, 1295 VersionedClause<OMPC_IsDevicePtr>, 1296 VersionedClause<OMPC_Reduction>, 1297 VersionedClause<OMPC_Allocate>, 1298 VersionedClause<OMPC_UsesAllocators, 50>, 1299 VersionedClause<OMPC_Shared> 1300 ]; 1301 1302 let allowedOnceClauses = [ 1303 VersionedClause<OMPC_Device>, 1304 VersionedClause<OMPC_NoWait>, 1305 VersionedClause<OMPC_DefaultMap>, 1306 VersionedClause<OMPC_Default>, 1307 VersionedClause<OMPC_NumTeams>, 1308 VersionedClause<OMPC_ThreadLimit> 1309 ]; 1310} 1311def OMP_TargetTeamsDistribute : Directive<"target teams distribute"> { 1312 let allowedClauses = [ 1313 VersionedClause<OMPC_If>, 1314 VersionedClause<OMPC_Map>, 1315 VersionedClause<OMPC_Private>, 1316 VersionedClause<OMPC_Depend>, 1317 VersionedClause<OMPC_FirstPrivate>, 1318 VersionedClause<OMPC_IsDevicePtr>, 1319 VersionedClause<OMPC_Reduction>, 1320 VersionedClause<OMPC_Allocate>, 1321 VersionedClause<OMPC_UsesAllocators, 50>, 1322 VersionedClause<OMPC_Shared>, 1323 VersionedClause<OMPC_LastPrivate> 1324 ]; 1325 let allowedOnceClauses = [ 1326 VersionedClause<OMPC_Device>, 1327 VersionedClause<OMPC_NoWait>, 1328 VersionedClause<OMPC_DefaultMap>, 1329 VersionedClause<OMPC_Default>, 1330 VersionedClause<OMPC_NumTeams>, 1331 VersionedClause<OMPC_ThreadLimit>, 1332 VersionedClause<OMPC_Collapse>, 1333 VersionedClause<OMPC_DistSchedule> 1334 ]; 1335} 1336 1337def OMP_TargetTeamsDistributeParallelFor : 1338 Directive<"target teams distribute parallel for"> { 1339 let allowedClauses = [ 1340 VersionedClause<OMPC_If>, 1341 VersionedClause<OMPC_Device>, 1342 VersionedClause<OMPC_Map>, 1343 VersionedClause<OMPC_Private>, 1344 VersionedClause<OMPC_NoWait>, 1345 VersionedClause<OMPC_Depend>, 1346 VersionedClause<OMPC_DefaultMap>, 1347 VersionedClause<OMPC_FirstPrivate>, 1348 VersionedClause<OMPC_IsDevicePtr>, 1349 VersionedClause<OMPC_Default>, 1350 VersionedClause<OMPC_Shared>, 1351 VersionedClause<OMPC_Reduction>, 1352 VersionedClause<OMPC_NumTeams>, 1353 VersionedClause<OMPC_ThreadLimit>, 1354 VersionedClause<OMPC_LastPrivate>, 1355 VersionedClause<OMPC_Collapse>, 1356 VersionedClause<OMPC_DistSchedule>, 1357 VersionedClause<OMPC_NumThreads>, 1358 VersionedClause<OMPC_ProcBind>, 1359 VersionedClause<OMPC_Schedule>, 1360 VersionedClause<OMPC_Allocate>, 1361 VersionedClause<OMPC_Order, 50>, 1362 VersionedClause<OMPC_UsesAllocators, 50> 1363 ]; 1364} 1365def OMP_TargetTeamsDistributeParallelDo : 1366 Directive<"target teams distribute parallel do"> { 1367 let allowedClauses = [ 1368 VersionedClause<OMPC_If>, 1369 VersionedClause<OMPC_Map>, 1370 VersionedClause<OMPC_Private>, 1371 VersionedClause<OMPC_Depend>, 1372 VersionedClause<OMPC_FirstPrivate>, 1373 VersionedClause<OMPC_IsDevicePtr>, 1374 VersionedClause<OMPC_Reduction>, 1375 VersionedClause<OMPC_Allocate>, 1376 VersionedClause<OMPC_UsesAllocators>, 1377 VersionedClause<OMPC_Shared>, 1378 VersionedClause<OMPC_LastPrivate>, 1379 VersionedClause<OMPC_Copyin>, 1380 VersionedClause<OMPC_Linear>, 1381 VersionedClause<OMPC_Ordered>, 1382 VersionedClause<OMPC_Order> 1383 ]; 1384 let allowedOnceClauses = [ 1385 VersionedClause<OMPC_Device>, 1386 VersionedClause<OMPC_DefaultMap>, 1387 VersionedClause<OMPC_NoWait>, 1388 VersionedClause<OMPC_Default>, 1389 VersionedClause<OMPC_NumTeams>, 1390 VersionedClause<OMPC_ThreadLimit>, 1391 VersionedClause<OMPC_Collapse>, 1392 VersionedClause<OMPC_DistSchedule>, 1393 VersionedClause<OMPC_NumThreads>, 1394 VersionedClause<OMPC_ProcBind>, 1395 VersionedClause<OMPC_Schedule>, 1396 ]; 1397} 1398def OMP_TargetTeamsDistributeParallelForSimd : 1399 Directive<"target teams distribute parallel for simd"> { 1400 let allowedClauses = [ 1401 VersionedClause<OMPC_If>, 1402 VersionedClause<OMPC_Device>, 1403 VersionedClause<OMPC_Map>, 1404 VersionedClause<OMPC_Private>, 1405 VersionedClause<OMPC_NoWait>, 1406 VersionedClause<OMPC_Depend>, 1407 VersionedClause<OMPC_DefaultMap>, 1408 VersionedClause<OMPC_FirstPrivate>, 1409 VersionedClause<OMPC_IsDevicePtr>, 1410 VersionedClause<OMPC_Default>, 1411 VersionedClause<OMPC_Shared>, 1412 VersionedClause<OMPC_Reduction>, 1413 VersionedClause<OMPC_NumTeams>, 1414 VersionedClause<OMPC_ThreadLimit>, 1415 VersionedClause<OMPC_LastPrivate>, 1416 VersionedClause<OMPC_Collapse>, 1417 VersionedClause<OMPC_DistSchedule>, 1418 VersionedClause<OMPC_NumThreads>, 1419 VersionedClause<OMPC_ProcBind>, 1420 VersionedClause<OMPC_Schedule>, 1421 VersionedClause<OMPC_Linear>, 1422 VersionedClause<OMPC_Aligned>, 1423 VersionedClause<OMPC_SafeLen>, 1424 VersionedClause<OMPC_SimdLen>, 1425 VersionedClause<OMPC_Allocate>, 1426 VersionedClause<OMPC_NonTemporal, 50>, 1427 VersionedClause<OMPC_Order, 50>, 1428 VersionedClause<OMPC_UsesAllocators, 50> 1429 ]; 1430} 1431def OMP_TargetTeamsDistributeParallelDoSimd : 1432 Directive<"target teams distribute parallel do simd"> { 1433 let allowedClauses = [ 1434 VersionedClause<OMPC_Map>, 1435 VersionedClause<OMPC_Private>, 1436 VersionedClause<OMPC_Depend>, 1437 VersionedClause<OMPC_FirstPrivate>, 1438 VersionedClause<OMPC_IsDevicePtr>, 1439 VersionedClause<OMPC_Reduction>, 1440 VersionedClause<OMPC_Allocate>, 1441 VersionedClause<OMPC_UsesAllocators>, 1442 VersionedClause<OMPC_Shared>, 1443 VersionedClause<OMPC_LastPrivate>, 1444 VersionedClause<OMPC_Copyin>, 1445 VersionedClause<OMPC_Linear>, 1446 VersionedClause<OMPC_Ordered>, 1447 VersionedClause<OMPC_Order>, 1448 VersionedClause<OMPC_Aligned>, 1449 VersionedClause<OMPC_NonTemporal> 1450 ]; 1451 let allowedOnceClauses = [ 1452 VersionedClause<OMPC_If>, 1453 VersionedClause<OMPC_Device>, 1454 VersionedClause<OMPC_NoWait>, 1455 VersionedClause<OMPC_DefaultMap>, 1456 VersionedClause<OMPC_Default>, 1457 VersionedClause<OMPC_NumTeams>, 1458 VersionedClause<OMPC_ThreadLimit>, 1459 VersionedClause<OMPC_Collapse>, 1460 VersionedClause<OMPC_DistSchedule>, 1461 VersionedClause<OMPC_NumThreads>, 1462 VersionedClause<OMPC_ProcBind>, 1463 VersionedClause<OMPC_Schedule>, 1464 VersionedClause<OMPC_SafeLen>, 1465 VersionedClause<OMPC_SimdLen> 1466 ]; 1467} 1468def OMP_TargetTeamsDistributeSimd : 1469 Directive<"target teams distribute simd"> { 1470 let allowedClauses = [ 1471 VersionedClause<OMPC_Aligned>, 1472 VersionedClause<OMPC_Allocate>, 1473 VersionedClause<OMPC_Depend>, 1474 VersionedClause<OMPC_FirstPrivate>, 1475 VersionedClause<OMPC_If>, 1476 VersionedClause<OMPC_IsDevicePtr>, 1477 VersionedClause<OMPC_LastPrivate>, 1478 VersionedClause<OMPC_Linear>, 1479 VersionedClause<OMPC_Map>, 1480 VersionedClause<OMPC_NonTemporal, 50>, 1481 VersionedClause<OMPC_Order, 50>, 1482 VersionedClause<OMPC_Private>, 1483 VersionedClause<OMPC_Reduction>, 1484 VersionedClause<OMPC_Shared>, 1485 VersionedClause<OMPC_UsesAllocators, 50> 1486 ]; 1487 let allowedOnceClauses = [ 1488 VersionedClause<OMPC_Device>, 1489 VersionedClause<OMPC_DefaultMap>, 1490 VersionedClause<OMPC_NoWait>, 1491 VersionedClause<OMPC_NumTeams>, 1492 VersionedClause<OMPC_ThreadLimit>, 1493 VersionedClause<OMPC_Collapse>, 1494 VersionedClause<OMPC_DistSchedule>, 1495 VersionedClause<OMPC_SafeLen>, 1496 VersionedClause<OMPC_SimdLen>, 1497 ]; 1498} 1499def OMP_Allocate : Directive<"allocate"> { 1500 let allowedOnceClauses = [ 1501 VersionedClause<OMPC_Allocator> 1502 ]; 1503} 1504def OMP_DeclareVariant : Directive<"declare variant"> { 1505 let allowedClauses = [ 1506 VersionedClause<OMPC_Match> 1507 ]; 1508} 1509def OMP_MasterTaskloop : Directive<"master taskloop"> { 1510 let allowedClauses = [ 1511 VersionedClause<OMPC_If>, 1512 VersionedClause<OMPC_Shared>, 1513 VersionedClause<OMPC_Private>, 1514 VersionedClause<OMPC_FirstPrivate>, 1515 VersionedClause<OMPC_LastPrivate>, 1516 VersionedClause<OMPC_Default>, 1517 VersionedClause<OMPC_Collapse>, 1518 VersionedClause<OMPC_Final>, 1519 VersionedClause<OMPC_Untied>, 1520 VersionedClause<OMPC_Mergeable>, 1521 VersionedClause<OMPC_Priority>, 1522 VersionedClause<OMPC_GrainSize>, 1523 VersionedClause<OMPC_NoGroup>, 1524 VersionedClause<OMPC_NumTasks>, 1525 VersionedClause<OMPC_Reduction>, 1526 VersionedClause<OMPC_InReduction>, 1527 VersionedClause<OMPC_Allocate> 1528 ]; 1529} 1530def OMP_ParallelMasterTaskloop : 1531 Directive<"parallel master taskloop"> { 1532 let allowedClauses = [ 1533 VersionedClause<OMPC_If>, 1534 VersionedClause<OMPC_Shared>, 1535 VersionedClause<OMPC_Private>, 1536 VersionedClause<OMPC_FirstPrivate>, 1537 VersionedClause<OMPC_LastPrivate>, 1538 VersionedClause<OMPC_Default>, 1539 VersionedClause<OMPC_Collapse>, 1540 VersionedClause<OMPC_Final>, 1541 VersionedClause<OMPC_Untied>, 1542 VersionedClause<OMPC_Mergeable>, 1543 VersionedClause<OMPC_Priority>, 1544 VersionedClause<OMPC_GrainSize>, 1545 VersionedClause<OMPC_NoGroup>, 1546 VersionedClause<OMPC_NumTasks>, 1547 VersionedClause<OMPC_Reduction>, 1548 VersionedClause<OMPC_Allocate>, 1549 VersionedClause<OMPC_NumThreads>, 1550 VersionedClause<OMPC_ProcBind>, 1551 VersionedClause<OMPC_Copyin> 1552 ]; 1553} 1554def OMP_MasterTaskloopSimd : Directive<"master taskloop simd"> { 1555 let allowedClauses = [ 1556 VersionedClause<OMPC_If>, 1557 VersionedClause<OMPC_Shared>, 1558 VersionedClause<OMPC_Private>, 1559 VersionedClause<OMPC_FirstPrivate>, 1560 VersionedClause<OMPC_LastPrivate>, 1561 VersionedClause<OMPC_Default>, 1562 VersionedClause<OMPC_Collapse>, 1563 VersionedClause<OMPC_Final>, 1564 VersionedClause<OMPC_Untied>, 1565 VersionedClause<OMPC_Mergeable>, 1566 VersionedClause<OMPC_Priority>, 1567 VersionedClause<OMPC_Linear>, 1568 VersionedClause<OMPC_Aligned>, 1569 VersionedClause<OMPC_SafeLen>, 1570 VersionedClause<OMPC_SimdLen>, 1571 VersionedClause<OMPC_GrainSize>, 1572 VersionedClause<OMPC_NoGroup>, 1573 VersionedClause<OMPC_NumTasks>, 1574 VersionedClause<OMPC_Reduction>, 1575 VersionedClause<OMPC_InReduction>, 1576 VersionedClause<OMPC_Allocate>, 1577 VersionedClause<OMPC_NonTemporal, 50>, 1578 VersionedClause<OMPC_Order, 50> 1579 ]; 1580} 1581def OMP_ParallelMasterTaskloopSimd : 1582 Directive<"parallel master taskloop simd"> { 1583 let allowedClauses = [ 1584 VersionedClause<OMPC_If>, 1585 VersionedClause<OMPC_Shared>, 1586 VersionedClause<OMPC_Private>, 1587 VersionedClause<OMPC_FirstPrivate>, 1588 VersionedClause<OMPC_LastPrivate>, 1589 VersionedClause<OMPC_Default>, 1590 VersionedClause<OMPC_Collapse>, 1591 VersionedClause<OMPC_Final>, 1592 VersionedClause<OMPC_Untied>, 1593 VersionedClause<OMPC_Mergeable>, 1594 VersionedClause<OMPC_Priority>, 1595 VersionedClause<OMPC_GrainSize>, 1596 VersionedClause<OMPC_NoGroup>, 1597 VersionedClause<OMPC_NumTasks>, 1598 VersionedClause<OMPC_Reduction>, 1599 VersionedClause<OMPC_Allocate>, 1600 VersionedClause<OMPC_NumThreads>, 1601 VersionedClause<OMPC_ProcBind>, 1602 VersionedClause<OMPC_Copyin>, 1603 VersionedClause<OMPC_Linear>, 1604 VersionedClause<OMPC_Aligned>, 1605 VersionedClause<OMPC_SafeLen>, 1606 VersionedClause<OMPC_SimdLen>, 1607 VersionedClause<OMPC_NonTemporal, 50>, 1608 VersionedClause<OMPC_Order, 50> 1609 ]; 1610} 1611def OMP_Depobj : Directive<"depobj"> { 1612 let allowedClauses = [ 1613 VersionedClause<OMPC_Depend, 50>, 1614 VersionedClause<OMPC_Destroy, 50>, 1615 VersionedClause<OMPC_Update, 50>, 1616 // TODO This should ne `none` instead. Comment carried over from 1617 // OMPKinds.def. 1618 VersionedClause<OMPC_Depobj, 50> 1619 ]; 1620} 1621def OMP_Scan : Directive<"scan"> { 1622 let allowedClauses = [ 1623 VersionedClause<OMPC_Inclusive, 50>, 1624 VersionedClause<OMPC_Exclusive, 50> 1625 ]; 1626} 1627def OMP_Assumes : Directive<"assumes"> {} 1628def OMP_BeginAssumes : Directive<"begin assumes"> {} 1629def OMP_EndAssumes : Directive<"end assumes"> {} 1630def OMP_BeginDeclareVariant : Directive<"begin declare variant"> {} 1631def OMP_EndDeclareVariant : Directive<"end declare variant"> {} 1632def OMP_ParallelWorkshare : Directive<"parallel workshare"> { 1633 let allowedClauses = [ 1634 VersionedClause<OMPC_Allocate>, 1635 VersionedClause<OMPC_Copyin>, 1636 VersionedClause<OMPC_Default>, 1637 VersionedClause<OMPC_FirstPrivate>, 1638 VersionedClause<OMPC_Private>, 1639 VersionedClause<OMPC_Reduction>, 1640 VersionedClause<OMPC_Shared> 1641 ]; 1642 let allowedOnceClauses = [ 1643 VersionedClause<OMPC_If>, 1644 VersionedClause<OMPC_NumThreads>, 1645 VersionedClause<OMPC_ProcBind> 1646 ]; 1647} 1648def OMP_Workshare : Directive<"workshare"> {} 1649def OMP_EndDo : Directive<"end do"> {} 1650def OMP_EndDoSimd : Directive<"end do simd"> {} 1651def OMP_EndSections : Directive<"end sections"> { 1652 let allowedOnceClauses = [ 1653 VersionedClause<OMPC_NoWait> 1654 ]; 1655} 1656def OMP_EndSingle : Directive<"end single"> { 1657 let allowedClauses = [ 1658 VersionedClause<OMPC_CopyPrivate> 1659 ]; 1660 let allowedOnceClauses = [ 1661 VersionedClause<OMPC_NoWait> 1662 ]; 1663} 1664def OMP_EndWorkshare : Directive<"end workshare"> { 1665 let allowedClauses = [ 1666 VersionedClause<OMPC_NoWait> 1667 ]; 1668} 1669def OMP_interop : Directive<"interop"> { 1670 let allowedClauses = [ 1671 VersionedClause<OMPC_Device>, 1672 VersionedClause<OMPC_Depend>, 1673 VersionedClause<OMPC_Destroy>, 1674 VersionedClause<OMPC_Init>, 1675 VersionedClause<OMPC_NoWait>, 1676 VersionedClause<OMPC_Use>, 1677 ]; 1678} 1679def OMP_dispatch : Directive<"dispatch"> { 1680 let allowedClauses = [ 1681 VersionedClause<OMPC_Device>, 1682 VersionedClause<OMPC_IsDevicePtr>, 1683 VersionedClause<OMPC_NoWait>, 1684 VersionedClause<OMPC_Depend>, 1685 VersionedClause<OMPC_Novariants>, 1686 VersionedClause<OMPC_Nocontext> 1687 ]; 1688} 1689def OMP_masked : Directive<"masked"> { 1690 let allowedOnceClauses = [ 1691 VersionedClause<OMPC_Filter> 1692 ]; 1693} 1694def OMP_Unknown : Directive<"unknown"> { 1695 let isDefault = true; 1696} 1697