<feed xmlns='http://www.w3.org/2005/Atom'>
<title>llvm-project.git/clang/test/OpenMP/target_map_pointer_defalut_mapper_codegen.cpp, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/'/>
<entry>
<title>[OpenMP][Map][NFC] improve map chain. (#101903)</title>
<updated>2024-08-05T15:01:11+00:00</updated>
<author>
<name>jyu2-git</name>
<email>jennifer.yu@intel.com</email>
</author>
<published>2024-08-05T15:01:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.belthelziquor.com/llvm-project.git/commit/?id=6848b99d170e9ac59ce2007c817bc579536d8e8e'/>
<id>6848b99d170e9ac59ce2007c817bc579536d8e8e</id>
<content type='text'>
This is for mapping structure has data members, which have 'default'
mappers, where needs to map these members individually using
their 'default' mappers.

example map(tofrom: spp[0][0]), look at test case.

currently create 6 maps:
1&gt;&amp;spp, &amp;spp[0],  size 8, maptype TARGET_PARAM | FROM | TO
2&gt;&amp;spp[0], &amp;spp[0][0], size(D)with maptype OMP_MAP_NONE, nullptr
3&gt;&amp;spp[0], &amp;spp[0][0].e, size(e) with maptype MEMBER_OF  | FROM  | TO
4&gt;&amp;spp[0], &amp;spp[0][0].h, size(h) with maptype MEMBER_OF  | FROM  | TO
5&gt;&amp;spp, &amp;spp[0],size(8), maptype MEMBER_OF | IMPLICIT | FROM  | TO
6&gt;&amp;spp[0], &amp;spp[0][0].f size(D) with maptype MEMBER_OF |IMPLICIT
|PTR_AND_OBJ, @.omp_mapper._ZTS1C.default

maptype with/without OMP_MAP_PTR_AND_OBJ
   For "2" and "5", since it is mapping pointer and pointee pair,
   PTR_AND_OBJ should be set
   But for "6" the PTR_AND_OBJ should not set.
However, "5" is duplicate with "1" can be skip.

To fix "2", during the call to emitCombinEntry with false with
NotTargetParams
instead !PartialStruct.PreliminaryMapData.BasePointers.empty(), since
all captures need to be TARGET_PARAM
And inside emitCombineEntry:  check
!PartialStruct.PreliminaryMapData.BasePointers.empty() to set
PTR_AND_OBJ

For "5" and "6": the fix in generateInfoForComponentList:
Add new variable IsPartialMapped set with
!PartialStruct.PreliminaryMapData.BasePointers.empty();

When that is true, skip generate "5" and don"t set IsExpressionFirstInfo
to false, so that PTR_AND_OBJ would be set.

After fix: will have 5 maps instead 6
1&gt;&amp;spp, &amp;spp[0],  size 8, maptype TARGET_PARAM | FROM | TO
2&gt;&amp;spp[0], &amp;spp[0][0], size(D), maptype PTR_AND_OBJ, nullptr
3&gt;&amp;spp[0], &amp;spp[0][0].e, size(e), maptype MEMBER_OF_2  | FROM  | TO
4&gt;&amp;spp[0], &amp;spp[0][0].h, size(h), maptype MEMBER_OF_2  | FROM  | TO
5&gt;&amp;spp[0], &amp;spp[0][0].f size(32), maptype MEMBER_OF_2 | IMPLICIT,
@.omp_mapper._ZTS1C.default

For map(sppp[0][0][0]):
after fix: will have 6 maps instead 8.

https://github.com/llvm/llvm-project/pull/101903</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This is for mapping structure has data members, which have 'default'
mappers, where needs to map these members individually using
their 'default' mappers.

example map(tofrom: spp[0][0]), look at test case.

currently create 6 maps:
1&gt;&amp;spp, &amp;spp[0],  size 8, maptype TARGET_PARAM | FROM | TO
2&gt;&amp;spp[0], &amp;spp[0][0], size(D)with maptype OMP_MAP_NONE, nullptr
3&gt;&amp;spp[0], &amp;spp[0][0].e, size(e) with maptype MEMBER_OF  | FROM  | TO
4&gt;&amp;spp[0], &amp;spp[0][0].h, size(h) with maptype MEMBER_OF  | FROM  | TO
5&gt;&amp;spp, &amp;spp[0],size(8), maptype MEMBER_OF | IMPLICIT | FROM  | TO
6&gt;&amp;spp[0], &amp;spp[0][0].f size(D) with maptype MEMBER_OF |IMPLICIT
|PTR_AND_OBJ, @.omp_mapper._ZTS1C.default

maptype with/without OMP_MAP_PTR_AND_OBJ
   For "2" and "5", since it is mapping pointer and pointee pair,
   PTR_AND_OBJ should be set
   But for "6" the PTR_AND_OBJ should not set.
However, "5" is duplicate with "1" can be skip.

To fix "2", during the call to emitCombinEntry with false with
NotTargetParams
instead !PartialStruct.PreliminaryMapData.BasePointers.empty(), since
all captures need to be TARGET_PARAM
And inside emitCombineEntry:  check
!PartialStruct.PreliminaryMapData.BasePointers.empty() to set
PTR_AND_OBJ

For "5" and "6": the fix in generateInfoForComponentList:
Add new variable IsPartialMapped set with
!PartialStruct.PreliminaryMapData.BasePointers.empty();

When that is true, skip generate "5" and don"t set IsExpressionFirstInfo
to false, so that PTR_AND_OBJ would be set.

After fix: will have 5 maps instead 6
1&gt;&amp;spp, &amp;spp[0],  size 8, maptype TARGET_PARAM | FROM | TO
2&gt;&amp;spp[0], &amp;spp[0][0], size(D), maptype PTR_AND_OBJ, nullptr
3&gt;&amp;spp[0], &amp;spp[0][0].e, size(e), maptype MEMBER_OF_2  | FROM  | TO
4&gt;&amp;spp[0], &amp;spp[0][0].h, size(h), maptype MEMBER_OF_2  | FROM  | TO
5&gt;&amp;spp[0], &amp;spp[0][0].f size(32), maptype MEMBER_OF_2 | IMPLICIT,
@.omp_mapper._ZTS1C.default

For map(sppp[0][0][0]):
after fix: will have 6 maps instead 8.

https://github.com/llvm/llvm-project/pull/101903</pre>
</div>
</content>
</entry>
</feed>
