Skip to content

Commit

Permalink
[Flang][OpenMP] : Add a temporary lowering for workshare directive (#…
Browse files Browse the repository at this point in the history
…78268)

As a temporary solution, lower workshare to the single directive
  • Loading branch information
kiranchandramohan committed Mar 5, 2024
1 parent 0709eeb commit b585c43
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 2 deletions.
9 changes: 7 additions & 2 deletions flang/lib/Lower/OpenMP/OpenMP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down
42 changes: 42 additions & 0 deletions flang/test/Lower/OpenMP/workshare.f90
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit b585c43

Please sign in to comment.