[flang-commits] [flang] [llvm] [flang][OpenMP] Move unique clauses to allowedOnceClauses in OMP.td (PR #204995)

via flang-commits flang-commits at lists.llvm.org
Sun Jun 21 10:57:22 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-openmp

@llvm/pr-subscribers-flang-semantics

Author: Krzysztof Parzyszek (kparzysz)

<details>
<summary>Changes</summary>

Many unique clauses were listed in "allowedClauses", which turned off the single-occurrence check in flang. Move these clauses to the right category to enable this check.
One exception to this is the IF clause: the IF clause is unique for all non-compound directives, but is repeatable on compound ones with the restriction that at most one IF clause can apply to any of the constituents. This restriction is currently not enforced correctly in flang, and so the IF clause was left unchanged.

Although this change is applied to a file shared between flang and clang, clang does not use these categories for its checks, and hence is not affected by this patch.

---

Patch is 55.04 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/204995.diff


2 Files Affected:

- (modified) flang/lib/Semantics/check-omp-structure.cpp (-3) 
- (modified) llvm/include/llvm/Frontend/OpenMP/OMP.td (+309-257) 


``````````diff
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index e2220156d13cd..be68a4c516133 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -2447,9 +2447,6 @@ void OmpStructureChecker::Leave(const parser::OmpDeclareTargetDirective &x) {
       context_.Warn(common::UsageWarning::OpenMPUsage, toClause->source,
           "The usage of TO clause on DECLARE TARGET directive has been deprecated. Use ENTER clause instead."_warn_en_US);
     }
-    if (indirectClause) {
-      CheckAllowedClause(llvm::omp::Clause::OMPC_indirect);
-    }
   }
 
   bool toClauseFound{false};
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td
index e622d856f7cf9..65118c96bc2e8 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -681,9 +681,9 @@ def OMP_Assume : Directive<[Spelling<"assume">]> {
     VersionedClause<OMPC_Contains, 51>,
     VersionedClause<OMPC_Holds, 51>,
     VersionedClause<OMPC_NoOpenMP, 51>,
+    VersionedClause<OMPC_NoOpenMPConstructs, 60>,
     VersionedClause<OMPC_NoOpenMPRoutines, 51>,
     VersionedClause<OMPC_NoParallelism, 51>,
-    VersionedClause<OMPC_NoOpenMPConstructs, 60>,
   ];
 }
 def OMP_Atomic : Directive<[Spelling<"atomic">]> {
@@ -730,11 +730,13 @@ def OMP_EndAssumes : Directive<[Spelling<"end assumes">]> {
 def OMP_BeginDeclareTarget : Directive<[Spelling<"begin declare target", 1, 52>,
                                         Spelling<"begin declare_target", 60>]> {
   let allowedClauses = [
-    VersionedClause<OMPC_DeviceType>,
-    VersionedClause<OMPC_Indirect, 51>,
     VersionedClause<OMPC_Link>,
     VersionedClause<OMPC_To>,
   ];
+  let allowedOnceClauses = [
+    VersionedClause<OMPC_DeviceType>,
+    VersionedClause<OMPC_Indirect, 51>,
+  ];
   let association = AS_Delimited;
   let category = CA_Declarative;
   let languages = [L_C];
@@ -827,13 +829,13 @@ def OMP_DeclareTarget : Directive<[Spelling<"declare target", 1, 52>,
                                    Spelling<"declare_target", 60>]> {
   let allowedClauses = [
     VersionedClause<OMPC_Enter, 52>,
-    VersionedClause<OMPC_Indirect, 51>,
     VersionedClause<OMPC_Link>,
     VersionedClause<OMPC_Local, 60>,
     VersionedClause<OMPC_To>,
   ];
   let allowedOnceClauses = [
     VersionedClause<OMPC_DeviceType, 50>,
+    VersionedClause<OMPC_Indirect, 51>,
   ];
   let association = AS_None;
   let category = CA_Declarative;
@@ -844,8 +846,8 @@ def OMP_DeclareVariant : Directive<[Spelling<"declare variant", 1, 52>,
     VersionedClause<OMPC_AdjustArgs, 51>,
   ];
   let allowedOnceClauses = [
-    VersionedClause<OMPC_Match>,
     VersionedClause<OMPC_AppendArgs, 51>,
+    VersionedClause<OMPC_Match>,
   ];
   let association = AS_Declaration;
   let category = CA_Declarative;
@@ -859,6 +861,8 @@ def OMP_Depobj : Directive<[Spelling<"depobj">]> {
     VersionedClause<OMPC_Depobj, 50>,
     VersionedClause<OMPC_Destroy, 50>,
     VersionedClause<OMPC_Init, 60>,
+  ];
+  let allowedOnceClauses = [
     VersionedClause<OMPC_Update, 50>,
   ];
   let association = AS_None;
@@ -867,9 +871,11 @@ def OMP_Depobj : Directive<[Spelling<"depobj">]> {
 def OMP_dispatch : Directive<[Spelling<"dispatch">]> {
   let allowedClauses = [
     VersionedClause<OMPC_Depend>,
-    VersionedClause<OMPC_Device>,
     VersionedClause<OMPC_HasDeviceAddr, 51>,
     VersionedClause<OMPC_IsDevicePtr>,
+  ];
+  let allowedOnceClauses = [
+    VersionedClause<OMPC_Device>,
     VersionedClause<OMPC_Nocontext>,
     VersionedClause<OMPC_Novariants>,
     VersionedClause<OMPC_NoWait>,
@@ -922,7 +928,7 @@ def OMP_EndDo : Directive<[Spelling<"end do">]> {
   let languages = OMP_Do.languages;
 }
 def OMP_Error : Directive<[Spelling<"error">]> {
-  let allowedClauses = [
+  let allowedOnceClauses = [
     VersionedClause<OMPC_At, 51>,
     VersionedClause<OMPC_Message, 51>,
     VersionedClause<OMPC_Severity, 51>,
@@ -956,15 +962,17 @@ def OMP_Flush : Directive<[Spelling<"flush">]> {
 def OMP_For : Directive<[Spelling<"for">]> {
   let allowedClauses = [
     VersionedClause<OMPC_Allocate>,
-    VersionedClause<OMPC_Collapse>,
     VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_LastPrivate>,
     VersionedClause<OMPC_Linear>,
+    VersionedClause<OMPC_Private>,
+    VersionedClause<OMPC_Reduction>,
+  ];
+  let allowedOnceClauses = [
+    VersionedClause<OMPC_Collapse>,
     VersionedClause<OMPC_NoWait>,
     VersionedClause<OMPC_Order, 50>,
     VersionedClause<OMPC_Ordered>,
-    VersionedClause<OMPC_Private>,
-    VersionedClause<OMPC_Reduction>,
     VersionedClause<OMPC_Schedule>,
   ];
   let association = AS_LoopNest;
@@ -998,11 +1006,13 @@ def OMP_interop : Directive<[Spelling<"interop">]> {
   let allowedClauses = [
     VersionedClause<OMPC_Depend>,
     VersionedClause<OMPC_Destroy>,
-    VersionedClause<OMPC_Device>,
     VersionedClause<OMPC_Init>,
-    VersionedClause<OMPC_NoWait>,
     VersionedClause<OMPC_Use>,
   ];
+  let allowedOnceClauses = [
+    VersionedClause<OMPC_Device>,
+    VersionedClause<OMPC_NoWait>,
+  ];
   let association = AS_None;
   let category = CA_Executable;
 }
@@ -1036,8 +1046,8 @@ def OMP_Metadirective : Directive<[Spelling<"metadirective">]> {
     VersionedClause<OMPC_When>,
   ];
   let allowedOnceClauses = [
-    VersionedClause<OMPC_Otherwise, 52>,
     VersionedClause<OMPC_Default, 50, 51>,
+    VersionedClause<OMPC_Otherwise, 52>,
   ];
   let association = AS_None;
   let category = CA_Meta;
@@ -1069,24 +1079,26 @@ def OMP_Parallel : Directive<[Spelling<"parallel">]> {
     VersionedClause<OMPC_Reduction>,
     VersionedClause<OMPC_Shared>,
   ];
-  let allowedOnceClauses = [VersionedClause<OMPC_Default>,
-                            VersionedClause<OMPC_If>,
-                            VersionedClause<OMPC_Message, 60>,
-                            VersionedClause<OMPC_NumThreads>,
-                            VersionedClause<OMPC_ProcBind>,
-                            VersionedClause<OMPC_Severity, 60>,
+  let allowedOnceClauses = [
+    VersionedClause<OMPC_Default>,
+    VersionedClause<OMPC_If>,
+    VersionedClause<OMPC_Message, 60>,
+    VersionedClause<OMPC_NumThreads>,
+    VersionedClause<OMPC_ProcBind>,
+    VersionedClause<OMPC_Severity, 60>,
   ];
   let association = AS_Block;
   let category = CA_Executable;
 }
 def OMP_Requires : Directive<[Spelling<"requires">]> {
   let allowedOnceClauses = [
-    VersionedClause<OMPC_UnifiedAddress>,
-    VersionedClause<OMPC_UnifiedSharedMemory>,
-    VersionedClause<OMPC_DeviceSafesync, 60>,
     VersionedClause<OMPC_AtomicDefaultMemOrder>,
-    VersionedClause<OMPC_DynamicAllocators>, VersionedClause<OMPC_SelfMaps>,
+    VersionedClause<OMPC_DeviceSafesync, 60>,
+    VersionedClause<OMPC_DynamicAllocators>,
     VersionedClause<OMPC_ReverseOffload>,
+    VersionedClause<OMPC_SelfMaps>,
+    VersionedClause<OMPC_UnifiedAddress>,
+    VersionedClause<OMPC_UnifiedSharedMemory>,
   ];
   let association = AS_None;
   let category = CA_Informational;
@@ -1096,7 +1108,7 @@ def OMP_Reverse : Directive<[Spelling<"reverse">]> {
   let category = CA_Executable;
 }
 def OMP_Scan : Directive<[Spelling<"scan">]> {
-  let allowedClauses = [
+  let allowedOnceClauses = [
     VersionedClause<OMPC_Exclusive>,
     VersionedClause<OMPC_Inclusive>,
   ];
@@ -1134,10 +1146,12 @@ def OMP_Sections : Directive<[Spelling<"sections">]> {
     VersionedClause<OMPC_Allocate>,
     VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_LastPrivate>,
-    VersionedClause<OMPC_NoWait>,
     VersionedClause<OMPC_Private>,
     VersionedClause<OMPC_Reduction>,
   ];
+  let allowedOnceClauses = [
+    VersionedClause<OMPC_NoWait>,
+  ];
   let association = AS_Block;
   let category = CA_Executable;
 }
@@ -1208,9 +1222,9 @@ def OMP_Target : Directive<[Spelling<"target">]> {
     VersionedClause<OMPC_OMPX_Attribute>,
     VersionedClause<OMPC_Private>,
     VersionedClause<OMPC_UsesAllocators, 50>,
-    VersionedClause<OMPC_Default, 60>,
   ];
   let allowedOnceClauses = [
+    VersionedClause<OMPC_Default, 60>,
     VersionedClause<OMPC_DefaultMap>,
     VersionedClause<OMPC_Device>,
     VersionedClause<OMPC_If>,
@@ -1226,9 +1240,9 @@ def OMP_Target : Directive<[Spelling<"target">]> {
 def OMP_TargetData : Directive<[Spelling<"target data", 1, 52>,
                                 Spelling<"target_data", 60>]> {
   let allowedOnceClauses = [
+    VersionedClause<OMPC_Default, 60>,
     VersionedClause<OMPC_Device>,
     VersionedClause<OMPC_If>,
-    VersionedClause<OMPC_Default, 60>,
     VersionedClause<OMPC_Transparent, 60>,
   ];
   let requiredClauses = [
@@ -1296,20 +1310,20 @@ def OMP_Task : Directive<[Spelling<"task">]> {
     VersionedClause<OMPC_Depend>,
     VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_InReduction>,
-    VersionedClause<OMPC_Mergeable>,
     VersionedClause<OMPC_Private>,
     VersionedClause<OMPC_Shared>,
-    VersionedClause<OMPC_Untied>,
   ];
   let allowedOnceClauses = [
     VersionedClause<OMPC_Default>,
     VersionedClause<OMPC_Detach, 50>,
     VersionedClause<OMPC_Final>,
     VersionedClause<OMPC_If>,
+    VersionedClause<OMPC_Mergeable>,
     VersionedClause<OMPC_Priority>,
-    VersionedClause<OMPC_Threadset, 60>,
     VersionedClause<OMPC_Replayable, 60>,
+    VersionedClause<OMPC_Threadset, 60>,
     VersionedClause<OMPC_Transparent, 60>,
+    VersionedClause<OMPC_Untied>,
   ];
   let association = AS_Block;
   let category = CA_Executable;
@@ -1338,22 +1352,22 @@ def OMP_TaskLoop : Directive<[Spelling<"taskloop">]> {
     VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_InReduction>,
     VersionedClause<OMPC_LastPrivate>,
-    VersionedClause<OMPC_Mergeable>,
-    VersionedClause<OMPC_NoGroup>,
     VersionedClause<OMPC_Private>,
     VersionedClause<OMPC_Reduction>,
     VersionedClause<OMPC_Shared>,
-    VersionedClause<OMPC_Untied>,
   ];
   let allowedOnceClauses = [
     VersionedClause<OMPC_Collapse>,
     VersionedClause<OMPC_Default>,
     VersionedClause<OMPC_Final>,
     VersionedClause<OMPC_If>,
+    VersionedClause<OMPC_Mergeable>,
+    VersionedClause<OMPC_NoGroup>,
     VersionedClause<OMPC_Priority>,
-    VersionedClause<OMPC_Threadset, 60>,
     VersionedClause<OMPC_Replayable, 60>,
+    VersionedClause<OMPC_Threadset, 60>,
     VersionedClause<OMPC_Transparent, 60>,
+    VersionedClause<OMPC_Untied>,
   ];
   let allowedExclusiveClauses = [
     VersionedClause<OMPC_GrainSize>,
@@ -1365,9 +1379,9 @@ def OMP_TaskLoop : Directive<[Spelling<"taskloop">]> {
 def OMP_TaskWait : Directive<[Spelling<"taskwait">]> {
   let allowedClauses = [
     VersionedClause<OMPC_Depend, 50>,
-    VersionedClause<OMPC_NoWait, 51>,
   ];
   let allowedOnceClauses = [
+    VersionedClause<OMPC_NoWait, 51>,
     VersionedClause<OMPC_Replayable, 60>,
   ];
   let association = AS_None;
@@ -1479,7 +1493,6 @@ def OMP_DistributeParallelDo : Directive<[Spelling<"distribute parallel do">]> {
   let allowedClauses = [
     VersionedClause<OMPC_Allocate>,
     VersionedClause<OMPC_Copyin>,
-    VersionedClause<OMPC_Default>,
     VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_LastPrivate>,
     VersionedClause<OMPC_Linear>,
@@ -1489,6 +1502,7 @@ def OMP_DistributeParallelDo : Directive<[Spelling<"distribute parallel do">]> {
   ];
   let allowedOnceClauses = [
     VersionedClause<OMPC_Collapse>,
+    VersionedClause<OMPC_Default>,
     VersionedClause<OMPC_DistSchedule>,
     VersionedClause<OMPC_If>,
     VersionedClause<OMPC_Message, 60>,
@@ -1507,25 +1521,27 @@ def OMP_DistributeParallelDoSimd
   let allowedClauses = [
     VersionedClause<OMPC_Aligned>,
     VersionedClause<OMPC_Allocate>,
-    VersionedClause<OMPC_Collapse>,
     VersionedClause<OMPC_Copyin>,
-    VersionedClause<OMPC_Default>,
-    VersionedClause<OMPC_DistSchedule>,
     VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_If>,
     VersionedClause<OMPC_LastPrivate>,
     VersionedClause<OMPC_Linear>,
-    VersionedClause<OMPC_Message, 60>,
     VersionedClause<OMPC_NonTemporal>,
+    VersionedClause<OMPC_Private>,
+    VersionedClause<OMPC_Reduction>,
+    VersionedClause<OMPC_Shared>,
+  ];
+  let allowedOnceClauses = [
+    VersionedClause<OMPC_Collapse>,
+    VersionedClause<OMPC_Default>,
+    VersionedClause<OMPC_DistSchedule>,
+    VersionedClause<OMPC_Message, 60>,
     VersionedClause<OMPC_NumThreads>,
     VersionedClause<OMPC_Order, 50>,
-    VersionedClause<OMPC_Private>,
     VersionedClause<OMPC_ProcBind>,
-    VersionedClause<OMPC_Reduction>,
     VersionedClause<OMPC_SafeLen>,
     VersionedClause<OMPC_Schedule>,
     VersionedClause<OMPC_Severity, 60>,
-    VersionedClause<OMPC_Shared>,
     VersionedClause<OMPC_SimdLen>,
   ];
   let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_Do, OMP_Simd];
@@ -1536,23 +1552,25 @@ def OMP_DistributeParallelFor
     : Directive<[Spelling<"distribute parallel for">]> {
   let allowedClauses = [
     VersionedClause<OMPC_Allocate>,
-    VersionedClause<OMPC_Collapse>,
     VersionedClause<OMPC_Copyin>,
+    VersionedClause<OMPC_FirstPrivate>,
+    VersionedClause<OMPC_LastPrivate>,
+    VersionedClause<OMPC_OMPX_Attribute>,
+    VersionedClause<OMPC_Private>,
+    VersionedClause<OMPC_Reduction>,
+    VersionedClause<OMPC_Shared>,
+  ];
+  let allowedOnceClauses = [
+    VersionedClause<OMPC_Collapse>,
     VersionedClause<OMPC_Default>,
     VersionedClause<OMPC_DistSchedule>,
-    VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_If>,
-    VersionedClause<OMPC_LastPrivate>,
     VersionedClause<OMPC_Message, 60>,
     VersionedClause<OMPC_NumThreads>,
-    VersionedClause<OMPC_OMPX_Attribute>,
     VersionedClause<OMPC_Order, 50>,
-    VersionedClause<OMPC_Private>,
     VersionedClause<OMPC_ProcBind>,
-    VersionedClause<OMPC_Reduction>,
     VersionedClause<OMPC_Schedule>,
     VersionedClause<OMPC_Severity, 60>,
-    VersionedClause<OMPC_Shared>,
   ];
   let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_For];
   let category = CA_Executable;
@@ -1563,26 +1581,28 @@ def OMP_DistributeParallelForSimd
   let allowedClauses = [
     VersionedClause<OMPC_Aligned>,
     VersionedClause<OMPC_Allocate>,
-    VersionedClause<OMPC_Collapse>,
     VersionedClause<OMPC_Copyin>,
-    VersionedClause<OMPC_Default>,
-    VersionedClause<OMPC_DistSchedule>,
     VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_If>,
     VersionedClause<OMPC_LastPrivate>,
     VersionedClause<OMPC_Linear>,
-    VersionedClause<OMPC_Message, 60>,
     VersionedClause<OMPC_NonTemporal, 50>,
-    VersionedClause<OMPC_NumThreads>,
     VersionedClause<OMPC_OMPX_Attribute>,
-    VersionedClause<OMPC_Order, 50>,
     VersionedClause<OMPC_Private>,
-    VersionedClause<OMPC_ProcBind>,
     VersionedClause<OMPC_Reduction>,
+    VersionedClause<OMPC_Shared>,
+  ];
+  let allowedOnceClauses = [
+    VersionedClause<OMPC_Collapse>,
+    VersionedClause<OMPC_Default>,
+    VersionedClause<OMPC_DistSchedule>,
+    VersionedClause<OMPC_Message, 60>,
+    VersionedClause<OMPC_NumThreads>,
+    VersionedClause<OMPC_Order, 50>,
+    VersionedClause<OMPC_ProcBind>,
     VersionedClause<OMPC_SafeLen>,
     VersionedClause<OMPC_Schedule>,
     VersionedClause<OMPC_Severity, 60>,
-    VersionedClause<OMPC_Shared>,
     VersionedClause<OMPC_SimdLen>,
   ];
   let leafConstructs = [OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd];
@@ -1594,7 +1614,6 @@ def OMP_DistributeSimd : Directive<[Spelling<"distribute simd">]> {
     VersionedClause<OMPC_Aligned>,
     VersionedClause<OMPC_Allocate>,
     VersionedClause<OMPC_Copyin>,
-    VersionedClause<OMPC_Default>,
     VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_LastPrivate>,
     VersionedClause<OMPC_Linear>,
@@ -1604,6 +1623,7 @@ def OMP_DistributeSimd : Directive<[Spelling<"distribute simd">]> {
   ];
   let allowedOnceClauses = [
     VersionedClause<OMPC_Collapse>,
+    VersionedClause<OMPC_Default>,
     VersionedClause<OMPC_DistSchedule>,
     VersionedClause<OMPC_If, 50>,
     VersionedClause<OMPC_Message, 60>,
@@ -1654,17 +1674,19 @@ def OMP_ForSimd : Directive<[Spelling<"for simd">]> {
   let allowedClauses = [
     VersionedClause<OMPC_Aligned>,
     VersionedClause<OMPC_Allocate>,
-    VersionedClause<OMPC_Collapse>,
     VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_If, 50>,
     VersionedClause<OMPC_LastPrivate>,
     VersionedClause<OMPC_Linear>,
     VersionedClause<OMPC_NonTemporal, 50>,
+    VersionedClause<OMPC_Private>,
+    VersionedClause<OMPC_Reduction>,
+  ];
+  let allowedOnceClauses = [
+    VersionedClause<OMPC_Collapse>,
     VersionedClause<OMPC_NoWait>,
     VersionedClause<OMPC_Order, 50>,
     VersionedClause<OMPC_Ordered>,
-    VersionedClause<OMPC_Private>,
-    VersionedClause<OMPC_Reduction>,
     VersionedClause<OMPC_SafeLen>,
     VersionedClause<OMPC_Schedule>,
     VersionedClause<OMPC_SimdLen>,
@@ -1692,13 +1714,13 @@ def OMP_target_loop : Directive<[Spelling<"target loop">]> {
   let allowedOnceClauses = [
     VersionedClause<OMPC_Bind, 50>,
     VersionedClause<OMPC_Collapse>,
-    VersionedClause<OMPC_Order>,
-    VersionedClause<OMPC_ThreadLimit>,
-    VersionedClause<OMPC_OMPX_DynCGroupMem>,
-    VersionedClause<OMPC_If>,
-    VersionedClause<OMPC_Device>,
     VersionedClause<OMPC_DefaultMap>,
+    VersionedClause<OMPC_Device>,
+    VersionedClause<OMPC_If>,
     VersionedClause<OMPC_NoWait>,
+    VersionedClause<OMPC_OMPX_DynCGroupMem>,
+    VersionedClause<OMPC_Order>,
+    VersionedClause<OMPC_ThreadLimit>,
   ];
   let leafConstructs = [OMP_Target, OMP_loop];
   let category = CA_Executable;
@@ -1706,22 +1728,24 @@ def OMP_target_loop : Directive<[Spelling<"target loop">]> {
 def OMP_MaskedTaskloop : Directive<[Spelling<"masked taskloop">]> {
   let allowedClauses = [
     VersionedClause<OMPC_Allocate>,
+    VersionedClause<OMPC_FirstPrivate>,
+    VersionedClause<OMPC_InReduction>,
+    VersionedClause<OMPC_LastPrivate>,
+    VersionedClause<OMPC_Private>,
+    VersionedClause<OMPC_Reduction>,
+    VersionedClause<OMPC_Shared>,
+  ];
+  let allowedOnceClauses = [
     VersionedClause<OMPC_Collapse>,
     VersionedClause<OMPC_Default>,
     VersionedClause<OMPC_Filter>,
     VersionedClause<OMPC_Final>,
-    VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_GrainSize>,
     VersionedClause<OMPC_If>,
-    VersionedClause<OMPC_InReduction>,
-    VersionedClause<OMPC_LastPrivate>,
     VersionedClause<OMPC_Mergeable>,
     VersionedClause<OMPC_NoGroup>,
     VersionedClause<OMPC_NumTasks>,
     VersionedClause<OMPC_Priority>,
-    VersionedClause<OMPC_Private>,
-    VersionedClause<OMPC_Reduction>,
-    VersionedClause<OMPC_Shared>,
     VersionedClause<OMPC_Untied>,
   ];
   let leafConstructs = [OMP_masked, OMP_TaskLoop];
@@ -1731,26 +1755,28 @@ def OMP_MaskedTaskloopSimd : Directive<[Spelling<"masked taskloop simd">]> {
   let allowedClauses = [
     VersionedClause<OMPC_Aligned>,
     VersionedClause<OMPC_Allocate>,
+    VersionedClause<OMPC_FirstPrivate>,
+    VersionedClause<OMPC_InReduction>,
+    VersionedClause<OMPC_LastPrivate>,
+    VersionedClause<OMPC_Linear>,
+    VersionedClause<OMPC_NonTemporal, 50>,
+    VersionedClause<OMPC_Private>,
+    VersionedClause<OMPC_Reduction>,
+    VersionedClause<OMPC_Shared>,
+  ];
+  let allowedOnceClauses = [
     VersionedClause<OMPC_Collapse>,
     VersionedClause<OMPC_Default>,
     VersionedClause<OMPC_Filter>,
     VersionedClause<OMPC_Final>,
-    VersionedClause<OMPC_FirstPrivate>,
     VersionedClause<OMPC_GrainSize>,
     VersionedClause<OMPC_If>,
-    VersionedClause<OMPC_InReduction>,
-    VersionedClause<OMPC_LastPrivate>,
-    VersionedClause<OMPC_Linear>,
     VersionedClause<OMPC_Mergeable>,
     VersionedClause<OMPC_NoGroup>,
-    VersionedClause<OMPC_NonTemporal, 50>,
     VersionedClause<OMPC_NumTasks>,
     VersionedClause<OMPC_Order, 50>,
     VersionedClause<OMPC_Priority>,
-    VersionedClause<OMPC_Private>,
-    VersionedClause<OMPC_Reduction>,
     VersionedClause<OMPC_SafeLen>,
-    VersionedClause<OMPC_Shared>,
     VersionedClause<OMPC_SimdLen>,
     VersionedClause<OMPC_Untied>,
   ];
@@ -1760,21 +1786,23 @@ def OMP_MaskedTaskloopSimd : Directive<[Spelling<"masked taskloop simd">]> {
 def OMP_MasterTaskloop : Directive<[S...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/204995


More information about the flang-commits mailing list