================ @@ -2122,6 +2124,66 @@ void collectMapDataFromMapOperands(MapInfoData &mapData, } } +static int getMapDataMemberIdx(MapInfoData &mapData, + mlir::omp::MapInfoOp memberOp) { + auto *res = llvm::find(mapData.MapClause, memberOp); + assert(res != mapData.MapClause.end() && + "MapInfoOp for member not found in MapData, cannot return index"); + return std::distance(mapData.MapClause.begin(), res); +} + +static mlir::omp::MapInfoOp +getFirstOrLastMappedMemberPtr(mlir::omp::MapInfoOp mapInfo, bool first) { + mlir::DenseIntElementsAttr indexAttr = mapInfo.getMembersIndexAttr(); + + // Only 1 member has been mapped, we can return it. + if (indexAttr.size() == 1) + if (auto mapOp = mlir::dyn_cast<mlir::omp::MapInfoOp>( + mapInfo.getMembers()[0].getDefiningOp())) + return mapOp; + + llvm::ArrayRef<int64_t> shape = indexAttr.getShapedType().getShape(); + std::vector<size_t> indices(shape[0]); + std::iota(indices.begin(), indices.end(), 0); + + llvm::sort( + indices.begin(), indices.end(), [&](const size_t a, const size_t b) { + for (int i = 0; + i < shape[1]; + ++i) { + int aIndex = indexAttr.getValues<int32_t>()[a * shape[1] + i]; + int bIndex = indexAttr.getValues<int32_t>()[b * shape[1] + i]; ---------------- skatrak wrote:
Nit: Extract `indexAttr.getValues<int32_t>()` out of the lambda. ```suggestion int aIndex = indexAttrValues[a * shape[1] + i]; int bIndex = indexAttrValues[b * shape[1] + i]; ``` 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