(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
fast-math-bb-slp-call-2.c
       1  /* { dg-require-effective-target vect_double } */
       2  
       3  #include "tree-vect.h"
       4  
       5  extern long int lrint (double);
       6  extern void abort (void);
       7  long int a[64];
       8  double b[64];
       9  
      10  __attribute__((noinline, noclone)) void
      11  f1 (void)
      12  {
      13    a[0] = lrint (b[0]) + 1;
      14    a[1] = lrint (b[1]) + 2;
      15    a[2] = lrint (b[2]) + 3;
      16    a[3] = lrint (b[3]) + 4;
      17    a[4] = lrint (b[4]) + 5;
      18    a[5] = lrint (b[5]) + 6;
      19    a[6] = lrint (b[6]) + 7;
      20    a[7] = lrint (b[7]) + 8;
      21  }
      22  
      23  __attribute__((noinline, noclone)) void
      24  f2 (void)
      25  {
      26    a[0] = lrint (b[0]);
      27    a[1] = lrint (b[1]);
      28    a[2] = lrint (b[2]);
      29    a[3] = lrint (b[3]);
      30    a[4] = lrint (b[4]);
      31    a[5] = lrint (b[5]);
      32    a[6] = lrint (b[6]);
      33    a[7] = lrint (b[7]);
      34  }
      35  
      36  __attribute__((noinline, noclone)) int
      37  main1 ()
      38  {
      39    int i;
      40  
      41    for (i = 0; i < 8; i++)
      42      {
      43        asm ("");
      44        b[i] = ((i & 1) ? -4 * i : 4 * i) + 0.25;
      45      }
      46    f1 ();
      47    for (i = 0; i < 8; i++)
      48      if (a[i] != ((i & 1) ? -4 * i : 4 * i) + 1 + i)
      49        abort ();
      50      else
      51        a[i] = 131.25;
      52    f2 ();
      53    for (i = 0; i < 8; i++)
      54      if (a[i] != ((i & 1) ? -4 * i : 4 * i))
      55        abort ();
      56    return 0;
      57  }
      58  
      59  int
      60  main ()
      61  {
      62    check_vect ();
      63    return main1 ();
      64  }
      65  
      66  /* { dg-final { scan-tree-dump-times "optimized: basic block" 2 "slp2" { target vect_call_lrint } } } */