[llvm-branch-commits] [flang] [llvm] [mlir] [MLIR][OpenMP] Introduce overlapped record type map support (PR #119588)
Sergio Afonso via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Jan 24 06:38:57 PST 2025
================
@@ -2979,39 +2979,61 @@ static int getMapDataMemberIdx(MapInfoData &mapData, omp::MapInfoOp memberOp) {
return std::distance(mapData.MapClause.begin(), res);
}
-static omp::MapInfoOp getFirstOrLastMappedMemberPtr(omp::MapInfoOp mapInfo,
- bool first) {
- ArrayAttr indexAttr = mapInfo.getMembersIndexAttr();
- // Only 1 member has been mapped, we can return it.
- if (indexAttr.size() == 1)
- return cast<omp::MapInfoOp>(mapInfo.getMembers()[0].getDefiningOp());
+static void sortMapIndices(llvm::SmallVector<size_t> &indices,
+ mlir::omp::MapInfoOp mapInfo,
+ bool ascending = true) {
+ mlir::ArrayAttr indexAttr = mapInfo.getMembersIndexAttr();
+ if (indexAttr.empty() || indexAttr.size() == 1 || indices.empty() ||
+ indices.size() == 1)
+ return;
- llvm::SmallVector<size_t> indices(indexAttr.size());
- std::iota(indices.begin(), indices.end(), 0);
+ llvm::sort(
+ indices.begin(), indices.end(), [&](const size_t a, const size_t b) {
+ auto memberIndicesA = mlir::cast<mlir::ArrayAttr>(indexAttr[a]);
+ auto memberIndicesB = mlir::cast<mlir::ArrayAttr>(indexAttr[b]);
+
+ size_t smallestMember = memberIndicesA.size() < memberIndicesB.size()
+ ? memberIndicesA.size()
+ : memberIndicesB.size();
- llvm::sort(indices.begin(), indices.end(),
- [&](const size_t a, const size_t b) {
- auto memberIndicesA = cast<ArrayAttr>(indexAttr[a]);
- auto memberIndicesB = cast<ArrayAttr>(indexAttr[b]);
- for (const auto it : llvm::zip(memberIndicesA, memberIndicesB)) {
- int64_t aIndex = cast<IntegerAttr>(std::get<0>(it)).getInt();
- int64_t bIndex = cast<IntegerAttr>(std::get<1>(it)).getInt();
+ for (size_t i = 0; i < smallestMember; ++i) {
----------------
skatrak wrote:
Nit: `llvm::zip` already iterates as long as both ranges have elements, so it stops at the shortest. I think it's better to use it in this case.
https://github.com/llvm/llvm-project/pull/119588
More information about the llvm-branch-commits
mailing list