[llvm-branch-commits] [flang] [llvm] [mlir] [OpenMP][MLIR] Modify OpenMP Dialect lowering to support attach mapping (PR #179023)
Sergio Afonso via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Apr 6 08:28:47 PDT 2026
================
@@ -4959,6 +5012,112 @@ static bool checkIfPointerMap(omp::MapInfoOp mapOp) {
return false;
}
+static void
+processIndividualMap(llvm::IRBuilderBase &builder,
+ llvm::OpenMPIRBuilder &ompBuilder, MapInfoData &mapData,
+ size_t mapDataIdx, MapInfosTy &combinedInfo,
+ TargetDirectiveEnumTy targetDirective,
+ llvm::omp::OpenMPOffloadMappingFlags memberOfFlag =
+ llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_NONE,
+ bool isTargetParam = true, int mapDataParentIdx = -1) {
+ auto mapFlag = mapData.Types[mapDataIdx];
+ auto mapInfoOp = llvm::cast<omp::MapInfoOp>(mapData.MapClause[mapDataIdx]);
+
+ bool isPtrTy = checkIfPointerMap(mapInfoOp);
+ bool isAttachMap = ((convertClauseMapFlags(mapInfoOp.getMapType()) &
+ llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_ATTACH) ==
+ llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_ATTACH);
+
+ // Declare target variables are not passed to the kernel, and for the moment
+ // attach maps are not passed to the kernel, however, it is possible to create
+ // attach maps that transfer data and thus can be kernel arguments, but our
+ // existing frontend does not do this.
+ if (isTargetParam &&
+ (targetDirective == TargetDirectiveEnumTy::Target &&
+ !mapData.IsDeclareTarget[mapDataIdx]) &&
+ !isAttachMap)
+ mapFlag |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TARGET_PARAM;
+
+ if (mapInfoOp.getMapCaptureType() == omp::VariableCaptureKind::ByCopy &&
+ !isPtrTy)
+ mapFlag |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_LITERAL;
+
+ // if we have a pointer and it's part of a MEMBER_OF mapping we do not apply
+ // MEMBER_OF, as the runtime currently has a work-around that utilises
+ // MEMBER_OF to prevent reference updating in certain scenarios instead of
+ // target_param, however, this causes a noticable issue in cases where we
+ // map some data (Fortran descriptor primarily at the moment), alter it on
+ // the host, and then expect it to not be updated in a subsequent impliict map
+ // (such as an implicit map on a target).
----------------
skatrak wrote:
```suggestion
// If we have a pointer and it's part of a MEMBER_OF mapping we do not apply
// MEMBER_OF, as the runtime currently has a work-around that utilises
// MEMBER_OF to prevent reference updating in certain scenarios instead of
// target_param. However, this causes a noticeable issue in cases where we
// map some data (Fortran descriptor primarily at the moment), alter it on
// the host, and then expect it to not be updated in a subsequent implicit map
// (such as an implicit map on a target).
```
https://github.com/llvm/llvm-project/pull/179023
More information about the llvm-branch-commits
mailing list