@@ -1774,34 +1774,34 @@ static void genTargetEnterExitUpdateDataClauses(
17741774 cp.processNowait (clauseOps);
17751775}
17761776
1777- static void genTaskClauses (lower::AbstractConverter &converter,
1778- semantics::SemanticsContext &semaCtx,
1779- lower::SymMap &symTable,
1780- lower::StatementContext &stmtCtx ,
1781- const List<Clause> &clauses, mlir::Location loc ,
1782- mlir::omp::TaskOperands &clauseOps ) {
1777+ static void genTaskClauses (
1778+ lower::AbstractConverter &converter, semantics::SemanticsContext &semaCtx,
1779+ lower::SymMap &symTable, lower::StatementContext &stmtCtx ,
1780+ const List<Clause> &clauses, mlir::Location loc ,
1781+ mlir::omp::TaskOperands &clauseOps ,
1782+ llvm::SmallVectorImpl< const semantics::Symbol *> &inReductionSyms ) {
17831783 ClauseProcessor cp (converter, semaCtx, clauses);
17841784 cp.processAllocate (clauseOps);
17851785 cp.processDepend (symTable, stmtCtx, clauseOps);
17861786 cp.processFinal (stmtCtx, clauseOps);
17871787 cp.processIf (llvm::omp::Directive::OMPD_task, clauseOps);
1788+ cp.processInReduction (loc, clauseOps, inReductionSyms);
17881789 cp.processMergeable (clauseOps);
17891790 cp.processPriority (stmtCtx, clauseOps);
17901791 cp.processUntied (clauseOps);
17911792 cp.processDetach (clauseOps);
17921793
1793- cp.processTODO <clause::Affinity, clause::InReduction>(
1794- loc, llvm::omp::Directive::OMPD_task);
1794+ cp.processTODO <clause::Affinity>(loc, llvm::omp::Directive::OMPD_task);
17951795}
17961796
1797- static void genTaskgroupClauses (lower::AbstractConverter &converter,
1798- semantics::SemanticsContext &semaCtx,
1799- const List<Clause> &clauses, mlir::Location loc,
1800- mlir::omp::TaskgroupOperands &clauseOps) {
1797+ static void genTaskgroupClauses (
1798+ lower::AbstractConverter &converter, semantics::SemanticsContext &semaCtx,
1799+ const List<Clause> &clauses, mlir::Location loc,
1800+ mlir::omp::TaskgroupOperands &clauseOps,
1801+ llvm::SmallVectorImpl<const semantics::Symbol *> &taskReductionSyms) {
18011802 ClauseProcessor cp (converter, semaCtx, clauses);
18021803 cp.processAllocate (clauseOps);
1803- cp.processTODO <clause::TaskReduction>(loc,
1804- llvm::omp::Directive::OMPD_taskgroup);
1804+ cp.processTaskReduction (loc, clauseOps, taskReductionSyms);
18051805}
18061806
18071807static void genTaskloopClauses (lower::AbstractConverter &converter,
@@ -2496,8 +2496,9 @@ genTaskOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
24962496 mlir::Location loc, const ConstructQueue &queue,
24972497 ConstructQueue::const_iterator item) {
24982498 mlir::omp::TaskOperands clauseOps;
2499+ llvm::SmallVector<const semantics::Symbol *> inReductionSyms;
24992500 genTaskClauses (converter, semaCtx, symTable, stmtCtx, item->clauses , loc,
2500- clauseOps);
2501+ clauseOps, inReductionSyms );
25012502
25022503 if (!enableDelayedPrivatization)
25032504 return genOpWithBody<mlir::omp::TaskOp>(
@@ -2514,6 +2515,8 @@ genTaskOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
25142515 EntryBlockArgs taskArgs;
25152516 taskArgs.priv .syms = dsp.getDelayedPrivSymbols ();
25162517 taskArgs.priv .vars = clauseOps.privateVars ;
2518+ taskArgs.inReduction .syms = inReductionSyms;
2519+ taskArgs.inReduction .vars = clauseOps.inReductionVars ;
25172520
25182521 return genOpWithBody<mlir::omp::TaskOp>(
25192522 OpWithBodyGenInfo (converter, symTable, semaCtx, loc, eval,
@@ -2531,12 +2534,19 @@ genTaskgroupOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
25312534 const ConstructQueue &queue,
25322535 ConstructQueue::const_iterator item) {
25332536 mlir::omp::TaskgroupOperands clauseOps;
2534- genTaskgroupClauses (converter, semaCtx, item->clauses , loc, clauseOps);
2537+ llvm::SmallVector<const semantics::Symbol *> taskReductionSyms;
2538+ genTaskgroupClauses (converter, semaCtx, item->clauses , loc, clauseOps,
2539+ taskReductionSyms);
2540+
2541+ EntryBlockArgs taskgroupArgs;
2542+ taskgroupArgs.taskReduction .syms = taskReductionSyms;
2543+ taskgroupArgs.taskReduction .vars = clauseOps.taskReductionVars ;
25352544
25362545 return genOpWithBody<mlir::omp::TaskgroupOp>(
25372546 OpWithBodyGenInfo (converter, symTable, semaCtx, loc, eval,
25382547 llvm::omp::Directive::OMPD_taskgroup)
2539- .setClauses (&item->clauses ),
2548+ .setClauses (&item->clauses )
2549+ .setEntryBlockArgs (&taskgroupArgs),
25402550 queue, item, clauseOps);
25412551}
25422552
0 commit comments