================ @@ -218,17 +223,34 @@ bool ClauseProcessor::processMotionClauses( // Explicit map captures are captured ByRef by default, // optimisation passes may alter this to ByCopy or other capture // types to optimise - mlir::Value mapOp = createMapInfoOp( + mlir::omp::MapInfoOp mapOp = createMapInfoOp( firOpBuilder, clauseLocation, symAddr, mlir::Value{}, - asFortran.str(), bounds, {}, + asFortran.str(), bounds, {}, mlir::DenseIntElementsAttr{}, static_cast< std::underlying_type_t<llvm::omp::OpenMPOffloadMappingFlags>>( mapTypeBits), mlir::omp::VariableCaptureKind::ByRef, symAddr.getType()); - result.mapVars.push_back(mapOp); + if (object.id()->owner().IsDerivedType()) { + if (auto dataRef{ExtractDataRef(object.designator)}) { + const Fortran::semantics::Symbol *parentSym = + &dataRef->GetFirstSymbol(); + assert(parentSym && + "Could not find parent symbol during lower of " + "a component member in OpenMP map clause"); + parentMemberIndices[parentSym].push_back( + {generateMemberPlacementIndices(object, semaCtx), mapOp}); + } + } else { + result.mapVars.push_back(mapOp); + mapSymbols.push_back(object.id()); + } } }); + + insertChildMapInfoIntoParent(converter, parentMemberIndices, result.mapVars, + nullptr, nullptr, &mapSymbols); ---------------- skatrak wrote:
Nit: Add comments for unnamed arguments. https://github.com/llvm/llvm-project/pull/82853 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits