OK for mainline and GCC 10?

The LASTPRIVATE part is trivial, but as C→Fortran porting
the test case revealed an SIMD issue, it is a bit longer.

Tobias

On 4/23/20 8:52 AM, Tobias Burnus wrote:

As found via sollve_vv: the Fortran OpenMP parser missed
'lastprivate' as permitted clause in 'distribute'.

Additionally, when copying + fortanifying the
libgomp.c*/pr66199-[3-9].c test case, I found an
issue with loops.

Standard gfortran DO loops use "while()" – probably
a legacy because very old Fortran had single tripes.
For SIMD loops, a "normal" "for" loop is used. The
middle end takes care of most semantic like adding
a '(last)private'.
For normal DO loops, the FE adds the 'private' to
the loop variable.

This patch now removes most handling from SIMD loops but
keeps it for other constructs. "!simple" means that an
auxiliary loop variable ("count.0") is used and the original
loop variable is then "j = ... count.0 ...".


Issues encountered (see PR):
- no truncation warnings (fixed, cf. PR94709)

- gfc_trans_omp_do added always a private(loopvar),
  even if an explicit 'lastprivate(loopvar)' was present
  (see PR for which test case)

- gfc_trans_omp_do [for *-7.f90, function f4] added a
  'lastprivate' to the 'simd' for:
  !$omp distribute collapse(2)
    !$omp simd collapse(2)
This confused the ME as none was added higher up; now
the ME handles all.

Once removing this from gfc_trans_omp_do,
gfortran.dg/target1.f90 failed
teams got a private(<loopvar>) which was then not repeated
at "distribute simd".
The reason is that gfc_resolve_do_iterator added it to
'teams' but 'gfc_trans_omp_do' not (no longer) to 'simd'.
Solution: Not adding it to SIMD loops.

I am not completely happy how it is done – nor am I sure
that there are no further pitholes. I also do not see a
good way to ensure that newer "something something SIMD"
directives get properly added to gfc_resolve_do_iterator.

OK for the trunk?

Tobias

-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander 
Walter

Reply via email to