[flang-commits] [flang] 415616d - [flang][OpenMP] Lower standalone ops via OMP dispatch, NFC (#92045)
via flang-commits
flang-commits at lists.llvm.org
Tue May 14 05:33:11 PDT 2024
Author: Krzysztof Parzyszek
Date: 2024-05-14T07:33:07-05:00
New Revision: 415616daa0bdf6c0065c4c1967f1c4050e6ea836
URL: https://github.com/llvm/llvm-project/commit/415616daa0bdf6c0065c4c1967f1c4050e6ea836
DIFF: https://github.com/llvm/llvm-project/commit/415616daa0bdf6c0065c4c1967f1c4050e6ea836.diff
LOG: [flang][OpenMP] Lower standalone ops via OMP dispatch, NFC (#92045)
This moves lowering of standalone OpenMP ops into the dispatch function.
Follow-up to PR90098.
Added:
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 f9ba2fcbbca74..f21acdd64d7c3 100644
--- a/flang/lib/Lower/OpenMP/OpenMP.cpp
+++ b/flang/lib/Lower/OpenMP/OpenMP.cpp
@@ -1959,6 +1959,9 @@ static void genOMPDispatch(Fortran::lower::AbstractConverter &converter,
const List<Clause> &clauses = item->clauses;
switch (llvm::omp::Directive dir = item->id) {
+ case llvm::omp::Directive::OMPD_barrier:
+ genBarrierOp(converter, symTable, semaCtx, eval, loc, queue, item);
+ break;
case llvm::omp::Directive::OMPD_distribute:
genDistributeOp(converter, symTable, semaCtx, eval, loc, clauses, queue,
item);
@@ -1968,8 +1971,6 @@ static void genOMPDispatch(Fortran::lower::AbstractConverter &converter,
break;
case llvm::omp::Directive::OMPD_loop:
case llvm::omp::Directive::OMPD_masked:
- case llvm::omp::Directive::OMPD_tile:
- case llvm::omp::Directive::OMPD_unroll:
TODO(loc, "Unhandled loop directive (" +
llvm::omp::getOpenMPDirectiveName(dir) + ")");
break;
@@ -1977,6 +1978,7 @@ static void genOMPDispatch(Fortran::lower::AbstractConverter &converter,
genMasterOp(converter, symTable, semaCtx, eval, loc, clauses, queue, item);
break;
case llvm::omp::Directive::OMPD_ordered:
+ // Block-associated "ordered" construct.
genOrderedRegionOp(converter, symTable, semaCtx, eval, loc, clauses, queue,
item);
break;
@@ -1984,6 +1986,10 @@ static void genOMPDispatch(Fortran::lower::AbstractConverter &converter,
genParallelOp(converter, symTable, semaCtx, eval, loc, clauses, queue, item,
/*outerCombined=*/false);
break;
+ case llvm::omp::Directive::OMPD_section:
+ genSectionOp(converter, symTable, semaCtx, eval, loc, /*clauses=*/{}, queue,
+ item);
+ break;
case llvm::omp::Directive::OMPD_sections:
genSectionsOp(converter, symTable, semaCtx, eval, loc, clauses, queue,
item);
@@ -2025,9 +2031,20 @@ static void genOMPDispatch(Fortran::lower::AbstractConverter &converter,
genTaskloopOp(converter, symTable, semaCtx, eval, loc, clauses, queue,
item);
break;
+ case llvm::omp::Directive::OMPD_taskwait:
+ genTaskwaitOp(converter, symTable, semaCtx, eval, loc, clauses, queue,
+ item);
+ break;
+ case llvm::omp::Directive::OMPD_taskyield:
+ genTaskyieldOp(converter, symTable, semaCtx, eval, loc, queue, item);
+ break;
case llvm::omp::Directive::OMPD_teams:
genTeamsOp(converter, symTable, semaCtx, eval, loc, clauses, queue, item);
break;
+ case llvm::omp::Directive::OMPD_tile:
+ case llvm::omp::Directive::OMPD_unroll:
+ TODO(loc, "Unhandled loop directive (" +
+ llvm::omp::getOpenMPDirectiveName(dir) + ")");
// case llvm::omp::Directive::OMPD_workdistribute:
case llvm::omp::Directive::OMPD_workshare:
// FIXME: Workshare is not a commonly used OpenMP construct, an
@@ -2035,6 +2052,7 @@ static void genOMPDispatch(Fortran::lower::AbstractConverter &converter,
// that use this construct, add a single construct for now.
genSingleOp(converter, symTable, semaCtx, eval, loc, clauses, queue, item);
break;
+
// Composite constructs
case llvm::omp::Directive::OMPD_distribute_parallel_do:
genCompositeDistributeParallelDo(converter, symTable, semaCtx, eval, loc,
@@ -2174,45 +2192,14 @@ static void genOMP(Fortran::lower::AbstractConverter &converter,
ConstructQueue queue{
buildConstructQueue(converter.getFirOpBuilder().getModule(), semaCtx,
eval, directive.source, directive.v, clauses)};
-
- switch (directive.v) {
- default:
- break;
- case llvm::omp::Directive::OMPD_barrier:
- genBarrierOp(converter, symTable, semaCtx, eval, currentLocation, queue,
- queue.begin());
- break;
- case llvm::omp::Directive::OMPD_taskwait:
- genTaskwaitOp(converter, symTable, semaCtx, eval, currentLocation, clauses,
- queue, queue.begin());
- break;
- case llvm::omp::Directive::OMPD_taskyield:
- genTaskyieldOp(converter, symTable, semaCtx, eval, currentLocation, queue,
- queue.begin());
- break;
- case llvm::omp::Directive::OMPD_target_data:
- genTargetDataOp(converter, symTable, semaCtx, eval, currentLocation,
- clauses, queue, queue.begin());
- break;
- case llvm::omp::Directive::OMPD_target_enter_data:
- genTargetEnterExitUpdateDataOp<mlir::omp::TargetEnterDataOp>(
- converter, symTable, semaCtx, currentLocation, clauses, queue,
- queue.begin());
- break;
- case llvm::omp::Directive::OMPD_target_exit_data:
- genTargetEnterExitUpdateDataOp<mlir::omp::TargetExitDataOp>(
- converter, symTable, semaCtx, currentLocation, clauses, queue,
- queue.begin());
- break;
- case llvm::omp::Directive::OMPD_target_update:
- genTargetEnterExitUpdateDataOp<mlir::omp::TargetUpdateOp>(
- converter, symTable, semaCtx, currentLocation, clauses, queue,
- queue.begin());
- break;
- case llvm::omp::Directive::OMPD_ordered:
+ if (directive.v == llvm::omp::Directive::OMPD_ordered) {
+ // Standalone "ordered" directive.
genOrderedOp(converter, symTable, semaCtx, eval, currentLocation, clauses,
queue, queue.begin());
- break;
+ } else {
+ // Dispatch handles the "block-associated" variant of "ordered".
+ genOMPDispatch(converter, symTable, semaCtx, eval, currentLocation, queue,
+ queue.begin());
}
}
@@ -2466,8 +2453,7 @@ genOMP(Fortran::lower::AbstractConverter &converter,
ConstructQueue queue{buildConstructQueue(
converter.getFirOpBuilder().getModule(), semaCtx, eval,
sectionConstruct.source, llvm::omp::Directive::OMPD_section, {})};
- genSectionOp(converter, symTable, semaCtx, eval, loc,
- /*clauses=*/{}, queue, queue.begin());
+ genOMPDispatch(converter, symTable, semaCtx, eval, loc, queue, queue.begin());
}
static void
More information about the flang-commits
mailing list