1/* { dg-require-effective-target vect_float } */
2
3#include <stdarg.h>
4#include "tree-vect.h"
5
6#define N 320
7#define M 1024
8float in[N+M];
9float out[N];
10
11/* Outer-loop vectorization.  */
12
13__attribute__ ((noinline)) void
14foo (){
15  int i,j;
16  float diff;
17
18  for (i = 0; i < N; i++) {
19    diff = 0;
20    for (j = 0; j < M; j+=4) {
21      diff += in[j+i];
22    }
23    out[i]=diff;
24  }
25}
26
27int main (void)
28{
29  check_vect ();
30  int i, j;
31  float diff;
32
33  for (i = 0; i < N; i++)
34    in[i] = i;
35
36  foo ();
37
38  for (i = 0; i < N; i++) {
39    diff = 0;
40    for (j = 0; j < M; j+=4) {
41      diff += in[j+i];
42    }
43    if (out[i] != diff)
44      abort ();
45  }
46
47  return 0;
48}
49
50/* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect"  } } */
51/* { dg-final { cleanup-tree-dump "vect" } } */
52