(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
live_1.c
       1  /* { dg-do assemble { target aarch64_asm_sve_ok } } */
       2  /* { dg-options "-O2 -ftree-vectorize --save-temps" } */
       3  
       4  #include <stdint.h>
       5  
       6  #define EXTRACT_LAST(TYPE)			\
       7    TYPE __attribute__ ((noinline, noclone))	\
       8    test_##TYPE (TYPE *x, int n, TYPE value)	\
       9    {						\
      10      TYPE last;					\
      11      for (int j = 0; j < n; ++j)			\
      12        {						\
      13  	last = x[j];				\
      14  	x[j] = last * value;			\
      15        }						\
      16      return last;				\
      17    }
      18  
      19  #define TEST_ALL(T)				\
      20    T (uint8_t)					\
      21    T (uint16_t)					\
      22    T (uint32_t)					\
      23    T (uint64_t)					\
      24    T (_Float16)					\
      25    T (float)					\
      26    T (double)
      27  
      28  TEST_ALL (EXTRACT_LAST)
      29  
      30  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7].b, } 2 } } */
      31  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7].h, } 4 } } */
      32  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7].s, } 4 } } */
      33  /* { dg-final { scan-assembler-times {\twhilelo\tp[0-7].d, } 4 } } */
      34  
      35  /* { dg-final { scan-assembler-times {\tlastb\tb[0-9]+, p[0-7], z[0-9]+\.b\n} 1 } } */
      36  /* { dg-final { scan-assembler-times {\tlastb\th[0-9]+, p[0-7], z[0-9]+\.h\n} 2 } } */
      37  /* { dg-final { scan-assembler-times {\tlastb\tw[0-9]+, p[0-7], z[0-9]+\.s\n} 1 } } */
      38  /* { dg-final { scan-assembler-times {\tlastb\tx[0-9]+, p[0-7], z[0-9]+\.d\n} 1 } } */
      39  /* { dg-final { scan-assembler-times {\tlastb\ts[0-9]+, p[0-7], z[0-9]+\.s\n} 1 } } */
      40  /* { dg-final { scan-assembler-times {\tlastb\td[0-9]+, p[0-7], z[0-9]+\.d\n} 1 } } */