1 /* { dg-do compile } */
2 /* { dg-options "-O2 -ftree-vectorize -msve-vector-bits=scalable" } */
6 void consumer (void *);
8 #define TEST_LOOP(TYPE) \
10 multi_loop_##TYPE (TYPE *x, TYPE val1, TYPE val2, int n) \
12 for (int i = 0; i < n; ++i) \
15 x[i * 2 + 1] += val2; \
18 for (int i = 0; i < n; ++i) \
21 x[i * 2 + 1] += val2; \
24 for (int i = 0; i < n; ++i) \
27 x[i * 2 + 1] += val2; \
32 /* One iteration is enough. */
35 /* Two iterations are enough. Complete unrolling makes sense
38 /* Four iterations are needed; ought to stay a loop. */
41 /* { dg-final { scan-assembler {\tld1b\tz[0-9]\.b} } } */
42 /* { dg-final { scan-assembler {\tld1h\tz[0-9]\.h} } } */
43 /* { dg-final { scan-assembler {\tld1w\tz[0-9]\.s} } } */
44 /* { dg-final { scan-assembler {\tld1d\tz[0-9]\.d} } } */
45 /* { dg-final { scan-assembler-not {\tldr\tz[0-9]} } } */
46 /* { dg-final { scan-assembler-not {\tstr\tz[0-9]} } } */
47 /* { dg-final { scan-assembler-not {\tldr\tp[0-9]} } } */
48 /* { dg-final { scan-assembler-not {\tstr\tp[0-9]} } } */