51 lines
1.0 KiB
C
51 lines
1.0 KiB
C
/* { dg-require-effective-target vect_double } */
|
|
/* { dg-additional-options "-ffast-math" } */
|
|
|
|
#include "tree-vect.h"
|
|
|
|
extern void abort (void);
|
|
|
|
typedef __SIZE_TYPE__ size_t;
|
|
|
|
static double
|
|
compute(size_t n, double const * __restrict a, double const * __restrict b)
|
|
{
|
|
double res = 0.0;
|
|
size_t i;
|
|
for (i = 0; i < n; ++i)
|
|
res += a[i] + b[i];
|
|
return res;
|
|
}
|
|
|
|
void init(double *, double *);
|
|
|
|
int
|
|
main()
|
|
{
|
|
double ary1[1024];
|
|
double ary2[1024];
|
|
size_t i;
|
|
|
|
check_vect ();
|
|
|
|
// Initialize arrays
|
|
for (i = 0; i < 1024; ++i)
|
|
{
|
|
ary1[i] = 1 / (double)(i + 1);
|
|
ary2[i] = 1 + 1 / (double) (i + 1);
|
|
__asm__ volatile ("" : : : "memory");
|
|
}
|
|
|
|
// Compute two results using different starting elements
|
|
if ((int) compute (512, &ary1[0], &ary2[0]) != 525
|
|
|| (int) compute(512, &ary1[1], &ary2[1]) != 523)
|
|
abort ();
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* All targets should allow vectorizing this by some means of
|
|
dealing with the known misalignment in loop 2. */
|
|
|
|
/* { dg-final { scan-tree-dump-times "loop vectorized" 2 "vect" } } */
|