@@ -1804,6 +1804,21 @@ static void genTaskgroupClauses(lower::AbstractConverter &converter,
18041804 llvm::omp::Directive::OMPD_taskgroup);
18051805}
18061806
1807+ static void genTaskloopClauses (lower::AbstractConverter &converter,
1808+ semantics::SemanticsContext &semaCtx,
1809+ const List<Clause> &clauses, mlir::Location loc,
1810+ mlir::omp::TaskloopOperands &clauseOps) {
1811+
1812+ ClauseProcessor cp (converter, semaCtx, clauses);
1813+
1814+ cp.processTODO <clause::Allocate, clause::Collapse, clause::Default,
1815+ clause::Final, clause::Grainsize, clause::If,
1816+ clause::InReduction, clause::Lastprivate, clause::Mergeable,
1817+ clause::Nogroup, clause::NumTasks, clause::Priority,
1818+ clause::Reduction, clause::Shared, clause::Untied>(
1819+ loc, llvm::omp::Directive::OMPD_taskloop);
1820+ }
1821+
18071822static void genTaskwaitClauses (lower::AbstractConverter &converter,
18081823 semantics::SemanticsContext &semaCtx,
18091824 const List<Clause> &clauses, mlir::Location loc,
@@ -3256,8 +3271,30 @@ static mlir::omp::TaskloopOp genStandaloneTaskloop(
32563271 semantics::SemanticsContext &semaCtx, lower::pft::Evaluation &eval,
32573272 mlir::Location loc, const ConstructQueue &queue,
32583273 ConstructQueue::const_iterator item) {
3259- TODO (loc, " Taskloop construct" );
3260- return nullptr ;
3274+ mlir::omp::TaskloopOperands taskloopClauseOps;
3275+ genTaskloopClauses (converter, semaCtx, item->clauses , loc, taskloopClauseOps);
3276+
3277+ DataSharingProcessor dsp (converter, semaCtx, item->clauses , eval,
3278+ /* shouldCollectPreDeterminedSymbols=*/ true ,
3279+ enableDelayedPrivatization, symTable);
3280+ dsp.processStep1 (&taskloopClauseOps);
3281+
3282+ mlir::omp::LoopNestOperands loopNestClauseOps;
3283+ llvm::SmallVector<const semantics::Symbol *> iv;
3284+ genLoopNestClauses (converter, semaCtx, eval, item->clauses , loc,
3285+ loopNestClauseOps, iv);
3286+
3287+ EntryBlockArgs taskloopArgs;
3288+ taskloopArgs.priv .syms = dsp.getDelayedPrivSymbols ();
3289+ taskloopArgs.priv .vars = taskloopClauseOps.privateVars ;
3290+
3291+ auto taskLoopOp = genWrapperOp<mlir::omp::TaskloopOp>(
3292+ converter, loc, taskloopClauseOps, taskloopArgs);
3293+
3294+ genLoopNestOp (converter, symTable, semaCtx, eval, loc, queue, item,
3295+ loopNestClauseOps, iv, {{taskLoopOp, taskloopArgs}},
3296+ llvm::omp::Directive::OMPD_taskloop, dsp);
3297+ return taskLoopOp;
32613298}
32623299
32633300// ===----------------------------------------------------------------------===//
0 commit comments