blob: f90c673f82d330e5ebf77b20be8d98b34b6f6b05 [file] [log] [blame]
/* { dg-require-effective-target vect_float } */
#include "tree-vect.h"
extern void abort (void);
#define OP *
#define INIT 1.0
float __attribute__((noinline,noclone))
foo (float *__restrict__ i)
{
float l = INIT;
int a;
int b;
for (a = 0; a < 4; a++)
for (b = 0; b < 4; b++)
l = l OP i[b];
return l;
}
float __attribute__((noinline,noclone))
foo_ref (float *__restrict__ i)
{
float l = INIT;
l = l OP i[0];
l = l OP i[1];
l = l OP i[2];
l = l OP i[3];
l = l OP i[0];
l = l OP i[1];
l = l OP i[2];
l = l OP i[3];
l = l OP i[0];
l = l OP i[1];
l = l OP i[2];
l = l OP i[3];
l = l OP i[0];
l = l OP i[1];
l = l OP i[2];
l = l OP i[3];
return l;
}
union u
{
float f;
unsigned int u;
};
int
main (void)
{
union u res, res2;
float a[4];
if (sizeof (float) != sizeof (unsigned int))
return 0;
check_vect ();
a[0] = 0.01;
a[1] = 0.01;
a[2] = 0.01;
a[3] = 1.0;
res.f = foo_ref (a);
res2.f = foo (a);
if (res.u != res2.u)
abort ();
return 0;
}
/* need -ffast-math to vectorize this loop. */
/* ARM NEON passes -ffast-math to these tests, so expect this to fail. */
/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail arm_neon_ok } } } */