aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKwok Cheung Yeung <kcyeung@baylibre.com>2025-04-16 11:43:00 +0100
committerSandra Loosemore <sloosemore@baylibre.com>2025-05-15 20:25:52 +0000
commit791936457451ad3a2867d02b7ffc743b96b04c42 (patch)
tree8b159f6cc6408d087ec90ed307bfdd6932dd25be /gcc
parent12341d4f4a89cf2ebe3f73037b83d33f75baff11 (diff)
downloadgcc-791936457451ad3a2867d02b7ffc743b96b04c42.zip
gcc-791936457451ad3a2867d02b7ffc743b96b04c42.tar.gz
gcc-791936457451ad3a2867d02b7ffc743b96b04c42.tar.bz2
openmp, fortran: Revert to using tree expressions when translating Fortran OpenMP array sections
In the patch 'OpenACC 2.7: Implement reductions for arrays and records', temporaries are used to hold the decl and bias of clauses resulting from array sections, which breaks some assumptions made for map iterator support. This patch reverts the change for OpenMP only. gcc/fortran/ * trans-openmp.cc (gfc_trans_omp_array_section): Use temporaries only when translating OpenACC. gcc/testsuite/ * gfortran.dg/gomp/target-enter-exit-data.f90: Revert expected tree dumps.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/trans-openmp.cc24
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/target-enter-exit-data.f908
2 files changed, 20 insertions, 12 deletions
diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc
index 3678f79..2c2e3a3 100644
--- a/gcc/fortran/trans-openmp.cc
+++ b/gcc/fortran/trans-openmp.cc
@@ -3490,10 +3490,14 @@ gfc_trans_omp_array_section (stmtblock_t *block, toc_directive cd,
offset = build2 (TRUNC_DIV_EXPR, ptrdiff_type_node,
offset, fold_convert (ptrdiff_type_node, elemsz));
- tree offset_tmp = create_tmp_var (ptrdiff_type_node);
- gfc_add_expr_to_block (block, build2 (MODIFY_EXPR, ptrdiff_type_node,
- offset_tmp, offset));
- offset = offset_tmp;
+ if (!openmp)
+ {
+ tree offset_tmp = create_tmp_var (ptrdiff_type_node);
+ gfc_add_expr_to_block (block, build2 (MODIFY_EXPR,
+ ptrdiff_type_node,
+ offset_tmp, offset));
+ offset = offset_tmp;
+ }
offset = build4_loc (input_location, ARRAY_REF,
TREE_TYPE (TREE_TYPE (decl)),
decl, offset, NULL_TREE, NULL_TREE);
@@ -3513,12 +3517,16 @@ gfc_trans_omp_array_section (stmtblock_t *block, toc_directive cd,
OMP_CLAUSE_DECL (node3) = decl;
}
- tree ptr_tmp = create_tmp_var (ptrdiff_type_node);
ptr = fold_build2 (MINUS_EXPR, ptrdiff_type_node, ptr,
fold_convert (ptrdiff_type_node, ptr2));
- gfc_add_expr_to_block (block, build2 (MODIFY_EXPR, ptrdiff_type_node,
- ptr_tmp, ptr));
- OMP_CLAUSE_SIZE (node3) = ptr_tmp;
+ if (!openmp)
+ {
+ tree ptr_tmp = create_tmp_var (ptrdiff_type_node);
+ gfc_add_expr_to_block (block, build2 (MODIFY_EXPR, ptrdiff_type_node,
+ ptr_tmp, ptr));
+ ptr = ptr_tmp;
+ }
+ OMP_CLAUSE_SIZE (node3) = ptr;
if (n->u.map.readonly)
OMP_CLAUSE_MAP_POINTS_TO_READONLY (node3) = 1;
diff --git a/gcc/testsuite/gfortran.dg/gomp/target-enter-exit-data.f90 b/gcc/testsuite/gfortran.dg/gomp/target-enter-exit-data.f90
index dc267c2..74eb894 100644
--- a/gcc/testsuite/gfortran.dg/gomp/target-enter-exit-data.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/target-enter-exit-data.f90
@@ -9,17 +9,17 @@ type(t) :: var
allocate (var%arr(1:100))
!$omp target enter data map(to: var%arr(10:20))
-! { dg-final { scan-tree-dump-times {(?n)#pragma omp target enter data map\(to:\*\(integer\(kind=[0-9]+\)\[0:\] \*\) parm\.[0-9]+\.data \[len: D\.[0-9]+ \* [0-9]+\]\) map\(to:var\.arr \[pointer set, len: [0-9]+\]\) map\(attach_detach:\(integer\(kind=[0-9]+\)\[0:\] \*\) var\.arr\.data \[bias: D\.[0-9]+\]\)$} 1 "original" } }
+! { dg-final { scan-tree-dump-times {(?n)#pragma omp target enter data map\(to:\*\(integer\(kind=[0-9]+\)\[0:\] \*\) parm\.[0-9]+\.data \[len: D\.[0-9]+ \* [0-9]+\]\) map\(to:var\.arr \[pointer set, len: [0-9]+\]\) map\(attach_detach:\(integer\(kind=[0-9]+\)\[0:\] \*\) var\.arr\.data \[bias: \(integer\(kind=[0-9]+\)\) parm\.[0-9]+\.data - \(integer\(kind=[0-9]+\)\) var\.arr\.data\]\)$} 1 "original" } }
!$omp target exit data map(release: var%arr(10:20))
-! { dg-final { scan-tree-dump-times {(?n)#pragma omp target exit data map\(release:\*\(integer\(kind=[0-9]+\)\[0:\] \*\) parm\.[0-9]+\.data \[len: D\.[0-9]+ \* [0-9]+\]\) map\(release:var\.arr \[pointer set, len: [0-9]+\]\) map\(attach_detach:\(integer\(kind=[0-9]+\)\[0:\] \*\) var\.arr\.data \[bias: D\.[0-9]+\]\)$} 1 "original" } }
+! { dg-final { scan-tree-dump-times {(?n)#pragma omp target exit data map\(release:\*\(integer\(kind=[0-9]+\)\[0:\] \*\) parm\.[0-9]+\.data \[len: D\.[0-9]+ \* [0-9]+\]\) map\(release:var\.arr \[pointer set, len: [0-9]+\]\) map\(attach_detach:\(integer\(kind=[0-9]+\)\[0:\] \*\) var\.arr\.data \[bias: \(integer\(kind=[0-9]+\)\) parm\.[0-9]+\.data - \(integer\(kind=[0-9]+\)\) var\.arr\.data\]\)$} 1 "original" } }
!$omp target enter data map(alloc: var%arr(20:30))
-! { dg-final { scan-tree-dump-times {(?n)#pragma omp target enter data map\(alloc:\*\(integer\(kind=[0-9]+\)\[0:\] \*\) parm\.[0-9]+\.data \[len: D\.[0-9]+ \* [0-9]+\]\) map\(to:var\.arr \[pointer set, len: [0-9]+\]\) map\(attach_detach:\(integer\(kind=[0-9]+\)\[0:\] \*\) var\.arr\.data \[bias: D\.[0-9]+\]\)$} 1 "original" } }
+! { dg-final { scan-tree-dump-times {(?n)#pragma omp target enter data map\(alloc:\*\(integer\(kind=[0-9]+\)\[0:\] \*\) parm\.[0-9]+\.data \[len: D\.[0-9]+ \* [0-9]+\]\) map\(to:var\.arr \[pointer set, len: [0-9]+\]\) map\(attach_detach:\(integer\(kind=[0-9]+\)\[0:\] \*\) var\.arr\.data \[bias: \(integer\(kind=[0-9]+\)\) parm\.[0-9]+\.data - \(integer\(kind=[0-9]+\)\) var\.arr\.data\]\)$} 1 "original" } }
!$omp target exit data map(delete: var%arr(20:30))
-! { dg-final { scan-tree-dump-times {(?n)#pragma omp target exit data map\(delete:\*\(integer\(kind=[0-9]+\)\[0:\] \*\) parm\.[0-9]+\.data \[len: D\.[0-9]+ \* [0-9]+\]\) map\(delete:var\.arr \[pointer set, len: [0-9]+\]\) map\(attach_detach:\(integer\(kind=[0-9]+\)\[0:\] \*\) var\.arr\.data \[bias: D\.[0-9]+\]\)$} 1 "original" } }
+! { dg-final { scan-tree-dump-times {(?n)#pragma omp target exit data map\(delete:\*\(integer\(kind=[0-9]+\)\[0:\] \*\) parm\.[0-9]+\.data \[len: D\.[0-9]+ \* [0-9]+\]\) map\(delete:var\.arr \[pointer set, len: [0-9]+\]\) map\(attach_detach:\(integer\(kind=[0-9]+\)\[0:\] \*\) var\.arr\.data \[bias: \(integer\(kind=[0-9]+\)\) parm\.[0-9]+\.data - \(integer\(kind=[0-9]+\)\) var\.arr\.data\]\)$} 1 "original" } }
!$omp target enter data map(to: var%arr)