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
      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
      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 } } */