Skip to content

Commit 415616d

Browse files
authored
[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.
1 parent 9d4f7f4 commit 415616d

File tree

1 file changed

+27
-41
lines changed

1 file changed

+27
-41
lines changed

flang/lib/Lower/OpenMP/OpenMP.cpp

+27-41
Original file line numberDiff line numberDiff line change
@@ -1959,6 +1959,9 @@ static void genOMPDispatch(Fortran::lower::AbstractConverter &converter,
19591959
const List<Clause> &clauses = item->clauses;
19601960

19611961
switch (llvm::omp::Directive dir = item->id) {
1962+
case llvm::omp::Directive::OMPD_barrier:
1963+
genBarrierOp(converter, symTable, semaCtx, eval, loc, queue, item);
1964+
break;
19621965
case llvm::omp::Directive::OMPD_distribute:
19631966
genDistributeOp(converter, symTable, semaCtx, eval, loc, clauses, queue,
19641967
item);
@@ -1968,22 +1971,25 @@ static void genOMPDispatch(Fortran::lower::AbstractConverter &converter,
19681971
break;
19691972
case llvm::omp::Directive::OMPD_loop:
19701973
case llvm::omp::Directive::OMPD_masked:
1971-
case llvm::omp::Directive::OMPD_tile:
1972-
case llvm::omp::Directive::OMPD_unroll:
19731974
TODO(loc, "Unhandled loop directive (" +
19741975
llvm::omp::getOpenMPDirectiveName(dir) + ")");
19751976
break;
19761977
case llvm::omp::Directive::OMPD_master:
19771978
genMasterOp(converter, symTable, semaCtx, eval, loc, clauses, queue, item);
19781979
break;
19791980
case llvm::omp::Directive::OMPD_ordered:
1981+
// Block-associated "ordered" construct.
19801982
genOrderedRegionOp(converter, symTable, semaCtx, eval, loc, clauses, queue,
19811983
item);
19821984
break;
19831985
case llvm::omp::Directive::OMPD_parallel:
19841986
genParallelOp(converter, symTable, semaCtx, eval, loc, clauses, queue, item,
19851987
/*outerCombined=*/false);
19861988
break;
1989+
case llvm::omp::Directive::OMPD_section:
1990+
genSectionOp(converter, symTable, semaCtx, eval, loc, /*clauses=*/{}, queue,
1991+
item);
1992+
break;
19871993
case llvm::omp::Directive::OMPD_sections:
19881994
genSectionsOp(converter, symTable, semaCtx, eval, loc, clauses, queue,
19891995
item);
@@ -2025,16 +2031,28 @@ static void genOMPDispatch(Fortran::lower::AbstractConverter &converter,
20252031
genTaskloopOp(converter, symTable, semaCtx, eval, loc, clauses, queue,
20262032
item);
20272033
break;
2034+
case llvm::omp::Directive::OMPD_taskwait:
2035+
genTaskwaitOp(converter, symTable, semaCtx, eval, loc, clauses, queue,
2036+
item);
2037+
break;
2038+
case llvm::omp::Directive::OMPD_taskyield:
2039+
genTaskyieldOp(converter, symTable, semaCtx, eval, loc, queue, item);
2040+
break;
20282041
case llvm::omp::Directive::OMPD_teams:
20292042
genTeamsOp(converter, symTable, semaCtx, eval, loc, clauses, queue, item);
20302043
break;
2044+
case llvm::omp::Directive::OMPD_tile:
2045+
case llvm::omp::Directive::OMPD_unroll:
2046+
TODO(loc, "Unhandled loop directive (" +
2047+
llvm::omp::getOpenMPDirectiveName(dir) + ")");
20312048
// case llvm::omp::Directive::OMPD_workdistribute:
20322049
case llvm::omp::Directive::OMPD_workshare:
20332050
// FIXME: Workshare is not a commonly used OpenMP construct, an
20342051
// implementation for this feature will come later. For the codes
20352052
// that use this construct, add a single construct for now.
20362053
genSingleOp(converter, symTable, semaCtx, eval, loc, clauses, queue, item);
20372054
break;
2055+
20382056
// Composite constructs
20392057
case llvm::omp::Directive::OMPD_distribute_parallel_do:
20402058
genCompositeDistributeParallelDo(converter, symTable, semaCtx, eval, loc,
@@ -2174,45 +2192,14 @@ static void genOMP(Fortran::lower::AbstractConverter &converter,
21742192
ConstructQueue queue{
21752193
buildConstructQueue(converter.getFirOpBuilder().getModule(), semaCtx,
21762194
eval, directive.source, directive.v, clauses)};
2177-
2178-
switch (directive.v) {
2179-
default:
2180-
break;
2181-
case llvm::omp::Directive::OMPD_barrier:
2182-
genBarrierOp(converter, symTable, semaCtx, eval, currentLocation, queue,
2183-
queue.begin());
2184-
break;
2185-
case llvm::omp::Directive::OMPD_taskwait:
2186-
genTaskwaitOp(converter, symTable, semaCtx, eval, currentLocation, clauses,
2187-
queue, queue.begin());
2188-
break;
2189-
case llvm::omp::Directive::OMPD_taskyield:
2190-
genTaskyieldOp(converter, symTable, semaCtx, eval, currentLocation, queue,
2191-
queue.begin());
2192-
break;
2193-
case llvm::omp::Directive::OMPD_target_data:
2194-
genTargetDataOp(converter, symTable, semaCtx, eval, currentLocation,
2195-
clauses, queue, queue.begin());
2196-
break;
2197-
case llvm::omp::Directive::OMPD_target_enter_data:
2198-
genTargetEnterExitUpdateDataOp<mlir::omp::TargetEnterDataOp>(
2199-
converter, symTable, semaCtx, currentLocation, clauses, queue,
2200-
queue.begin());
2201-
break;
2202-
case llvm::omp::Directive::OMPD_target_exit_data:
2203-
genTargetEnterExitUpdateDataOp<mlir::omp::TargetExitDataOp>(
2204-
converter, symTable, semaCtx, currentLocation, clauses, queue,
2205-
queue.begin());
2206-
break;
2207-
case llvm::omp::Directive::OMPD_target_update:
2208-
genTargetEnterExitUpdateDataOp<mlir::omp::TargetUpdateOp>(
2209-
converter, symTable, semaCtx, currentLocation, clauses, queue,
2210-
queue.begin());
2211-
break;
2212-
case llvm::omp::Directive::OMPD_ordered:
2195+
if (directive.v == llvm::omp::Directive::OMPD_ordered) {
2196+
// Standalone "ordered" directive.
22132197
genOrderedOp(converter, symTable, semaCtx, eval, currentLocation, clauses,
22142198
queue, queue.begin());
2215-
break;
2199+
} else {
2200+
// Dispatch handles the "block-associated" variant of "ordered".
2201+
genOMPDispatch(converter, symTable, semaCtx, eval, currentLocation, queue,
2202+
queue.begin());
22162203
}
22172204
}
22182205

@@ -2466,8 +2453,7 @@ genOMP(Fortran::lower::AbstractConverter &converter,
24662453
ConstructQueue queue{buildConstructQueue(
24672454
converter.getFirOpBuilder().getModule(), semaCtx, eval,
24682455
sectionConstruct.source, llvm::omp::Directive::OMPD_section, {})};
2469-
genSectionOp(converter, symTable, semaCtx, eval, loc,
2470-
/*clauses=*/{}, queue, queue.begin());
2456+
genOMPDispatch(converter, symTable, semaCtx, eval, loc, queue, queue.begin());
24712457
}
24722458

24732459
static void

0 commit comments

Comments
 (0)