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