[OpenMP] Fix 'omp exit data' for Fortran arrays (PR 94635)
gcc/ PR middle-end/94635 * gimplify.c (gimplify_scan_omp_clauses): For MAP_TO_PSET with OMP_TARGET_EXIT_DATA, use 'release:' unless the associated item is 'delete:'. gcc/testsuite PR middle-end/94635 * gfortran.dg/gomp/target-exit-data.f90: New.
This commit is contained in:
parent
3a55774f0b
commit
9f0f7da9aa
4 changed files with 35 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
|||
2020-05-15 Tobias Burnus <tobias@codesourcery.com>
|
||||
|
||||
PR middle-end/94635
|
||||
* gimplify.c (gimplify_scan_omp_clauses): For MAP_TO_PSET with
|
||||
OMP_TARGET_EXIT_DATA, use 'release:' unless the associated
|
||||
item is 'delete:'.
|
||||
|
||||
2020-05-15 Uroš Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/95046
|
||||
|
|
|
@ -8766,7 +8766,9 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
|
|||
to be delete; hence, we turn the MAP_TO_PSET into a MAP_DELETE. */
|
||||
if (code == OMP_TARGET_EXIT_DATA
|
||||
&& OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_TO_PSET)
|
||||
OMP_CLAUSE_SET_MAP_KIND (c, GOMP_MAP_DELETE);
|
||||
OMP_CLAUSE_SET_MAP_KIND (c, OMP_CLAUSE_MAP_KIND (*prev_list_p)
|
||||
== GOMP_MAP_DELETE
|
||||
? GOMP_MAP_DELETE : GOMP_MAP_RELEASE);
|
||||
else if ((code == OMP_TARGET_EXIT_DATA || code == OMP_TARGET_UPDATE)
|
||||
&& (OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_POINTER
|
||||
|| OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_TO_PSET))
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2020-05-15 Tobias Burnus <tobias@codesourcery.com>
|
||||
|
||||
PR middle-end/94635
|
||||
* gfortran.dg/gomp/target-exit-data.f90: New.
|
||||
|
||||
2020-05-15 Uroš Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/95046
|
||||
|
|
20
gcc/testsuite/gfortran.dg/gomp/target-exit-data.f90
Normal file
20
gcc/testsuite/gfortran.dg/gomp/target-exit-data.f90
Normal file
|
@ -0,0 +1,20 @@
|
|||
! { dg-do compile }
|
||||
! { dg-additional-options "-fdump-tree-omplower" }
|
||||
!
|
||||
! PR middle-end/94635
|
||||
|
||||
integer, allocatable :: one(:), two(:), three(:)
|
||||
|
||||
!$omp target enter data map(alloc:one)
|
||||
!$omp target enter data map(alloc:two)
|
||||
!$omp target enter data map(to:three)
|
||||
|
||||
! ...
|
||||
!$omp target exit data map(delete:one)
|
||||
!$omp target exit data map(release:two)
|
||||
!$omp target exit data map(from:three)
|
||||
end
|
||||
|
||||
! { dg-final { scan-tree-dump "omp target exit data map\\(delete:.*\\) map\\(delete:one \\\[len: .*\\\]\\)" "omplower" } }
|
||||
! { dg-final { scan-tree-dump "omp target exit data map\\(release:.*\\) map\\(release:two \\\[len: .*\\\]\\)" "omplower" } }
|
||||
! { dg-final { scan-tree-dump "omp target exit data map\\(from:.*\\) map\\(release:three \\\[len: .*\\\]\\)" "omplower" } }
|
Loading…
Add table
Reference in a new issue