================ @@ -2306,18 +2405,81 @@ static void processMapMembersWithParent( llvm::OpenMPIRBuilder::DeviceInfoTy::None); combinedInfo.Names.emplace_back( LLVM::createMappingInformation(memberClause.getLoc(), ompBuilder)); - - combinedInfo.BasePointers.emplace_back(mapData.BasePointers[memberDataIdx]); + combinedInfo.BasePointers.emplace_back(mapData.BasePointers[mapDataIndex]); combinedInfo.Pointers.emplace_back(mapData.Pointers[memberDataIdx]); combinedInfo.Sizes.emplace_back(mapData.Sizes[memberDataIdx]); } } +static void +processIndividualMap(MapInfoData &mapData, size_t mapDataIdx, + llvm::OpenMPIRBuilder::MapInfosTy &combinedInfo, + bool isTargetParams, int mapDataParentIdx = -1) { + // Declare Target Mappings are excluded from being marked as + // OMP_MAP_TARGET_PARAM as they are not passed as parameters, they're + // marked with OMP_MAP_PTR_AND_OBJ instead. + auto mapFlag = mapData.Types[mapDataIdx]; + auto mapInfoOp = + dyn_cast<mlir::omp::MapInfoOp>(mapData.MapClause[mapDataIdx]); + + bool isPtrTy = checkIfPointerMap(mapInfoOp); + if (isPtrTy) + mapFlag |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_PTR_AND_OBJ; + + if (isTargetParams && !mapData.IsDeclareTarget[mapDataIdx]) + mapFlag |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_TARGET_PARAM; + + if (mapInfoOp.getMapCaptureType().value() == + mlir::omp::VariableCaptureKind::ByCopy && + !isPtrTy) + mapFlag |= llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_LITERAL; + + // if we're provided a mapDataParentIdx, then the data being mapped is + // part of a larger object (in a parent <-> member mapping) and in this + // case our BasePointer should be the parent. + if (mapDataParentIdx >= 0) + combinedInfo.BasePointers.emplace_back( + mapData.BasePointers[mapDataParentIdx]); + else + combinedInfo.BasePointers.emplace_back(mapData.BasePointers[mapDataIdx]); + + combinedInfo.Pointers.emplace_back(mapData.Pointers[mapDataIdx]); + combinedInfo.DevicePointers.emplace_back(mapData.DevicePointers[mapDataIdx]); + combinedInfo.Names.emplace_back(mapData.Names[mapDataIdx]); + combinedInfo.Types.emplace_back(mapFlag); + combinedInfo.Sizes.emplace_back(mapData.Sizes[mapDataIdx]); +} + static void processMapWithMembersOf( LLVM::ModuleTranslation &moduleTranslation, llvm::IRBuilderBase &builder, llvm::OpenMPIRBuilder &ompBuilder, DataLayout &dl, llvm::OpenMPIRBuilder::MapInfosTy &combinedInfo, MapInfoData &mapData, uint64_t mapDataIndex, bool isTargetParams) { + auto parentClause = + mlir::dyn_cast<mlir::omp::MapInfoOp>(mapData.MapClause[mapDataIndex]); + + // If we have a partial map (no parent referneced in the map clauses of the ---------------- skatrak wrote:
```suggestion // If we have a partial map (no parent referenced in the map clauses of the ``` https://github.com/llvm/llvm-project/pull/82852 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits