1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -ftree-vectorize" } */
       3  
       4  #define DEF_LOOP(TYPE, NAME, CONST)			\
       5    void							\
       6    test_##TYPE##_##NAME (TYPE *restrict x,		\
       7  			TYPE *restrict pred, int n)	\
       8    {							\
       9      for (int i = 0; i < n; ++i)				\
      10        x[i] = pred[i] > 0 ? CONST : 12.0;		\
      11    }
      12  
      13  #define TEST_TYPE(T, TYPE)			\
      14    T (TYPE, 2, 2.0)				\
      15    T (TYPE, 1p25, 1.25)				\
      16    T (TYPE, 32p25, 32.25)			\
      17    T (TYPE, m4, -4.0)				\
      18    T (TYPE, m2p5, -2.5)				\
      19    T (TYPE, m64p5, -64.5)
      20  
      21  #define TEST_ALL(T)				\
      22    TEST_TYPE (T, _Float16)			\
      23    TEST_TYPE (T, float)				\
      24    TEST_TYPE (T, double)
      25  
      26  TEST_ALL (DEF_LOOP)
      27  
      28  /* { dg-final { scan-assembler-times {\tmov\tz[0-9]+\.h, p[0-7]/m, #16384\n} 1 } } */
      29  /* { dg-final { scan-assembler-times {\tmov\tz[0-9]+\.h, p[0-7]/m, #15616\n} 1 } } */
      30  /* { dg-final { scan-assembler-times {\tmov\tz[0-9]+\.h, p[0-7]/m, #-15360\n} 1 } } */
      31  /* { dg-final { scan-assembler-times {\tmov\tz[0-9]+\.h, p[0-7]/m, #-16128\n} 1 } } */
      32  /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 2 } } */
      33  
      34  /* { dg-final { scan-assembler {\tfmov\t(z[0-9]+\.s), p[0-7]/m, #2\.0(?:e[+]0)?\n} } } */
      35  /* { dg-final { scan-assembler {\tfmov\t(z[0-9]+\.s), p[0-7]/m, #1\.25(?:e[+]0)?\n} } } */
      36  /* { dg-final { scan-assembler {\tfmov\t(z[0-9]+\.s), p[0-7]/m, #-4\.0(?:e[+]0)?\n} } } */
      37  /* { dg-final { scan-assembler {\tfmov\t(z[0-9]+\.s), p[0-7]/m, #-2\.5(?:e[+]0)?\n} } } */
      38  /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
      39  
      40  /* { dg-final { scan-assembler {\tfmov\t(z[0-9]+\.d), p[0-7]/m, #2\.0(?:e[+]0)?\n} } } */
      41  /* { dg-final { scan-assembler {\tfmov\t(z[0-9]+\.d), p[0-7]/m, #1\.25(?:e[+]0)?\n} } } */
      42  /* { dg-final { scan-assembler {\tfmov\t(z[0-9]+\.d), p[0-7]/m, #-4\.0(?:e[+]0)?\n} } } */
      43  /* { dg-final { scan-assembler {\tfmov\t(z[0-9]+\.d), p[0-7]/m, #-2\.5(?:e[+]0)?\n} } } */
      44  /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 2 } } */
      45  
      46  /* { dg-final { scan-assembler-times {\tmovprfx\tz[0-9]+, z[0-9]+\n} 12 } } */