Skip to content

Commit 82b9eb1

Browse files
authored
[Flang][OpenMP] Support teams reductions lowering (#122683)
This patch adds PFT to MLIR lowering of teams reductions. Since there is still no MLIR to LLVM IR translation implemented, compilation of programs including these constructs will still trigger not-yet-implemented errors.
1 parent 73b0e8a commit 82b9eb1

File tree

3 files changed

+42
-21
lines changed

3 files changed

+42
-21
lines changed

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1336,19 +1336,18 @@ static void genWorkshareClauses(lower::AbstractConverter &converter,
13361336
cp.processNowait(clauseOps);
13371337
}
13381338

1339-
static void genTeamsClauses(lower::AbstractConverter &converter,
1340-
semantics::SemanticsContext &semaCtx,
1341-
lower::StatementContext &stmtCtx,
1342-
const List<Clause> &clauses, mlir::Location loc,
1343-
mlir::omp::TeamsOperands &clauseOps) {
1339+
static void genTeamsClauses(
1340+
lower::AbstractConverter &converter, semantics::SemanticsContext &semaCtx,
1341+
lower::StatementContext &stmtCtx, const List<Clause> &clauses,
1342+
mlir::Location loc, mlir::omp::TeamsOperands &clauseOps,
1343+
llvm::SmallVectorImpl<const semantics::Symbol *> &reductionSyms) {
13441344
ClauseProcessor cp(converter, semaCtx, clauses);
13451345
cp.processAllocate(clauseOps);
13461346
cp.processIf(llvm::omp::Directive::OMPD_teams, clauseOps);
13471347
cp.processNumTeams(stmtCtx, clauseOps);
13481348
cp.processThreadLimit(stmtCtx, clauseOps);
1349+
cp.processReduction(loc, clauseOps, reductionSyms);
13491350
// TODO Support delayed privatization.
1350-
1351-
cp.processTODO<clause::Reduction>(loc, llvm::omp::Directive::OMPD_teams);
13521351
}
13531352

13541353
static void genWsloopClauses(
@@ -2015,13 +2014,29 @@ genTeamsOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
20152014
mlir::Location loc, const ConstructQueue &queue,
20162015
ConstructQueue::const_iterator item) {
20172016
lower::StatementContext stmtCtx;
2017+
20182018
mlir::omp::TeamsOperands clauseOps;
2019-
genTeamsClauses(converter, semaCtx, stmtCtx, item->clauses, loc, clauseOps);
2019+
llvm::SmallVector<const semantics::Symbol *> reductionSyms;
2020+
genTeamsClauses(converter, semaCtx, stmtCtx, item->clauses, loc, clauseOps,
2021+
reductionSyms);
2022+
2023+
EntryBlockArgs args;
2024+
// TODO: Add private syms and vars.
2025+
args.reduction.syms = reductionSyms;
2026+
args.reduction.vars = clauseOps.reductionVars;
2027+
2028+
auto genRegionEntryCB = [&](mlir::Operation *op) {
2029+
genEntryBlock(converter.getFirOpBuilder(), args, op->getRegion(0));
2030+
bindEntryBlockArgs(
2031+
converter, llvm::cast<mlir::omp::BlockArgOpenMPOpInterface>(op), args);
2032+
return llvm::to_vector(args.getSyms());
2033+
};
20202034

20212035
return genOpWithBody<mlir::omp::TeamsOp>(
20222036
OpWithBodyGenInfo(converter, symTable, semaCtx, loc, eval,
20232037
llvm::omp::Directive::OMPD_teams)
2024-
.setClauses(&item->clauses),
2038+
.setClauses(&item->clauses)
2039+
.setGenRegionEntryCb(genRegionEntryCB),
20252040
queue, item, clauseOps);
20262041
}
20272042

flang/test/Lower/OpenMP/Todo/reduction-teams.f90

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
! RUN: bbc -emit-hlfir -fopenmp -o - %s 2>&1 | FileCheck %s
2+
! RUN: %flang_fc1 -emit-hlfir -fopenmp -o - %s 2>&1 | FileCheck %s
3+
4+
! CHECK: omp.declare_reduction @[[RED:.*]] : i32 init {
5+
6+
! CHECK: func.func @_QPreduction_teams() {
7+
subroutine reduction_teams()
8+
integer :: i
9+
i = 0
10+
11+
! CHECK: omp.teams reduction(@[[RED]] %{{.*}}#0 -> %[[PRIV_I:.*]] : !fir.ref<i32>) {
12+
!$omp teams reduction(+:i)
13+
! CHECK: %[[DECL_I:.*]]:2 = hlfir.declare %[[PRIV_I]]
14+
! CHECK: %{{.*}} = fir.load %[[DECL_I]]#0 : !fir.ref<i32>
15+
! CHECK: hlfir.assign %{{.*}} to %[[DECL_I]]#0 : i32, !fir.ref<i32>
16+
i = i + 1
17+
!$omp end teams
18+
end subroutine reduction_teams

0 commit comments

Comments
 (0)