[flang-commits] [flang] [mlir] [flang][openmp] Changes for invoking scan Op (PR #123254)
Sergio Afonso via flang-commits
flang-commits at lists.llvm.org
Thu Jan 23 03:48:32 PST 2025
================
@@ -514,18 +515,36 @@ static bool doReductionByRef(mlir::Value reductionVar) {
return false;
}
+mlir::omp::ReductionModifier
+translateReductionModifier(const ReductionModifier &m) {
+ switch (m) {
+ case ReductionModifier::Default:
+ return mlir::omp::ReductionModifier::defaultmod;
+ case ReductionModifier::Inscan:
+ return mlir::omp::ReductionModifier::inscan;
+ case ReductionModifier::Task:
+ return mlir::omp::ReductionModifier::task;
+ }
+ return mlir::omp::ReductionModifier::defaultmod;
+}
+
void ReductionProcessor::addDeclareReduction(
mlir::Location currentLocation, lower::AbstractConverter &converter,
const omp::clause::Reduction &reduction,
llvm::SmallVectorImpl<mlir::Value> &reductionVars,
llvm::SmallVectorImpl<bool> &reduceVarByRef,
llvm::SmallVectorImpl<mlir::Attribute> &reductionDeclSymbols,
- llvm::SmallVectorImpl<const semantics::Symbol *> &reductionSymbols) {
+ llvm::SmallVectorImpl<const semantics::Symbol *> &reductionSymbols,
+ mlir::omp::ReductionModifierAttr *reductionMod) {
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
- if (std::get<std::optional<omp::clause::Reduction::ReductionModifier>>(
- reduction.t))
- TODO(currentLocation, "Reduction modifiers are not supported");
+ auto mod = std::get<std::optional<ReductionModifier>>(reduction.t);
+ if (mod.has_value() && (mod.value() != ReductionModifier::Inscan)) {
+ std::string modStr = "default";
+ if (mod.value() == ReductionModifier::Task)
+ modStr = "task";
+ TODO(currentLocation, "Reduction modifier " + modStr + " is not supported");
+ }
----------------
skatrak wrote:
Do we need to emit a TODO when using the 'default' modifier? Reading the spec, it appears to me that it should have the same behavior as not setting a modifier, so it would be supported.
I might be missing something, so let me know. Otherwise, we can just emit a TODO when encountering the 'task' modifier.
https://github.com/llvm/llvm-project/pull/123254
More information about the flang-commits
mailing list