(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
fmul_fcvt_2.c
       1  /* { dg-do run } */
       2  /* { dg-options "-save-temps -O2 -ftree-vectorize -fno-inline -fno-vect-cost-model" } */
       3  
       4  #pragma GCC target "+nosve"
       5  
       6  #define N 1024
       7  
       8  #define FUNC_DEF(__a)		\
       9  void				\
      10  foo##__a (float *a, int *b)	\
      11  {				\
      12    int i;			\
      13    for (i = 0; i < N; i++)	\
      14      b[i] = a[i] * __a##.0f;	\
      15  }
      16  
      17  FUNC_DEF (4)
      18  FUNC_DEF (8)
      19  FUNC_DEF (16)
      20  
      21  int ints[N];
      22  float floats[N];
      23  
      24  void
      25  reset_ints (int *arr)
      26  {
      27    int i;
      28  
      29    for (i = 0; i < N; i++)
      30      arr[i] = 0;
      31  }
      32  
      33  void
      34  check_result (int *is, int n)
      35  {
      36    int i;
      37  
      38    for (i = 0; i < N; i++)
      39      if (is[i] != i * n)
      40        __builtin_abort ();
      41  }
      42  
      43  #define FUNC_CHECK(__a)		\
      44  do				\
      45    {				\
      46      reset_ints (ints);		\
      47      foo##__a (floats, ints);	\
      48      check_result (ints, __a);	\
      49    } while (0)
      50  
      51  
      52  int
      53  main (void)
      54  {
      55    int i;
      56    for (i = 0; i < N; i++)
      57      floats[i] = (float) i;
      58  
      59    FUNC_CHECK (4);
      60    FUNC_CHECK (8);
      61    FUNC_CHECK (16);
      62  
      63    return 0;
      64  }
      65  
      66  /* { dg-final { scan-assembler-not "fmul\tv\[0-9\]*.*" } } */
      67  /* { dg-final { scan-assembler-times "fcvtzs\tv\[0-9\].4s, v\[0-9\].4s*.*#2" 1 } } */
      68  /* { dg-final { scan-assembler-times "fcvtzs\tv\[0-9\].4s, v\[0-9\].4s*.*#3" 1 } } */
      69  /* { dg-final { scan-assembler-times "fcvtzs\tv\[0-9\].4s, v\[0-9\].4s*.*#4" 1 } } */