[flang-commits] [flang] [Flang][OpenMP] Process motion clauses in a single call (NFC) (PR #108046)
Sergio Afonso via flang-commits
flang-commits at lists.llvm.org
Wed Sep 11 03:16:03 PDT 2024
================
@@ -1114,6 +1114,37 @@ bool ClauseProcessor::processUseDevicePtr(
return clauseFound;
}
+bool ClauseProcessor::processMotionClauses(lower::StatementContext &stmtCtx,
+ mlir::omp::MapClauseOps &result) {
+ std::map<const semantics::Symbol *,
+ llvm::SmallVector<OmpMapMemberIndicesData>>
+ parentMemberIndices;
+ llvm::SmallVector<const semantics::Symbol *> mapSymbols;
+
+ auto callbackFn = [&](const auto &clause, const parser::CharBlock &source) {
+ mlir::Location clauseLocation = converter.genLocation(source);
+
+ // TODO Support motion modifiers: present, mapper, iterator.
+ constexpr llvm::omp::OpenMPOffloadMappingFlags mapTypeBits =
+ std::is_same_v<llvm::remove_cvref_t<decltype(clause)>, omp::clause::To>
+ ? llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TO
+ : llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_FROM;
+
+ processMapObjects(stmtCtx, clauseLocation, std::get<ObjectList>(clause.t),
+ mapTypeBits, parentMemberIndices, result.mapVars,
+ &mapSymbols);
+ };
+
+ bool clauseFound = findRepeatableClause<omp::clause::To>(callbackFn);
+ clauseFound =
+ findRepeatableClause<omp::clause::From>(callbackFn) || clauseFound;
----------------
skatrak wrote:
I really dislike how it looks using the logical `or` as well. Though I'm not sure what the LLVM project position is with respect to using bitwise operators to prevent short-circuit evaluation, since it may not be obvious to everyone what's being done there.
https://github.com/llvm/llvm-project/pull/108046
More information about the flang-commits
mailing list