aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-07-20 08:38:59 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-07-20 08:38:59 +0200
commitb6339213ff68ac5a87b7fdda878f26b52d801b76 (patch)
tree91fbdb4b379a4e01d78add2ffea75605037d95be /gcc
parent05584e7c94f71ae287e2b9f148c0a1c93aff6b55 (diff)
downloadgcc-b6339213ff68ac5a87b7fdda878f26b52d801b76.zip
gcc-b6339213ff68ac5a87b7fdda878f26b52d801b76.tar.gz
gcc-b6339213ff68ac5a87b7fdda878f26b52d801b76.tar.bz2
omp-low.c (lower_rec_input_clauses): Don't force simd arrays for lastprivate non-addressable iterator of a...
* omp-low.c (lower_rec_input_clauses): Don't force simd arrays for lastprivate non-addressable iterator of a collapse(1) simd. * gcc.dg/vect/vect-simd-16.c: New test. From-SVN: r273620
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/omp-low.c5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-simd-16.c61
4 files changed, 74 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 92e5b2e..40f6db5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2019-07-20 Jakub Jelinek <jakub@redhat.com>
+
+ * omp-low.c (lower_rec_input_clauses): Don't force simd arrays for
+ lastprivate non-addressable iterator of a collapse(1) simd.
+
2019-07-17 Bill Seurer <seurer@linux.vnet.ibm.com>
* config/rs6000/rs6000-call.c (HAVE_AS_GNU_ATTRIBUTE): define value
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index a18f24c..03df07b 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -5097,7 +5097,10 @@ lower_rec_input_clauses (tree clauses, gimple_seq *ilist, gimple_seq *dlist,
{
tree y = lang_hooks.decls.omp_clause_dtor (c, new_var);
if ((TREE_ADDRESSABLE (new_var) || nx || y
- || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
+ || (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
+ && (gimple_omp_for_collapse (ctx->stmt) != 1
+ || (gimple_omp_for_index (ctx->stmt, 0)
+ != new_var)))
|| OMP_CLAUSE_CODE (c) == OMP_CLAUSE__CONDTEMP_
|| omp_is_reference (var))
&& lower_rec_simd_input_clauses (new_var, ctx, &sctx,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ce8e3c7..a7c9426 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-07-20 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/vect/vect-simd-16.c: New test.
+
2019-07-19 Jeff Law <law@redhat.com>
* gcc.dg/tree-ssa/ssa-dse-37.c: New test.
diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-16.c b/gcc/testsuite/gcc.dg/vect/vect-simd-16.c
new file mode 100644
index 0000000..ee4459a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-simd-16.c
@@ -0,0 +1,61 @@
+/* { dg-additional-options "-fopenmp-simd" } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+/* { dg-final { scan-tree-dump-times "vectorized \[1-3] loops" 3 "vect" { target i?86-*-* x86_64-*-* } } } */
+
+#include "tree-vect.h"
+
+__attribute__((noipa)) int
+foo (int *a)
+{
+ int i;
+ #pragma omp simd lastprivate (i)
+ for (i = 0; i < 64; i++)
+ a[i] = i;
+ return i;
+}
+
+__attribute__((noipa)) void
+bar (int *a)
+{
+ int i;
+ #pragma omp simd private (i)
+ for (i = 0; i < 64; i++)
+ a[i] = i + 1;
+}
+
+__attribute__((noipa)) int
+baz (int *a)
+{
+ int i;
+ #pragma omp simd linear (i)
+ for (i = 0; i < 64; i++)
+ a[i] = i + 2;
+ return i;
+}
+
+int
+main ()
+{
+ int i;
+ int a[64];
+ check_vect ();
+ if (foo (a) != 64)
+ abort ();
+ for (i = 0; i < 64; ++i)
+ if (a[i] != i)
+ abort ();
+ else
+ a[i] = -8;
+ bar (a);
+ for (i = 0; i < 64; ++i)
+ if (a[i] != i + 1)
+ abort ();
+ else
+ a[i] = -8;
+ if (baz (a) != 64)
+ abort ();
+ for (i = 0; i < 64; ++i)
+ if (a[i] != i + 2)
+ abort ();
+ return 0;
+}