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