[flang-commits] [flang] b585c43 - [Flang][OpenMP] : Add a temporary lowering for workshare directive (#78268)

via flang-commits flang-commits at lists.llvm.org
Tue Mar 5 02:28:40 PST 2024


Author: Kiran Chandramohan
Date: 2024-03-05T10:28:36Z
New Revision: b585c43dccb2c608f698419a9c8d7645d3120fdb

URL: https://github.com/llvm/llvm-project/commit/b585c43dccb2c608f698419a9c8d7645d3120fdb
DIFF: https://github.com/llvm/llvm-project/commit/b585c43dccb2c608f698419a9c8d7645d3120fdb.diff

LOG: [Flang][OpenMP] : Add a temporary lowering for workshare directive (#78268)

As a temporary solution, lower workshare to the single directive

Added: 
    flang/test/Lower/OpenMP/workshare.f90

Modified: 
    flang/lib/Lower/OpenMP/OpenMP.cpp

Removed: 
    


################################################################################
diff  --git a/flang/lib/Lower/OpenMP/OpenMP.cpp b/flang/lib/Lower/OpenMP/OpenMP.cpp
index 90fc1f80f57ab7..83aebdaecd3504 100644
--- a/flang/lib/Lower/OpenMP/OpenMP.cpp
+++ b/flang/lib/Lower/OpenMP/OpenMP.cpp
@@ -1810,7 +1810,11 @@ genOMP(Fortran::lower::AbstractConverter &converter,
                /*outerCombined=*/false);
     break;
   case llvm::omp::Directive::OMPD_workshare:
-    TODO(currentLocation, "Workshare construct");
+    // FIXME: Workshare is not a commonly used OpenMP construct, an
+    // implementation for this feature will come later. For the codes
+    // that use this construct, add a single construct for now.
+    genSingleOp(converter, semaCtx, eval, /*genNested=*/true, currentLocation,
+                beginClauseList, endClauseList);
     break;
   default:
     singleDirective = false;
@@ -1845,7 +1849,8 @@ genOMP(Fortran::lower::AbstractConverter &converter,
   }
   if ((llvm::omp::workShareSet & llvm::omp::blockConstructSet)
           .test(directive.v)) {
-    TODO(currentLocation, "Workshare construct");
+    genSingleOp(converter, semaCtx, eval, /*genNested=*/false, currentLocation,
+                beginClauseList, endClauseList);
     combinedDirective = true;
   }
   if (!combinedDirective)

diff  --git a/flang/test/Lower/OpenMP/workshare.f90 b/flang/test/Lower/OpenMP/workshare.f90
new file mode 100644
index 00000000000000..1e11677a15e1f0
--- /dev/null
+++ b/flang/test/Lower/OpenMP/workshare.f90
@@ -0,0 +1,42 @@
+
+!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
+
+!CHECK-LABEL: func @_QPsb1
+subroutine sb1(arr)
+  integer :: arr(:)
+!CHECK: omp.parallel  {
+  !$omp parallel
+!CHECK: omp.single  {
+  !$omp workshare
+    arr = 0
+  !$omp end workshare
+!CHECK: }
+  !$omp end parallel
+!CHECK: }
+end subroutine
+
+!CHECK-LABEL: func @_QPsb2
+subroutine sb2(arr)
+  integer :: arr(:)
+!CHECK: omp.parallel  {
+  !$omp parallel
+!CHECK: omp.single nowait {
+  !$omp workshare
+    arr = 0
+  !$omp end workshare nowait
+!CHECK: }
+  !$omp end parallel
+!CHECK: }
+end subroutine
+
+!CHECK-LABEL: func @_QPsb3
+subroutine sb3(arr)
+  integer :: arr(:)
+!CHECK: omp.parallel  {
+!CHECK: omp.single  {
+  !$omp parallel workshare
+    arr = 0
+  !$omp end parallel workshare
+!CHECK: }
+!CHECK: }
+end subroutine


        


More information about the flang-commits mailing list