]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
openmp, fortran: Revert to using tree expressions when translating Fortran OpenMP...
authorKwok Cheung Yeung <kcyeung@baylibre.com>
Wed, 16 Apr 2025 10:43:00 +0000 (11:43 +0100)
committerKwok Cheung Yeung <kcyeung@baylibre.com>
Thu, 17 Apr 2025 22:29:54 +0000 (23:29 +0100)
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.

gcc/fortran/ChangeLog.omp
gcc/fortran/trans-openmp.cc
gcc/testsuite/ChangeLog.omp
gcc/testsuite/gfortran.dg/gomp/target-enter-exit-data.f90

index 2b9d095cfa33d1b4d173347deb5d02bb78b3b063..b0846c29029abb999254e530a0408f5548c8202b 100644 (file)
@@ -1,3 +1,8 @@
+2025-04-17  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+
+       * trans-openmp.cc (gfc_trans_omp_array_section): Use temporaries only
+       when translating OpenACC.
+
 2025-04-17  Kwok Cheung Yeung  <kcyeung@baylibre.com>
 
        * gfortran.h (struct gfc_omp_namelist): Move udm field into a new
index 7c76360a56e4d6ce666d54214463bb6abcb5adf0..1babad8aa741fd42d41b9e7d673d609ed9ba280f 100644 (file)
@@ -4114,10 +4114,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);
@@ -4137,12 +4141,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;
index 55b0ec12dcb32bdcbd51c1689b6924b630be042f..331cb11af96aa31468361511691d7b12a8d588a5 100644 (file)
@@ -1,3 +1,8 @@
+2025-04-17  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+
+       * gfortran.dg/gomp/target-enter-exit-data.f90: Revert expected tree
+       dumps.
+
 2025-04-17  Kwok Cheung Yeung  <kcyeung@baylibre.com>
 
        * c-c++-common/gomp/target-update-iterators-1.c: New.
index dc267c2af2e66bd68e60e9feb6df2a64bf71717c..74eb894c04c6e562df3d062656dbf15717bb9967 100644 (file)
@@ -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)