[flang-commits] [flang] [Flang][OpenMP] Support iterator modifier in map and motion clauses (PR #197757)
via flang-commits
flang-commits at lists.llvm.org
Mon Jul 6 16:52:25 PDT 2026
================
@@ -723,6 +723,21 @@ class MapInfoFinalizationPass
if (auto mapUser = llvm::dyn_cast<mlir::omp::MapInfoOp>(user))
return getFirstTargetUser(mapUser);
+
+ // MapInfoOp inside an omp.iterator body is yielded back to the iterator,
+ // whose result is used by the target op.
+ if (llvm::isa<mlir::omp::YieldOp>(user)) {
+ if (auto iterOp = user->getParentOfType<mlir::omp::IteratorOp>()) {
+ for (auto *iterUser : iterOp->getUsers()) {
+ if (llvm::isa<mlir::omp::TargetOp, mlir::omp::TargetDataOp,
+ mlir::omp::TargetUpdateOp,
+ mlir::omp::TargetExitDataOp,
+ mlir::omp::TargetEnterDataOp,
+ mlir::omp::DeclareMapperInfoOp>(iterUser))
+ return iterUser;
+ }
+ }
+ }
----------------
MattPD wrote:
This `YieldOp` branch in `getFirstTargetUser` looks unreachable. The finalization walks now skip iterator-nested maps via `isNestedInIterator`, so no call site reaches this branch with an iterator-nested map. Is it still reachable, or can it be removed in favor of the guards?
https://github.com/llvm/llvm-project/pull/197757
More information about the flang-commits
mailing list