(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
maxmin_1.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -ftree-vectorize -ffast-math" } */
       3  
       4  #include <stdint.h>
       5  
       6  #define NUM_ELEMS(TYPE) (320 / sizeof (TYPE))
       7  
       8  #define DEF_MAXMIN(TYPE, NAME, CMP_OP)				\
       9  void __attribute__ ((noinline, noclone))			\
      10  fun_##NAME##_##TYPE (TYPE *restrict r, TYPE *restrict a,	\
      11  		     TYPE *restrict b)				\
      12  {								\
      13    for (int i = 0; i < NUM_ELEMS (TYPE); i++)			\
      14      r[i] = a[i] CMP_OP b[i] ? a[i] : b[i];			\
      15  }
      16  
      17  #define TEST_ALL(T)			\
      18    T (int8_t, max, >)			\
      19    T (int16_t, max, >)			\
      20    T (int32_t, max, >)			\
      21    T (int64_t, max, >)			\
      22    T (uint8_t, max, >)			\
      23    T (uint16_t, max, >)			\
      24    T (uint32_t, max, >)			\
      25    T (uint64_t, max, >)			\
      26    T (_Float16, max, >)			\
      27    T (float, max, >)			\
      28    T (double, max, >)			\
      29  					\
      30    T (int8_t, min, <)			\
      31    T (int16_t, min, <)			\
      32    T (int32_t, min, <)			\
      33    T (int64_t, min, <)			\
      34    T (uint8_t, min, <)			\
      35    T (uint16_t, min, <)			\
      36    T (uint32_t, min, <)			\
      37    T (uint64_t, min, <)			\
      38    T (_Float16, min, <)			\
      39    T (float, min, <)			\
      40    T (double, min, <)
      41  
      42  TEST_ALL (DEF_MAXMIN)
      43  
      44  /* { dg-final { scan-assembler-times {\tsmax\tz[0-9]+\.b, p[0-7]/m, z[0-9]+\.b, z[0-9]+\.b\n} 1 } } */
      45  /* { dg-final { scan-assembler-times {\tsmax\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, z[0-9]+\.h\n} 1 } } */
      46  /* { dg-final { scan-assembler-times {\tsmax\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
      47  /* { dg-final { scan-assembler-times {\tsmax\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */
      48  
      49  /* { dg-final { scan-assembler-times {\tumax\tz[0-9]+\.b, p[0-7]/m, z[0-9]+\.b, z[0-9]+\.b\n} 1 } } */
      50  /* { dg-final { scan-assembler-times {\tumax\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, z[0-9]+\.h\n} 1 } } */
      51  /* { dg-final { scan-assembler-times {\tumax\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
      52  /* { dg-final { scan-assembler-times {\tumax\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */
      53  
      54  /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, z[0-9]+\.h\n} 1 } } */
      55  /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
      56  /* { dg-final { scan-assembler-times {\tfmaxnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */
      57  
      58  /* { dg-final { scan-assembler-times {\tsmin\tz[0-9]+\.b, p[0-7]/m, z[0-9]+\.b, z[0-9]+\.b\n} 1 } } */
      59  /* { dg-final { scan-assembler-times {\tsmin\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, z[0-9]+\.h\n} 1 } } */
      60  /* { dg-final { scan-assembler-times {\tsmin\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
      61  /* { dg-final { scan-assembler-times {\tsmin\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */
      62  
      63  /* { dg-final { scan-assembler-times {\tumin\tz[0-9]+\.b, p[0-7]/m, z[0-9]+\.b, z[0-9]+\.b\n} 1 } } */
      64  /* { dg-final { scan-assembler-times {\tumin\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, z[0-9]+\.h\n} 1 } } */
      65  /* { dg-final { scan-assembler-times {\tumin\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
      66  /* { dg-final { scan-assembler-times {\tumin\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */
      67  
      68  /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.h, p[0-7]/m, z[0-9]+\.h, z[0-9]+\.h\n} 1 } } */
      69  /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.s, p[0-7]/m, z[0-9]+\.s, z[0-9]+\.s\n} 1 } } */
      70  /* { dg-final { scan-assembler-times {\tfminnm\tz[0-9]+\.d, p[0-7]/m, z[0-9]+\.d, z[0-9]+\.d\n} 1 } } */