@@ -344,6 +344,22 @@ bool ClauseProcessor::processDistSchedule(
344344 return false ;
345345}
346346
347+ bool ClauseProcessor::processExclusive (
348+ mlir::Location currentLocation,
349+ mlir::omp::ExclusiveClauseOps &result) const {
350+ return findRepeatableClause<omp::clause::Exclusive>(
351+ [&](const omp::clause::Exclusive &clause, const parser::CharBlock &) {
352+ for (const Object &object : clause.v ) {
353+ semantics::Symbol *sym = object.sym ();
354+ mlir::Value symVal = converter.getSymbolAddress (*sym);
355+ if (auto declOp = symVal.getDefiningOp <hlfir::DeclareOp>()) {
356+ symVal = declOp.getBase ();
357+ }
358+ result.exclusiveVars .push_back (symVal);
359+ }
360+ });
361+ }
362+
347363bool ClauseProcessor::processFilter (lower::StatementContext &stmtCtx,
348364 mlir::omp::FilterClauseOps &result) const {
349365 if (auto *clause = findUniqueClause<omp::clause::Filter>()) {
@@ -380,6 +396,22 @@ bool ClauseProcessor::processHint(mlir::omp::HintClauseOps &result) const {
380396 return false ;
381397}
382398
399+ bool ClauseProcessor::processInclusive (
400+ mlir::Location currentLocation,
401+ mlir::omp::InclusiveClauseOps &result) const {
402+ return findRepeatableClause<omp::clause::Inclusive>(
403+ [&](const omp::clause::Inclusive &clause, const parser::CharBlock &) {
404+ for (const Object &object : clause.v ) {
405+ const semantics::Symbol *symbol = object.sym ();
406+ mlir::Value symVal = converter.getSymbolAddress (*symbol);
407+ // if (auto declOp = symVal.getDefiningOp<hlfir::DeclareOp>()) {
408+ // symVal = declOp.getBase();
409+ // }
410+ result.inclusiveVars .push_back (symVal);
411+ }
412+ });
413+ }
414+
383415bool ClauseProcessor::processMergeable (
384416 mlir::omp::MergeableClauseOps &result) const {
385417 return markClauseOccurrence<omp::clause::Mergeable>(result.mergeable );
@@ -1135,10 +1167,9 @@ bool ClauseProcessor::processReduction(
11351167 llvm::SmallVector<mlir::Attribute> reductionDeclSymbols;
11361168 llvm::SmallVector<const semantics::Symbol *> reductionSyms;
11371169 ReductionProcessor rp;
1138- rp.addDeclareReduction (currentLocation, converter, clause,
1139- reductionVars, reduceVarByRef,
1140- reductionDeclSymbols, reductionSyms);
1141-
1170+ rp.addDeclareReduction (
1171+ currentLocation, converter, clause, reductionVars, reduceVarByRef,
1172+ reductionDeclSymbols, reductionSyms, &result.reductionMod );
11421173 // Copy local lists into the output.
11431174 llvm::copy (reductionVars, std::back_inserter (result.reductionVars ));
11441175 llvm::copy (reduceVarByRef, std::back_inserter (result.reductionByref ));
0 commit comments