Re: [PATCH 2/2] OpenMP/Fortran: Enforce component order when mapping allocatable DT [PR120505]

Tobias Burnus <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <[email protected]>
Paul-Antoine Arras wrote:
> This is a follow-up to r16-5789-g05c2ad4a2e7104.
>
> Consider the following code, assuming tiles is allocatable:
>
> type t
>   integer, allocatable :: den1(:,:), den2(:,:)
> end type t
> [...]
> !$omp target enter data map(var%tiles(1)%den2, var%tiles(1)%den1)
>
> r16-5789-g05c2ad4a2e7104 allowed mapping several components from the same
> allocatable derived type, provided they are in the right order in user code.
> This patch relaxes this constraint by computing offsets and sorting to-be-mapped
> components at gimplification time.
> 	PR fortran/120505
>
> gcc/ChangeLog:
>
> 	* gimplify.cc (omp_accumulate_sibling_list): When the containing struct
> 	is a Fortran array descriptor, sort mapped components by offset.
>
> libgomp/ChangeLog:
>
> 	* testsuite/libgomp.fortran/map-subarray-12.f90: New test.
>
> gcc/testsuite/ChangeLog:
>
> 	* gfortran.dg/gomp/map-subarray-4.f90: New test.

LGTM – however, I think it would be good if at least one of the 
testcases could be made a bit more through/robust:

Currently, only two elements are checked for being in order – I think it 
would be better to check for a handful, added to the map clauses in 
random order (and possibly skipping one or two).

Additionally, it might help to add a comment like 'sort mapped 
components by offset' in the 'if (has_descriptor)' block to make it 
easier to follow that the code does.

Otherwise, the patch the patch seems to be fine to me.

Sorry for the slow review!

Tobias
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.