[flang-commits] [flang] [Flang][OpenMP]Support for lowering task_reduction and in_reduction to MLIR (PR #111155)
Sergio Afonso via flang-commits
flang-commits at lists.llvm.org
Thu Jan 9 09:00:31 PST 2025
================
@@ -1929,13 +1936,28 @@ genTaskgroupOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
const ConstructQueue &queue,
ConstructQueue::const_iterator item) {
mlir::omp::TaskgroupOperands clauseOps;
- genTaskgroupClauses(converter, semaCtx, item->clauses, loc, clauseOps);
+ llvm::SmallVector<const semantics::Symbol *> taskReductionSyms;
+ genTaskgroupClauses(converter, semaCtx, item->clauses, loc, clauseOps,
+ taskReductionSyms);
- return genOpWithBody<mlir::omp::TaskgroupOp>(
+ EntryBlockArgs taskgroupArgs;
+ taskgroupArgs.taskReduction.syms = taskReductionSyms;
+ taskgroupArgs.taskReduction.vars = clauseOps.taskReductionVars;
+
+ auto genRegionEntryCB = [&](mlir::Operation *op) {
+ genEntryBlock(converter.getFirOpBuilder(), taskgroupArgs, op->getRegion(0));
+ return llvm::to_vector(taskgroupArgs.getSyms());
----------------
skatrak wrote:
This is missing the binding of the symbols to the new entry block arguments:
```suggestion
genEntryBlock(converter.getFirOpBuilder(), taskgroupArgs, op->getRegion(0));
bindEntryBlockArgs(converter,
llvm::cast<mlir::omp::BlockArgOpenMPOpInterface>(op),
taskgroupArgs);
return llvm::to_vector(taskgroupArgs.getSyms());
```
https://github.com/llvm/llvm-project/pull/111155
More information about the flang-commits
mailing list