[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