(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
vcond_17_run.c
       1  /* { dg-do run { target aarch64_sve_hw } } */
       2  /* { dg-options "-O2 -ftree-vectorize" } */
       3  /* { dg-require-effective-target fenv_exceptions } */
       4  
       5  #include <fenv.h>
       6  
       7  #include "vcond_17.c"
       8  
       9  #define N 401
      10  
      11  #define TEST_LOOP(CMP, EXPECT_INVALID)				\
      12    {								\
      13      __fp16 dest1[N], dest2[N], dest3[N], src[N];		\
      14      __fp16 a[N], b[N];						\
      15      for (int i = 0; i < N; ++i)					\
      16        {								\
      17  	src[i] = i * i;						\
      18  	if (i % 5 == 0)						\
      19  	  a[i] = 0;						\
      20  	else if (i % 3)						\
      21  	  a[i] = i * 0.1;					\
      22  	else							\
      23  	  a[i] = i;						\
      24  	if (i % 7 == 0)						\
      25  	  b[i] = __builtin_nan ("");				\
      26  	else if (i % 6)						\
      27  	  b[i] = i * 0.1;					\
      28  	else							\
      29  	  b[i] = i;						\
      30  	asm volatile ("" ::: "memory");				\
      31        }								\
      32      feclearexcept (FE_ALL_EXCEPT);				\
      33      test_##CMP##_var (dest1, src, 11, a, b, N);			\
      34      test_##CMP##_zero (dest2, src, 22, a, N);			\
      35      test_##CMP##_sel (dest3, 33, 44, a, 9, N);			\
      36      if (!fetestexcept (FE_INVALID) != !(EXPECT_INVALID))	\
      37        __builtin_abort ();					\
      38      for (int i = 0; i < N; ++i)					\
      39        {								\
      40  	if (dest1[i] != (CMP (a[i], b[i]) ? src[i] : 11))	\
      41  	  __builtin_abort ();					\
      42  	if (dest2[i] != (CMP (a[i], 0) ? src[i] : 22))		\
      43  	  __builtin_abort ();					\
      44  	if (dest3[i] != (CMP (a[i], 9) ? 33 : 44))		\
      45  	  __builtin_abort ();					\
      46        }								\
      47    }
      48  
      49  int __attribute__ ((optimize (1)))
      50  main (void)
      51  {
      52    TEST_ALL (TEST_LOOP)
      53    return 0;
      54  }