================ @@ -141,6 +143,110 @@ createMapInfoOp(fir::FirOpBuilder &builder, mlir::Location loc, return op; } +omp::ObjectList gatherObjects(omp::Object obj, + semantics::SemanticsContext &semaCtx) { + omp::ObjectList objList; + std::optional<omp::Object> baseObj = getBaseObject(obj, semaCtx); + while (baseObj.has_value()) { + objList.push_back(baseObj.value()); + baseObj = getBaseObject(baseObj.value(), semaCtx); + } + return omp::ObjectList{llvm::reverse(objList)}; +} + +bool duplicateMemberMapInfo(OmpMapMemberIndicesData &parentMembers, + llvm::SmallVectorImpl<int> &memberIndices) { + // A variation of std:equal that supports non-equal length index lists for our + // specific use-case, if one is larger than the other, we use -1, the default + // filler element in place of the smaller vector, this prevents UB from over + // indexing and removes the need for us to do any filling of intermediate + // index lists we'll discard. + auto isEqual = [](auto first1, auto last1, auto first2, auto last2) { + int v1, v2; + for (; first1 != last1; ++first1, ++first2) { + v1 = (first1 == last1) ? -1 : *first1; + v2 = (first2 == last2) ? -1 : *first2; + + if (!(v1 == v2)) + return false; + } + return true; + }; + + for (auto memberData : parentMembers.memberPlacementIndices) + if (isEqual(memberData.begin(), memberData.end(), memberIndices.begin(), + memberIndices.end())) + return true; + return false; +} ---------------- ergawy wrote:
If my above comments make sense, then I think the following should be enough: ```suggestion bool isDuplicateMemberMapInfo(OmpMapMemberIndicesData &parentMembers, llvm::SmallVectorImpl<int> &memberIndices) { for (auto memberData : parentMembers.memberPlacementIndices) if (std::equal(memberData.begin(), memberData.end(), memberIndices.begin())) return true; return false; } ``` In any case, I think the function name change is suggested to better describe the purpose and behavior of the function. https://github.com/llvm/llvm-project/pull/96266 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits