[flang] [llvm] [LLVM][OpenMP] Add "nowait" clause as valid for "workshare" (PR #88426)

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 12 06:30:38 PDT 2024


https://github.com/kparzysz updated https://github.com/llvm/llvm-project/pull/88426

>From ffcb82c3d19418dff0d518c70f080a8b660ca980 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Thu, 11 Apr 2024 14:05:30 -0500
Subject: [PATCH 1/2] [LLVM][OpenMP] "nowait" clause is valid for "workshare"

Add the "if" clause to the list of allowed clauses for the "workshare"
directive.
---
 llvm/include/llvm/Frontend/OpenMP/OMP.td | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td
index d9a931438b4292..e91169e8da1aa5 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -2115,6 +2115,9 @@ def OMP_scope : Directive<"scope"> {
   let association = AS_Block;
 }
 def OMP_Workshare : Directive<"workshare"> {
+  let allowedOnceClauses = [
+    VersionedClause<OMPC_NoWait>
+  ];
   let association = AS_Block;
 }
 def OMP_ParallelWorkshare : Directive<"parallel workshare"> {

>From 7bea1f342518d6dbe234ce4eabf6d27f3b8d6891 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Fri, 12 Apr 2024 08:26:33 -0500
Subject: [PATCH 2/2] Disallow "nowait" on "!$omp workshare" in parser

---
 flang/lib/Semantics/check-omp-structure.h         | 1 +
 flang/test/Semantics/OpenMP/clause-validity01.f90 | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/flang/lib/Semantics/check-omp-structure.h b/flang/lib/Semantics/check-omp-structure.h
index 33243d926cf167..8287653458e1cf 100644
--- a/flang/lib/Semantics/check-omp-structure.h
+++ b/flang/lib/Semantics/check-omp-structure.h
@@ -42,6 +42,7 @@ static const OmpDirectiveSet noWaitClauseNotAllowedSet{
     Directive::OMPD_do_simd,
     Directive::OMPD_sections,
     Directive::OMPD_single,
+    Directive::OMPD_workshare,
 };
 } // namespace omp
 } // namespace llvm
diff --git a/flang/test/Semantics/OpenMP/clause-validity01.f90 b/flang/test/Semantics/OpenMP/clause-validity01.f90
index 977a529864615f..74f154bb0ad67d 100644
--- a/flang/test/Semantics/OpenMP/clause-validity01.f90
+++ b/flang/test/Semantics/OpenMP/clause-validity01.f90
@@ -342,6 +342,9 @@
   a = 1.0
   !ERROR: COPYPRIVATE clause is not allowed on the END WORKSHARE directive
   !$omp end workshare nowait copyprivate(a)
+  !$omp workshare nowait
+  !ERROR: NOWAIT clause is not allowed on the WORKSHARE directive, use it on OMP END WORKSHARE directive
+  !$omp end workshare
   !$omp end parallel
 
 ! 2.8.1 simd-clause -> safelen-clause |



More information about the llvm-commits mailing list