1  /* { dg-do run { target aarch64_sve_hw } } */
       2  /* { dg-options "-O2 -ftree-vectorize" } */
       3  
       4  #include "vcond_7.c"
       5  
       6  #define TEST_CONST_LOOP(NAME, SUFFIX, TYPE, CONST)			\
       7    {									\
       8      for (int i = 0; i < N; ++i)						\
       9        {									\
      10  	dst[i] = i * 3;							\
      11  	src[i] = i % (CONST + 3);					\
      12        }									\
      13      NAME##_##SUFFIX##_##TYPE (dst, src);				\
      14      for (int i = 0; i < N; ++i)						\
      15        if (dst[i] != (NAME (src[i], CONST) ? (TYPE) 1 : (TYPE) (i * 3)))	\
      16  	__builtin_abort ();						\
      17    }
      18  
      19  #define TEST_LOOPS(NAME, TYPE, CONST1, CONST2)				\
      20    {									\
      21      TYPE dst[N], src[N];						\
      22      for (int i = 0; i < N; ++i)						\
      23        {									\
      24  	dst[i] = i * 2;							\
      25  	src[i] = i % 5;							\
      26        }									\
      27      NAME##_var_##TYPE (dst, src, 3);					\
      28      for (int i = 0; i < N; ++i)						\
      29        if (dst[i] != (NAME (src[i], 3) ? (TYPE) 3 : (TYPE) (i * 2)))	\
      30  	__builtin_abort ();						\
      31      TEST_CONST_LOOP (NAME, const1, TYPE, CONST1)			\
      32      TEST_CONST_LOOP (NAME, const2, TYPE, CONST2)			\
      33    }
      34  
      35  int __attribute__ ((noipa))
      36  main (void)
      37  {
      38    FOR_EACH_TYPE (TEST_LOOPS);
      39    return 0;
      40  }