Add support for reductions in fully-masked loops
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / sve / reduc_5.c
blobff535942331be1e5399c3ef902e08f442ba8786b
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -ftree-vectorize -ffast-math" } */
4 #include <stdint.h>
6 #define REDUC(TYPE) \
7 TYPE reduc_##TYPE (TYPE *x, int count) \
8 { \
9 TYPE sum = 0; \
10 for (int i = 0; i < count; ++i) \
11 sum -= x[i]; \
12 return sum; \
15 REDUC (int8_t)
16 REDUC (uint8_t)
17 REDUC (int16_t)
18 REDUC (uint16_t)
19 REDUC (int32_t)
20 REDUC (uint32_t)
21 REDUC (int64_t)
22 REDUC (uint64_t)
23 REDUC (float)
24 REDUC (double)
26 /* XFAILed until we support sub-int reductions for signed types. */
27 /* { dg-final { scan-assembler-times {\tsub\tz[0-9]+\.b, p[0-7]/m} 2 { xfail *-*-* } } } */
28 /* { dg-final { scan-assembler-times {\tsub\tz[0-9]+\.h, p[0-7]/m} 2 { xfail *-*-* } } } */
29 /* { dg-final { scan-assembler-times {\tsub\tz[0-9]+\.b, p[0-7]/m} 1 } } */
30 /* { dg-final { scan-assembler-times {\tsub\tz[0-9]+\.h, p[0-7]/m} 1 } } */
31 /* { dg-final { scan-assembler-times {\tsub\tz[0-9]+\.s, p[0-7]/m} 2 } } */
32 /* { dg-final { scan-assembler-times {\tsub\tz[0-9]+\.d, p[0-7]/m} 2 } } */
33 /* { dg-final { scan-assembler-times {\tfsub\tz[0-9]+\.s, p[0-7]/m} 1 } } */
34 /* { dg-final { scan-assembler-times {\tfsub\tz[0-9]+\.d, p[0-7]/m} 1 } } */
36 /* XFAILed until we support sub-int reductions for signed types. */
37 /* { dg-final { scan-assembler-times {\tsub\t} 8 { xfail *-*-* } } } */
38 /* { dg-final { scan-assembler-times {\tfsub\t} 2 } } */