[clang] [llvm] [NFC][Clang][OpenMP] Add a util to implicitly map attach-ptr-exprs on `target`, when applicable. (PR #161294)
Abhinav Gaba via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 2 23:07:54 PDT 2025
================
@@ -9247,6 +9284,156 @@ class MappableExprsHandler {
}
}
+ /// On a target construct, if there's an implicit map on a struct, or that of
+ /// this[:], and an explicit map with a member of that struct/class as the
+ /// base-pointer, we need to make sure that base-pointer is implicitly mapped,
+ /// to make sure we don't map the full struct/class. For example:
+ ///
+ /// \code
+ /// struct S {
+ /// int dummy[10000];
+ /// int *p;
+ /// void f1() {
+ /// #pragma omp target map(p[0:1])
+ /// (void)this;
+ /// }
+ /// }; S s;
+ ///
+ /// void f2() {
+ /// #pragma omp target map(s.p[0:10])
+ /// (void)s;
+ /// }
+ /// \endcode
+ ///
+ /// Only `this-p` and `s.p` should be mapped in the two cases above.
+ //
+ // OpenMP 6.0: 7.9.6 map clause, pg 285
+ // If a list item with an implicitly determined data-mapping attribute does
+ // not have any corresponding storage in the device data environment prior to
+ // a task encountering the construct associated with the map clause, and one
+ // or more contiguous parts of the original storage are either list items or
+ // base pointers to list items that are explicitly mapped on the construct,
+ // only those parts of the original storage will have corresponding storage in
+ // the device data environment as a result of the map clauses on the
+ // construct.
+ void addImplicitMapForAttachPtrBaseIfMemberOfCapturedVD(
+ const ValueDecl *CapturedVD, MapDataArrayTy &DeclComponentLists,
+ SmallVectorImpl<
+ SmallVector<OMPClauseMappableExprCommon::MappableComponent, 8>>
+ &ComponentVectorStorage) const {
----------------
abhinavgaba wrote:
This PR was created after receiving feedback that it would be good to break the parent PR #153684 into smaller patches that can be merged independently. This is one such smaller patch. The NFC tag can be removed that causes concern/confusion.
There is no change in the output IR with this change alone. The parent PR is needed to change the output IR.
https://github.com/llvm/llvm-project/pull/161294
More information about the llvm-commits
mailing list