1  /* { dg-require-effective-target vect_float } */
       2  
       3  #include "tree-vect.h"
       4  
       5  extern void abort (void);
       6  
       7  #define OP *
       8  #define INIT 1.0
       9  
      10  float __attribute__((noinline,noclone))
      11  foo (float *__restrict__ i)
      12  {
      13    float l = INIT;
      14    int a;
      15    int b;
      16  
      17    for (a = 0; a < 4; a++)
      18      for (b = 0; b < 4; b++)
      19        l = l OP i[b];
      20  
      21    return l;
      22  }
      23  
      24  float __attribute__((noinline,noclone))
      25  foo_ref (float *__restrict__ i)
      26  {
      27    float l = INIT;
      28  
      29    l = l OP i[0];
      30    l = l OP i[1];
      31    l = l OP i[2];
      32    l = l OP i[3];
      33  
      34    l = l OP i[0];
      35    l = l OP i[1];
      36    l = l OP i[2];
      37    l = l OP i[3];
      38  
      39    l = l OP i[0];
      40    l = l OP i[1];
      41    l = l OP i[2];
      42    l = l OP i[3];
      43  
      44    l = l OP i[0];
      45    l = l OP i[1];
      46    l = l OP i[2];
      47    l = l OP i[3];
      48  
      49    return l;
      50  }
      51  
      52  union u
      53  {
      54    float f;
      55    unsigned int u;
      56  };
      57  
      58  int
      59  main (void)
      60  {
      61    union u res, res2;
      62    float a[4];
      63  
      64    if (sizeof (float) != sizeof (unsigned int))
      65      return 0;
      66  
      67    check_vect ();
      68  
      69    a[0] = 0.01;
      70    a[1] = 0.01;
      71    a[2] = 0.01;
      72    a[3] = 1.0;
      73  
      74    res.f = foo_ref (a);
      75  
      76    res2.f = foo (a);
      77  
      78    if (res.u != res2.u)
      79      abort ();
      80  
      81    return 0;
      82  }
      83  
      84  /* need -ffast-math to vectorize this loop.  */
      85  /* ARM NEON passes -ffast-math to these tests, so expect this to fail.  */
      86  /* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail arm_neon_ok } } } */