1 /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */
2 /* { dg-add-options arm_v8_1m_mve_fp } */
3 /* { dg-additional-options "-O2" } */
4 
5 #include "arm_mve.h"
6 int16x8_t value1;
7 int64x2_t value2;
8 int32x4_t value3;
9 int8x16_t value4;
10 uint16x8_t value5;
11 uint64x2_t value6;
12 uint32x4_t value7;
13 float16x8_t value8;
14 float32x4_t value9;
15 
16 uint8x16_t
foo()17 foo ()
18 {
19   uint8x16_t r1,r2,r3,r4,r5,r6,r7;
20   r1 = vaddq_u8 (vreinterpretq_u8_s16 (value1), vreinterpretq_u8_s64 (value2));
21   r2 = vaddq_u8 (r1, vreinterpretq_u8_s32 (value3));
22   r3 = vaddq_u8 (r2, vreinterpretq_u8_s8 (value4));
23   r4 = vaddq_u8 (r3, vreinterpretq_u8_u16 (value5));
24   r5 = vaddq_u8 (r4, vreinterpretq_u8_u64 (value6));
25   r6 = vaddq_u8 (r5, vreinterpretq_u8_u32 (value7));
26   r7 = vaddq_u8 (r6, vreinterpretq_u8_f16 (value8));
27   return vaddq_u8 (r7, vreinterpretq_u8_f32 (value9));
28 }
29 
30 uint8x16_t
foo1()31 foo1 ()
32 {
33   uint8x16_t r1,r2,r3,r4,r5,r6,r7;
34   r1 = vaddq_u8 (vreinterpretq_u8 (value1), vreinterpretq_u8 (value2));
35   r2 = vaddq_u8 (r1, vreinterpretq_u8 (value3));
36   r3 = vaddq_u8 (r2, vreinterpretq_u8 (value4));
37   r4 = vaddq_u8 (r3, vreinterpretq_u8 (value5));
38   r5 = vaddq_u8 (r4, vreinterpretq_u8 (value6));
39   r6 = vaddq_u8 (r5, vreinterpretq_u8 (value7));
40   r7 = vaddq_u8 (r6, vreinterpretq_u8 (value8));
41   return vaddq_u8 (r7, vreinterpretq_u8 (value9));
42 }
43 
44 /* { dg-final { scan-assembler-times "vadd.i8" 8 } } */
45