aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr118348_1.c31
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr118348_2.c4
-rw-r--r--gcc/tree-vectorizer.cc2
3 files changed, 37 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/aarch64/pr118348_1.c b/gcc/testsuite/gcc.target/aarch64/pr118348_1.c
new file mode 100644
index 0000000..75f6dad
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr118348_1.c
@@ -0,0 +1,31 @@
+/* { dg-do run { target aarch64_sve128_hw } } */
+/* { dg-options "-O2 -fopenmp-simd -fno-trapping-math -msve-vector-bits=128 --param aarch64-autovec-preference=sve-only -fstack-protector-strong" } */
+
+#pragma GCC target "+sve"
+
+[[gnu::noipa]] float f(float *ptr, long n)
+{
+ float res = 0.0f;
+#pragma omp simd reduction(+:res)
+ for (long i = 0; i < n; ++i)
+ if (ptr[i] >= 1.0f)
+ res += ptr[i];
+ return res;
+}
+
+[[gnu::noipa]] float g(float *ptr, long n)
+{
+ return f(ptr, n) + 1;
+}
+
+int
+main ()
+{
+#define N 64 * 1024
+ float data[N];
+ for (long i = 0; i < N; ++i)
+ data[i] = 1;
+ if (g(data, N) != N + 1)
+ __builtin_abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/pr118348_2.c b/gcc/testsuite/gcc.target/aarch64/pr118348_2.c
new file mode 100644
index 0000000..2e20004
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr118348_2.c
@@ -0,0 +1,4 @@
+/* { dg-do run { target aarch64_sve256_hw } } */
+/* { dg-options "-O2 -fopenmp-simd -fno-trapping-math -msve-vector-bits=256 --param aarch64-autovec-preference=sve-only -fstack-protector-strong" } */
+
+#include "pr118348_1.c"
diff --git a/gcc/tree-vectorizer.cc b/gcc/tree-vectorizer.cc
index 01c6470..f38c8d2 100644
--- a/gcc/tree-vectorizer.cc
+++ b/gcc/tree-vectorizer.cc
@@ -633,6 +633,8 @@ vec_info::move_dr (stmt_vec_info new_stmt_info, stmt_vec_info old_stmt_info)
= STMT_VINFO_GATHER_SCATTER_P (old_stmt_info);
STMT_VINFO_STRIDED_P (new_stmt_info)
= STMT_VINFO_STRIDED_P (old_stmt_info);
+ STMT_VINFO_SIMD_LANE_ACCESS_P (new_stmt_info)
+ = STMT_VINFO_SIMD_LANE_ACCESS_P (old_stmt_info);
}
/* Permanently remove the statement described by STMT_INFO from the