aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJulian Brown <julian@codesourcery.com>2023-05-17 15:11:25 +0000
committerJulian Brown <julian@codesourcery.com>2023-06-19 21:22:28 +0000
commit91a88d708302b785efc9618b346a62def00900b7 (patch)
tree8cec1c2970a9623e7557940542489ae17d858c52 /gcc
parent4cb019e6403d259a41bbe8a95f54073b0e630e69 (diff)
downloadgcc-91a88d708302b785efc9618b346a62def00900b7.zip
gcc-91a88d708302b785efc9618b346a62def00900b7.tar.gz
gcc-91a88d708302b785efc9618b346a62def00900b7.tar.bz2
Revert "Assumed-size arrays with non-lexical data mappings"
This reverts commit 72733f6e6f6ec1bb9884fea8bfbebd3de03d9374. 2023-06-16 Julian Brown <julian@codesourcery.com> gcc/ Revert: * gimplify.cc (gimplify_adjust_omp_clauses_1): Raise error for assumed-size arrays in map clauses for Fortran/OpenMP. * omp-low.cc (lower_omp_target): Set the size of assumed-size Fortran arrays to one to allow use of data already mapped on the offload device. gcc/fortran/ Revert: * trans-openmp.cc (gfc_omp_finish_clause): Change clauses mapping assumed-size arrays to use the GOMP_MAP_FORCE_PRESENT map type.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog.omp11
-rw-r--r--gcc/fortran/ChangeLog.omp8
-rw-r--r--gcc/fortran/trans-openmp.cc22
-rw-r--r--gcc/gimplify.cc14
-rw-r--r--gcc/omp-low.cc5
5 files changed, 28 insertions, 32 deletions
diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp
index 78c6556..2b8752d 100644
--- a/gcc/ChangeLog.omp
+++ b/gcc/ChangeLog.omp
@@ -1,3 +1,14 @@
+2023-06-19 Julian Brown <julian@codesourcery.com>
+
+ Revert:
+ 2019-07-10 Cesar Philippidis <cesar@codesourcery.com>
+ Julian Brown <julian@codesourcery.com>
+
+ * gimplify.cc (gimplify_adjust_omp_clauses_1): Raise error for
+ assumed-size arrays in map clauses for Fortran/OpenMP.
+ * omp-low.cc (lower_omp_target): Set the size of assumed-size Fortran
+ arrays to one to allow use of data already mapped on the offload device.
+
2023-06-13 Sandra Loosemore <sandra@codesourcery.com>
* omp-api.h: New.
diff --git a/gcc/fortran/ChangeLog.omp b/gcc/fortran/ChangeLog.omp
index 26375ac..9d8a607 100644
--- a/gcc/fortran/ChangeLog.omp
+++ b/gcc/fortran/ChangeLog.omp
@@ -1,3 +1,11 @@
+2023-06-19 Julian Brown <julian@codesourcery.com>
+
+ Revert:
+ 2019-07-10 Julian Brown <julian@codesourcery.com>
+
+ * trans-openmp.cc (gfc_omp_finish_clause): Change clauses mapping
+ assumed-size arrays to use the GOMP_MAP_FORCE_PRESENT map type.
+
2023-06-13 Sandra Loosemore <sandra@codesourcery.com>
* openmp.cc: Include omp-api.h.
diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc
index e8f3b24..e55c829 100644
--- a/gcc/fortran/trans-openmp.cc
+++ b/gcc/fortran/trans-openmp.cc
@@ -1588,18 +1588,10 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc)
tree decl = OMP_CLAUSE_DECL (c);
/* Assumed-size arrays can't be mapped implicitly, they have to be mapped
- explicitly using array sections. For OpenACC this restriction is lifted
- if the array has already been mapped:
-
- - Using a lexically-enclosing data region: in that case we see the
- GOMP_MAP_FORCE_PRESENT mapping kind here.
-
- - Using a non-lexical data mapping ("acc enter data").
-
- In the latter case we change the mapping type to GOMP_MAP_FORCE_PRESENT.
- This raises an error for OpenMP in the caller
- (gimplify.c:gimplify_adjust_omp_clauses_1). OpenACC will raise a runtime
- error if the implicitly-referenced assumed-size array is not mapped. */
+ explicitly using array sections. An exception is if the array is
+ mapped explicitly in an enclosing data construct for OpenACC, in which
+ case we see GOMP_MAP_FORCE_PRESENT here and do not need to raise an
+ error. */
if (OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_FORCE_PRESENT
&& TREE_CODE (decl) == PARM_DECL
&& GFC_ARRAY_TYPE_P (TREE_TYPE (decl))
@@ -1607,7 +1599,11 @@ gfc_omp_finish_clause (tree c, gimple_seq *pre_p, bool openacc)
&& GFC_TYPE_ARRAY_UBOUND (TREE_TYPE (decl),
GFC_TYPE_ARRAY_RANK (TREE_TYPE (decl)) - 1)
== NULL)
- OMP_CLAUSE_SET_MAP_KIND (c, GOMP_MAP_FORCE_PRESENT);
+ {
+ error_at (OMP_CLAUSE_LOCATION (c),
+ "implicit mapping of assumed size array %qD", decl);
+ return;
+ }
if (OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_FORCE_DEVICEPTR)
return;
diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc
index 09c596f..3729b98 100644
--- a/gcc/gimplify.cc
+++ b/gcc/gimplify.cc
@@ -12828,26 +12828,12 @@ gimplify_adjust_omp_clauses_1 (splay_tree_node n, void *data)
*list_p = clause;
struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp;
gimplify_omp_ctxp = ctx->outer_context;
- gomp_map_kind kind = (code == OMP_CLAUSE_MAP) ? OMP_CLAUSE_MAP_KIND (clause)
- : (gomp_map_kind) GOMP_MAP_LAST;
/* Don't call omp_finish_clause on implicitly added OMP_CLAUSE_PRIVATE
in simd. Those are only added for the local vars inside of simd body
and they don't need to be e.g. default constructible. */
if (code != OMP_CLAUSE_PRIVATE || ctx->region_type != ORT_SIMD)
lang_hooks.decls.omp_finish_clause (clause, pre_p,
(ctx->region_type & ORT_ACC) != 0);
- /* Allow OpenACC to have implicit assumed-size arrays via FORCE_PRESENT,
- which should work as long as the array has previously been mapped
- explicitly on the target (e.g. by "enter data"). Raise an error for
- OpenMP. */
- if (lang_GNU_Fortran ()
- && code == OMP_CLAUSE_MAP
- && (ctx->region_type & ORT_ACC) == 0
- && kind == GOMP_MAP_TOFROM
- && OMP_CLAUSE_MAP_KIND (clause) == GOMP_MAP_FORCE_PRESENT)
- error_at (OMP_CLAUSE_LOCATION (clause),
- "implicit mapping of assumed size array %qD",
- OMP_CLAUSE_DECL (clause));
if (gimplify_omp_ctxp)
for (; clause != chain; clause = OMP_CLAUSE_CHAIN (clause))
if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP
diff --git a/gcc/omp-low.cc b/gcc/omp-low.cc
index 3424eba..59143d8 100644
--- a/gcc/omp-low.cc
+++ b/gcc/omp-low.cc
@@ -14353,11 +14353,6 @@ lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
s = OMP_CLAUSE_SIZE (c);
if (s == NULL_TREE)
s = TYPE_SIZE_UNIT (TREE_TYPE (ovar));
- /* Fortran assumed-size arrays have zero size because the type is
- incomplete. Set the size to one to allow the runtime to remap
- any existing data that is already present on the accelerator. */
- if (s == NULL_TREE && is_gimple_omp_oacc (ctx->stmt))
- s = integer_one_node;
s = fold_convert (size_type_node, s);
purpose = size_int (map_idx++);
CONSTRUCTOR_APPEND_ELT (vsize, purpose, s);