1 /* { dg-do compile } */
2 /* { dg-options "-O2 -ftree-vectorize" } */
3 
4 #include <stdint.h>
5 
6 #ifndef FACTOR
7 #define FACTOR 2
8 #endif
9 
10 #define LOOP(TYPE)						\
11   __attribute__ ((noipa))					\
12   void								\
13   test_##TYPE (TYPE *restrict dst, TYPE *restrict src,		\
14 	       int count)					\
15   {								\
16     for (int i = 0; i < count; ++i)				\
17       dst[i] += src[i] * FACTOR;				\
18   }
19 
20 #define TEST_ALL(T) \
21   T (int8_t) \
22   T (int16_t) \
23   T (int32_t) \
24   T (int64_t) \
25   T (uint8_t) \
26   T (uint16_t) \
27   T (uint32_t) \
28   T (uint64_t)
29 
30 TEST_ALL (LOOP)
31 
32 /* { dg-final { scan-assembler-times {\tadd\tz[0-9]\.b,} 2 } } */
33 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]\.b,} 2 } } */
34 /* { dg-final { scan-assembler-not {\tadr\tz[0-9]\.b,} } } */
35 
36 /* { dg-final { scan-assembler-times {\tadd\tz[0-9]\.h,} 2 } } */
37 /* { dg-final { scan-assembler-times {\tlsl\tz[0-9]\.h,} 2 } } */
38 /* { dg-final { scan-assembler-not {\tadr\tz[0-9]\.h,} } } */
39 
40 /* { dg-final { scan-assembler-not {\tadd\tz[0-9]\.s,} } } */
41 /* { dg-final { scan-assembler-not {\tlsl\tz[0-9]\.s,} } } */
42 /* { dg-final { scan-assembler-times {\tadr\tz[0-9]\.s, \[z[0-9]\.s, z[0-9]\.s, lsl 1\]} 2 } } */
43 
44 /* { dg-final { scan-assembler-not {\tadd\tz[0-9]\.d,} } } */
45 /* { dg-final { scan-assembler-not {\tlsl\tz[0-9]\.d,} } } */
46 /* { dg-final { scan-assembler-times {\tadr\tz[0-9]\.d, \[z[0-9]\.d, z[0-9]\.d, lsl 1\]} 2 } } */
47