This patch tests simd aligned clause and their interaction with SVE types. gcc/testsuite/ChangeLog
* gcc.target/aarch64/sve/omp/simd-aligned.c: New test. --- .../gcc.target/aarch64/sve/omp/simd-aligned.c | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/omp/simd-aligned.c diff --git a/gcc/testsuite/gcc.target/aarch64/sve/omp/simd-aligned.c b/gcc/testsuite/gcc.target/aarch64/sve/omp/simd-aligned.c new file mode 100644 index 00000000000..6c75bb5a714 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/omp/simd-aligned.c @@ -0,0 +1,50 @@ +/* { dg-do run } */ +/* { dg-options "-msve-vector-bits=256 -std=gnu99 -fopenmp -O2 -fdump-tree-ompexp" } */ +#include <arm_sve.h> + +#define N 256 + +int a[N] __attribute__((aligned (64))); +int b[N] __attribute__((aligned (64))); + + +__attribute((noipa)) +void foo (int *p, int *q) +{ + svint32_t va, vb, vc; + int i; + uint64_t sz = svcntw (); + +#pragma omp simd aligned(p, q : 64) private (va, vb, vc) nontemporal (va, vb, vc) + for (i = 0; i < N; i++) + { + if (i % sz == 0) + { + va = svld1_s32 (svptrue_b32 (), p); + vb = svindex_s32 (1, 0); + vc = svadd_s32_z (svptrue_b32 (), va, vb); + svst1_s32 (svptrue_b32 (), q, vc); + q += sz; + } + } + + return; +} + +int main () +{ + + for (int i = 0;i < N; i++) + { + a[i] = 1; + b[i] = 0; + } + + foo (a, b); + + for (int i = 0;i < N; i++) + if (b[i] != 2) + __builtin_abort (); + + return 0; +} -- 2.25.1