diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2022-10-19 17:31:14 +0200 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2022-10-19 17:31:14 +0200 |
commit | 0d6fc5032c7ba8a95301d0ccbc418875e73955ac (patch) | |
tree | 8a0efbaac5ef7a18f2d48a4f8aa869762872f906 | |
parent | 92b14810a2743594df945dc6479413a3d9d943aa (diff) | |
download | gcc-0d6fc5032c7ba8a95301d0ccbc418875e73955ac.zip gcc-0d6fc5032c7ba8a95301d0ccbc418875e73955ac.tar.gz gcc-0d6fc5032c7ba8a95301d0ccbc418875e73955ac.tar.bz2 |
Fix omp-expand.cc's expand_omp_target for OpenACC
In OG12 commit a6c1eccffb161130351d891dc87f5afe54f8075c,
"Fortran/OpenMP: Support mapping of DT with allocatable components"
the size of the addr/sizes/kind arrays was passed as 4th argument.
However, OpenACC uses >3 arguments for its own purpose, e.g. to
handle noncontiguous arrays by passing an array descriptor there.
This patch restores the previous behaviour for OpenACC, fixing
testcases like libgomp.oacc-c-c++-common/noncontig_array-1.c.
gcc/
* omp-expand.cc (expand_omp_target): Fix OpenACC in case there
are more than 3 arguments to the builtin function.
-rw-r--r-- | gcc/ChangeLog.omp | 5 | ||||
-rw-r--r-- | gcc/omp-expand.cc | 2 |
2 files changed, 6 insertions, 1 deletions
diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index 527a985..32a8c7b 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -1,3 +1,8 @@ +2022-10-19 Tobias Burnus <tobias@codesourcery.com> + + * omp-expand.cc (expand_omp_target): Fix OpenACC in case there + are more than 3 arguments to the builtin function. + 2022-10-17 Thomas Schwinge <thomas@codesourcery.com> Backported from master: diff --git a/gcc/omp-expand.cc b/gcc/omp-expand.cc index 9299668..6529f63 100644 --- a/gcc/omp-expand.cc +++ b/gcc/omp-expand.cc @@ -10456,7 +10456,7 @@ expand_omp_target (struct omp_region *region) t3 = t2; t4 = t2; } - else if (TREE_VEC_LENGTH (t) == 3) + else if (TREE_VEC_LENGTH (t) == 3 || is_gimple_omp_oacc (entry_stmt)) { t1 = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (TREE_VEC_ELT (t, 1)))); t1 = size_binop (PLUS_EXPR, t1, size_int (1)); |