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 -fno-ipa-icf" } */
4 
5 #include "arm_mve.h"
6 int16x8_t value1;
7 int8x16_t value2;
8 int32x4_t value3;
9 uint8x16_t value4;
10 uint16x8_t value5;
11 uint64x2_t value6;
12 uint32x4_t value7;
13 float16x8_t value8;
14 float32x4_t value9;
15 
16 int64x2_t
foo(mve_pred16_t __p)17 foo (mve_pred16_t __p)
18 {
19   int64x2_t r1,r2,r3,r4,r5,r6,r7;
20   r1 = vpselq_s64 (vreinterpretq_s64_s16 (value1), vreinterpretq_s64_s8 (value2),
21 		   __p);
22   r2 = vpselq_s64 (r1, vreinterpretq_s64_s32 (value3), __p);
23   r3 = vpselq_s64 (r2, vreinterpretq_s64_u8 (value4), __p);
24   r4 = vpselq_s64 (r3, vreinterpretq_s64_u16 (value5), __p);
25   r5 = vpselq_s64 (r4, vreinterpretq_s64_u64 (value6), __p);
26   r6 = vpselq_s64 (r5, vreinterpretq_s64_u32 (value7), __p);
27   r7 = vpselq_s64 (r6, vreinterpretq_s64_f16 (value8), __p);
28   return vpselq_s64 (r7, vreinterpretq_s64_f32 (value9), __p);
29 }
30 
31 int64x2_t
foo1(mve_pred16_t __p)32 foo1 (mve_pred16_t __p)
33 {
34   int64x2_t r1,r2,r3,r4,r5,r6,r7;
35   r1 = vpselq_s64 (vreinterpretq_s64 (value1), vreinterpretq_s64 (value2), __p);
36   r2 = vpselq_s64 (r1, vreinterpretq_s64 (value3), __p);
37   r3 = vpselq_s64 (r2, vreinterpretq_s64 (value4), __p);
38   r4 = vpselq_s64 (r3, vreinterpretq_s64 (value5), __p);
39   r5 = vpselq_s64 (r4, vreinterpretq_s64 (value6), __p);
40   r6 = vpselq_s64 (r5, vreinterpretq_s64 (value7), __p);
41   r7 = vpselq_s64 (r6, vreinterpretq_s64 (value8), __p);
42   return vpselq_s64 (r7, vreinterpretq_s64 (value9), __p);
43 }
44 
45 /* { dg-final { scan-assembler-times "vpsel" 16 } } */
46