1  /* { dg-do run { target aarch64_sve_hw } } */
       2  /* { dg-options "-O3 -fno-tree-loop-distribute-patterns" } */
       3  
       4  #include "ld1r_2.c"
       5  
       6  #define TEST_LOAD_BROADCAST(TYPE)		\
       7    {						\
       8      TYPE v[NUM_ELEMS (TYPE)];			\
       9      TYPE val = 99;				\
      10      set_##TYPE (v, &val);			\
      11      for (int i = 0; i < NUM_ELEMS (TYPE); i++)	\
      12        {						\
      13  	if (v[i] != (TYPE) 99)			\
      14  	  __builtin_abort ();			\
      15  	asm volatile ("" ::: "memory");		\
      16        }						\
      17    }
      18  
      19  #define TEST_LOAD_BROADCAST_IMM(TYPE, IMM, SUFFIX)	\
      20    {							\
      21      TYPE v[NUM_ELEMS (TYPE)];				\
      22      set_##TYPE##_##SUFFIX (v);				\
      23      for (int i = 0; i < NUM_ELEMS (TYPE); i++ )		\
      24        {							\
      25  	if (v[i] != (TYPE) IMM)				\
      26  	  __builtin_abort ();				\
      27  	asm volatile ("" ::: "memory");			\
      28        }							\
      29    }
      30  
      31  int __attribute__ ((optimize (1)))
      32  main (int argc, char **argv)
      33  {
      34    FOR_EACH_LOAD_BROADCAST (TEST_LOAD_BROADCAST)
      35    FOR_EACH_LOAD_BROADCAST_IMM (TEST_LOAD_BROADCAST_IMM)
      36  
      37    return 0;
      38  }