1  /* { dg-do run { target aarch64_sve_hw } } */
       2  /* { dg-options "-O2 -ftree-vectorize -ffast-math" } */
       3  
       4  #include "mask_struct_load_3.c"
       5  
       6  #define N 100
       7  
       8  #undef TEST_LOOP
       9  #define TEST_LOOP(NAME, OUTTYPE, INTYPE, MASKTYPE)	\
      10    {							\
      11      OUTTYPE out[N];					\
      12      INTYPE in[N * 4];					\
      13      MASKTYPE mask[N];					\
      14      for (int i = 0; i < N; ++i)				\
      15        {							\
      16  	out[i] = i * 7 / 2;				\
      17  	mask[i] = i % 5 <= i % 3;			\
      18  	asm volatile ("" ::: "memory");			\
      19        }							\
      20      for (int i = 0; i < N * 4; ++i)			\
      21        in[i] = i * 9 / 2;				\
      22      NAME##_4 (out, in, mask, N);			\
      23      for (int i = 0; i < N; ++i)				\
      24        {							\
      25  	OUTTYPE if_true = (in[i * 4]			\
      26  			   + in[i * 4 + 1]		\
      27  			   + in[i * 4 + 2]		\
      28  			   + in[i * 4 + 3]);		\
      29  	OUTTYPE if_false = i * 7 / 2;			\
      30  	if (out[i] != (mask[i] ? if_true : if_false))	\
      31  	  __builtin_abort ();				\
      32  	asm volatile ("" ::: "memory");			\
      33        }							\
      34    }
      35  
      36  int __attribute__ ((optimize (1)))
      37  main (void)
      38  {
      39    TEST (test);
      40    return 0;
      41  }