diff options
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/pr118348_1.c | 31 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/pr118348_2.c | 4 | ||||
-rw-r--r-- | gcc/tree-vectorizer.cc | 2 |
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 |